Skip to content

Commit

Permalink
Handle mode condition in inputrc
Browse files Browse the repository at this point in the history
  • Loading branch information
ima1zumi committed Apr 25, 2024
1 parent 0d8aea2 commit 2164313
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
5 changes: 4 additions & 1 deletion lib/reline/config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ def read_lines(lines, file = nil)
next
when /\s*("#{KEYSEQ_PATTERN}+")\s*:\s*(.*)\s*$/o
key, func_name = $1, $2
func_name = func_name.split.first
keystroke, func = bind_key(key, func_name)
next unless keystroke
@additional_key_bindings[@keymap_label][@keymap_prefix + keystroke] = func
Expand All @@ -226,7 +227,9 @@ def handle_directive(directive, file, no, if_stack)
when 'if'
condition = false
case args
when 'mode'
when /^mode=(vi|emacs)$/i
condition = true
@keymap_label = $1.downcase == 'emacs' ? :emacs : :vi_insert
when 'term'
when 'version'
else # application name
Expand Down
40 changes: 40 additions & 0 deletions test/reline/test_config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,46 @@ def test_unmatched_endif
assert_equal "INPUTRC:1: unmatched endif", e.message
end

def test_if_with_mode
@config.read_lines(<<~LINES.lines)
$if mode=vi
"\C-e": history-search-backward # comment
$else
"\C-f": history-search-forward
$endif
LINES

assert_equal({[5] => :history_search_backward}, @config.instance_variable_get(:@additional_key_bindings)[:vi_insert])
assert_equal({}, @config.instance_variable_get(:@additional_key_bindings)[:vi_command])
assert_equal({}, @config.instance_variable_get(:@additional_key_bindings)[:emacs])
end

def test_if_with_invalid_mode
@config.read_lines(<<~LINES.lines)
$if mode=vim
"\C-e": history-search-backward
$else
"\C-f": history-search-forward # comment
$endif
LINES

assert_equal({}, @config.instance_variable_get(:@additional_key_bindings)[:vi_insert])
assert_equal({}, @config.instance_variable_get(:@additional_key_bindings)[:vi_command])
assert_equal({[6] => :history_search_forward}, @config.instance_variable_get(:@additional_key_bindings)[:emacs])
end

def test_if_without_else_condition
@config.read_lines(<<~LINES.lines)
$if mode=emacs
"\C-e": history-search-backward
$endif
LINES

assert_equal({[5] => :history_search_backward}, @config.instance_variable_get(:@additional_key_bindings)[:emacs])
assert_equal({}, @config.instance_variable_get(:@additional_key_bindings)[:vi_insert])
assert_equal({}, @config.instance_variable_get(:@additional_key_bindings)[:vi_command])
end

def test_default_key_bindings
@config.add_default_key_binding('abcd'.bytes, 'EFGH'.bytes)
@config.read_lines(<<~'LINES'.lines)
Expand Down

0 comments on commit 2164313

Please sign in to comment.