Skip to content

Commit a7922da

Browse files
committed
Support isearch-terminators
1 parent 0d3188f commit a7922da

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

lib/reline/config.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class InvalidInputrc < RuntimeError
3838
vi-ins-mode-icon
3939
emacs-mode-string
4040
enable-bracketed-paste
41+
isearch-terminators
4142
}
4243
VARIABLE_NAME_SYMBOLS = VARIABLE_NAMES.map { |v| :"#{v.tr(?-, ?_)}" }
4344
VARIABLE_NAME_SYMBOLS.each do |v|
@@ -238,7 +239,7 @@ def bind_variable(name, value)
238239
when 'completion-query-items'
239240
@completion_query_items = value.to_i
240241
when 'isearch-terminators'
241-
@isearch_terminators = instance_eval(value)
242+
@isearch_terminators = retrieve_string(value)
242243
when 'editing-mode'
243244
case value
244245
when 'emacs'

lib/reline/line_editor.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1593,9 +1593,11 @@ def finish
15931593
searcher = generate_searcher
15941594
searcher.resume(key)
15951595
@searching_prompt = "(reverse-i-search)`': "
1596+
termination_keys = ["\C-j".ord]
1597+
termination_keys.concat(@config.isearch_terminators&.chars&.map(&:ord)) if @config.isearch_terminators
15961598
@waiting_proc = ->(k) {
15971599
case k
1598-
when "\C-j".ord
1600+
when *termination_keys
15991601
if @history_pointer
16001602
buffer = Reline::HISTORY[@history_pointer]
16011603
else

test/reline/test_key_actor_emacs.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1894,6 +1894,36 @@ def test_search_history_by_last_determined
18941894
assert_cursor_max(0)
18951895
end
18961896

1897+
def test_search_history_with_isearch_terminator
1898+
@config.read_lines(<<~LINES.split(/(?<=\n)/))
1899+
set isearch-terminators "XYZ"
1900+
LINES
1901+
Reline::HISTORY.concat([
1902+
'1235', # old
1903+
'12aa',
1904+
'1234' # new
1905+
])
1906+
assert_line('')
1907+
assert_byte_pointer_size('')
1908+
assert_cursor(0)
1909+
assert_cursor_max(0)
1910+
input_keys("\C-r12a")
1911+
assert_line('12aa')
1912+
assert_byte_pointer_size('')
1913+
assert_cursor(0)
1914+
assert_cursor_max(0) # doesn't determine yet
1915+
input_keys('Y')
1916+
assert_line('12aa')
1917+
assert_byte_pointer_size('')
1918+
assert_cursor(0)
1919+
assert_cursor_max(4)
1920+
input_keys('x')
1921+
assert_line('x12aa')
1922+
assert_byte_pointer_size('x')
1923+
assert_cursor(1)
1924+
assert_cursor_max(5)
1925+
end
1926+
18971927
def test_em_set_mark_and_em_exchange_mark
18981928
input_keys('aaa bbb ccc ddd')
18991929
assert_byte_pointer_size('aaa bbb ccc ddd')

0 commit comments

Comments
 (0)