From 8c69db94621010caa2b417891cae1933cc904bd2 Mon Sep 17 00:00:00 2001 From: Kevin Fischer Date: Sat, 5 Sep 2020 20:22:22 +0900 Subject: Save cursor position in prompt --- dragon/console_prompt.rb | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'dragon') diff --git a/dragon/console_prompt.rb b/dragon/console_prompt.rb index aea5df8..2aa1e48 100644 --- a/dragon/console_prompt.rb +++ b/dragon/console_prompt.rb @@ -18,23 +18,35 @@ module GTK @cursor_color = Color.new [187, 21, 6] @console_text_width = console_text_width + @cursor_position = 0 + @last_autocomplete_prefix = nil @next_candidate_index = 0 end + def current_input_str=(str) + @current_input_str = str + @cursor_position = str.length + end + def <<(str) - @current_input_str << str + @current_input_str = @current_input_str[0...@cursor_position] + str + @current_input_str[@cursor_position..-1] + @cursor_position += str.length @current_input_changed_at = Kernel.global_tick_count reset_autocomplete end def backspace - @current_input_str.chop! + return if current_input_str.length.zero? || @cursor_position.zero? + + @current_input_str = @current_input_str[0...(@cursor_position - 1)] + @current_input_str[@cursor_position..-1] + @cursor_position -= 1 reset_autocomplete end def clear @current_input_str = '' + @cursor_position = 0 reset_autocomplete end -- cgit v1.2.3 From 6d5b91289a6db11f7fae2453fdee8297a495773e Mon Sep 17 00:00:00 2001 From: Kevin Fischer Date: Sat, 5 Sep 2020 20:24:19 +0900 Subject: Add left/right arrow behaviour --- dragon/console.rb | 4 ++++ dragon/console_prompt.rb | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'dragon') diff --git a/dragon/console.rb b/dragon/console.rb index c90755a..4f47ba0 100644 --- a/dragon/console.rb +++ b/dragon/console.rb @@ -428,6 +428,10 @@ S @command_history_index -= 1 self.current_input_str = @command_history[@command_history_index].dup end + elsif args.inputs.keyboard.key_down.left + prompt.move_cursor_left + elsif args.inputs.keyboard.key_down.right + prompt.move_cursor_right elsif inputs_scroll_up_full? args scroll_up_full elsif inputs_scroll_down_full? args diff --git a/dragon/console_prompt.rb b/dragon/console_prompt.rb index 2aa1e48..3d1257b 100644 --- a/dragon/console_prompt.rb +++ b/dragon/console_prompt.rb @@ -44,6 +44,14 @@ module GTK reset_autocomplete end + def move_cursor_left + @cursor_position -= 1 if @cursor_position > 0 + end + + def move_cursor_right + @cursor_position += 1 if @cursor_position < current_input_str.length + end + def clear @current_input_str = '' @cursor_position = 0 @@ -124,7 +132,7 @@ S def render(args, x:, y:) args.outputs.reserved << font_style.label(x: x, y: y, text: "#{@prompt}#{current_input_str}", color: @text_color) - args.outputs.reserved << font_style.label(x: x - 2, y: y + 3, text: (" " * (@prompt.length + current_input_str.length)) + "|", color: @cursor_color) + args.outputs.reserved << font_style.label(x: x - 4, y: y + 3, text: (" " * (@prompt.length + @cursor_position)) + "|", color: @cursor_color) end def tick -- cgit v1.2.3