From 4afe301ec8b86d5fcb8446b0ed134b6fb18b0997 Mon Sep 17 00:00:00 2001 From: David P Smith Date: Thu, 25 Aug 2022 01:08:31 -0400 Subject: [PATCH 1/4] use the smkx sequence to change terminal mode many terminals will only use terminfo string in application mode. smkx commands will transition the terminal to the correct mode. --- lib/reline/ansi.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/reline/ansi.rb b/lib/reline/ansi.rb index ab147a6185..47b69281b6 100644 --- a/lib/reline/ansi.rb +++ b/lib/reline/ansi.rb @@ -60,8 +60,22 @@ def self.set_default_key_bindings(config) config.add_default_key_binding_by_keymap(:emacs, key, func) end end + + @@input = STDIN + def self.input=(val) + @@input = val + end + @@output = STDOUT + def self.output=(val) + @@output = val + end def self.set_default_key_bindings_terminfo(config) + begin + @@output.write Reline::Terminfo.tigetstr('smkx') + rescue Reline::Terminfo::TerminfoError + # capname is undefined + end key_bindings = CAPNAME_KEY_BINDINGS.map do |capname, key_binding| begin key_code = Reline::Terminfo.tigetstr(capname) From 3e86762d8373cd76983f9b33f3dda899dfce3ad0 Mon Sep 17 00:00:00 2001 From: David P Smith Date: Thu, 25 Aug 2022 10:20:54 -0400 Subject: [PATCH 2/4] Add spacing, comments, and return to rx mode Cleanup some line spacing, add comments in case people want to know what the code does add at_exit block so that we return the console back to rx mode upon exist --- lib/reline/ansi.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/reline/ansi.rb b/lib/reline/ansi.rb index 47b69281b6..6ceebcd75e 100644 --- a/lib/reline/ansi.rb +++ b/lib/reline/ansi.rb @@ -70,12 +70,26 @@ def self.input=(val) def self.output=(val) @@output = val end + def self.set_default_key_bindings_terminfo(config) + + # put terminal in tx mode so that + # keys match terminfo's bindings begin @@output.write Reline::Terminfo.tigetstr('smkx') rescue Reline::Terminfo::TerminfoError # capname is undefined end + + # return terminal to rx mode + at_exit do + begin + @@output.write Reline::Terminfo.tigetstr('rmkx') + rescue Reline::Terminfo::TerminfoError + # capname is undefined + end + end + key_bindings = CAPNAME_KEY_BINDINGS.map do |capname, key_binding| begin key_code = Reline::Terminfo.tigetstr(capname) From 50c43f6a9d3e5a15b05f4e8315fc71a1bcb348e9 Mon Sep 17 00:00:00 2001 From: "David P. Smith" Date: Thu, 25 Aug 2022 12:16:58 -0400 Subject: [PATCH 3/4] Add key_delete and kdch1 codes to ansi.rb and key_delete code to the vi key command list --- lib/reline/ansi.rb | 1 + lib/reline/line_editor.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/reline/ansi.rb b/lib/reline/ansi.rb index 6ceebcd75e..9429f7f43f 100644 --- a/lib/reline/ansi.rb +++ b/lib/reline/ansi.rb @@ -15,6 +15,7 @@ class Reline::ANSI 'cud' => :ed_next_history, 'cuf' => :ed_next_char, 'cub' => :ed_prev_char, + 'kdch1' => :key_delete } if Reline::Terminfo.enabled? diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 8d0719ef7c..bfda99277c 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -37,6 +37,7 @@ class Reline::LineEditor vi_end_big_word vi_repeat_next_char vi_repeat_prev_char + key_delete } module CompletionState From 537ee1e4f48bed2df2173ae4fd7ab3d1accb56f4 Mon Sep 17 00:00:00 2001 From: "David P. Smith" Date: Thu, 25 Aug 2022 19:08:53 -0400 Subject: [PATCH 4/4] didn't need this here --- lib/reline/line_editor.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index bfda99277c..8d0719ef7c 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -37,7 +37,6 @@ class Reline::LineEditor vi_end_big_word vi_repeat_next_char vi_repeat_prev_char - key_delete } module CompletionState