diff options
-rw-r--r-- | lib/reline/ansi.rb | 16 | ||||
-rw-r--r-- | lib/reline/line_editor.rb | 4 | ||||
-rw-r--r-- | lib/reline/windows.rb | 8 |
3 files changed, 28 insertions, 0 deletions
diff --git a/lib/reline/ansi.rb b/lib/reline/ansi.rb index 09bd95662a..f642060510 100644 --- a/lib/reline/ansi.rb +++ b/lib/reline/ansi.rb @@ -274,6 +274,22 @@ class Reline::ANSI end end + def self.hide_cursor + if Reline::Terminfo.enabled? + @@output.write Reline::Terminfo.tigetstr('civis') + else + # ignored + end + end + + def self.show_cursor + if Reline::Terminfo.enabled? + @@output.write Reline::Terminfo.tigetstr('cnorm') + else + # ignored + end + end + def self.erase_after_cursor @@output.write "\e[K" end diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index f275f7cf02..d8e2842e6a 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -562,6 +562,7 @@ class Reline::LineEditor @dialog_updown = :down @dialog_vertical_offset = 1 end + Reline::IOGate.hide_cursor reset_dialog(old_dialog_contents, old_dialog_contents_width, old_dialog_column, old_dialog_vertical_offset, old_dialog_updown) case @dialog_updown when :down @@ -581,6 +582,7 @@ class Reline::LineEditor move_cursor_up(@dialog_contents.size) when :up end + Reline::IOGate.show_cursor @dialog_lines_backup = { lines: modify_lines(whole_lines), line_index: @line_index, @@ -683,6 +685,7 @@ class Reline::LineEditor visual_lines.concat(vl) } visual_lines_under_dialog = visual_lines[visual_start, @dialog_contents.size] + Reline::IOGate.hide_cursor move_cursor_down(@dialog_vertical_offset) dialog_vertical_size = @dialog_contents.size dialog_vertical_size.times do |i| @@ -698,6 +701,7 @@ class Reline::LineEditor end move_cursor_up(dialog_vertical_size - 1 + @dialog_vertical_offset) Reline::IOGate.move_cursor_column(prompt_width + @cursor) + Reline::IOGate.show_cursor end private def calculate_scroll_partial_screen(highest_in_all, cursor_y) diff --git a/lib/reline/windows.rb b/lib/reline/windows.rb index 8665f3bc45..ae87b38706 100644 --- a/lib/reline/windows.rb +++ b/lib/reline/windows.rb @@ -343,6 +343,14 @@ class Reline::Windows raise NotImplementedError end + def self.hide_cursor + # ignored + end + + def self.show_cursor + # ignored + end + def self.set_winch_handler(&handler) @@winch_handler = handler end |