From cdf73d07395b37c6135d4d4b5e62b706b24e0c56 Mon Sep 17 00:00:00 2001 From: crumblingstatue Date: Sun, 16 Apr 2023 01:51:37 +0200 Subject: [PATCH] Add basic command history --- src/debug.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/debug.rs b/src/debug.rs index c9e32a2..8ab1a90 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -1,5 +1,6 @@ use std::fmt::Write; +use egui::TextBuffer; use egui_inspect::{derive::Inspect, inspect}; use sfml::audio::SoundSource; @@ -29,6 +30,7 @@ pub struct Console { pub cmdline: String, pub log: String, pub just_opened: bool, + pub history: Vec, } fn debug_panel_ui( @@ -128,6 +130,8 @@ pub(crate) fn do_debug_ui( fn console_ui(ctx: &egui::Context, debug: &mut DebugState, cmd: &mut CmdVec) { egui::Window::new("Console (F11)").show(ctx, |ui| { + let up_arrow = + ui.input_mut(|inp| inp.consume_key(egui::Modifiers::default(), egui::Key::ArrowUp)); let re = ui.add(egui::TextEdit::singleline(&mut debug.console.cmdline).hint_text("Command")); if debug.console.just_opened { @@ -139,16 +143,21 @@ fn console_ui(ctx: &egui::Context, debug: &mut DebugState, cmd: &mut CmdVec) { Ok(cmd) => cmd, Err(e) => { writeln!(&mut debug.console.log, "{e}").unwrap(); - debug.console.cmdline.clear(); + debug.console.history.push(debug.console.cmdline.take()); return; } }; - debug.console.cmdline.clear(); + debug.console.history.push(debug.console.cmdline.take()); match cmdline.dispatch() { crate::cmdline::Dispatch::Cmd(command) => cmd.push(command), crate::cmdline::Dispatch::ClearConsole => debug.console.log.clear(), } } + if up_arrow { + if let Some(line) = debug.console.history.pop() { + debug.console.cmdline = line; + } + } egui::ScrollArea::vertical() .stick_to_bottom(true) .show(ui, |ui| {