From 59e4ade80708e0362ce7bae77823cb051847df6c Mon Sep 17 00:00:00 2001 From: Mari Imaizumi Date: Sat, 31 Aug 2024 12:26:47 +0900 Subject: [PATCH] Implement re-read-init-file (#740) --- lib/reline/config.rb | 24 +++++++++++++++++------- lib/reline/line_editor.rb | 4 ++++ test/reline/test_config.rb | 15 +++++++++++++++ 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/lib/reline/config.rb b/lib/reline/config.rb index 16ed7eee05..12b2d22237 100644 --- a/lib/reline/config.rb +++ b/lib/reline/config.rb @@ -29,6 +29,17 @@ class InvalidInputrc < RuntimeError attr_accessor :autocompletion def initialize + reset_variables + end + + def reset + if editing_mode_is?(:vi_command) + @editing_mode_label = :vi_insert + end + @oneshot_key_bindings.clear + end + + def reset_variables @additional_key_bindings = { # from inputrc emacs: Reline::KeyActor::Base.new, vi_insert: Reline::KeyActor::Base.new, @@ -54,13 +65,7 @@ def initialize @convert_meta = true if seven_bit_encoding?(Reline::IOGate.encoding) @loaded = false @enable_bracketed_paste = true - end - - def reset - if editing_mode_is?(:vi_command) - @editing_mode_label = :vi_insert - end - @oneshot_key_bindings.clear + @show_mode_in_prompt = false end def editing_mode @@ -360,6 +365,11 @@ def parse_keyseq(str) ret end + def reload + reset_variables + read + end + private def seven_bit_encoding?(encoding) encoding == Encoding::US_ASCII end diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 9c97415050..5f7f00c979 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -2554,4 +2554,8 @@ def finish private def set_next_action_state(type, value) @next_action_state = [type, value] end + + private def re_read_init_file(_key) + @config.reload + end end diff --git a/test/reline/test_config.rb b/test/reline/test_config.rb index c14069d117..172c965fde 100644 --- a/test/reline/test_config.rb +++ b/test/reline/test_config.rb @@ -13,6 +13,7 @@ def setup Dir.chdir(@tmpdir) Reline.test_mode @config = Reline::Config.new + @inputrc_backup = ENV['INPUTRC'] end def teardown @@ -20,6 +21,7 @@ def teardown FileUtils.rm_rf(@tmpdir) Reline.test_reset @config.reset + ENV['INPUTRC'] = @inputrc_backup end def additional_key_bindings(keymap_label) @@ -562,4 +564,17 @@ def test_relative_xdg_config_home ENV['XDG_CONFIG_HOME'] = xdg_config_home_backup ENV['HOME'] = home_backup end + + def test_reload + inputrc = "#{@tmpdir}/inputrc" + ENV['INPUTRC'] = inputrc + + File.write(inputrc, "set emacs-mode-string !") + @config.read + assert_equal '!', @config.emacs_mode_string + + File.write(inputrc, "set emacs-mode-string ?") + @config.reload + assert_equal '?', @config.emacs_mode_string + end end