diff --git a/lib/reline/ansi.rb b/lib/reline/ansi.rb index ab147a6185..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? @@ -60,8 +61,36 @@ 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) + + # 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)