[ruby/reline] Support isearch-terminators

https://github.com/ruby/reline/commit/a7922da16b
This commit is contained in:
aycabta 2020-12-22 04:38:01 +09:00
Родитель 294552ca6c
Коммит b52bc4a9c2
3 изменённых файлов: 35 добавлений и 2 удалений

Просмотреть файл

@ -38,6 +38,7 @@ class Reline::Config
vi-ins-mode-icon
emacs-mode-string
enable-bracketed-paste
isearch-terminators
}
VARIABLE_NAME_SYMBOLS = VARIABLE_NAMES.map { |v| :"#{v.tr(?-, ?_)}" }
VARIABLE_NAME_SYMBOLS.each do |v|
@ -238,7 +239,7 @@ class Reline::Config
when 'completion-query-items'
@completion_query_items = value.to_i
when 'isearch-terminators'
@isearch_terminators = instance_eval(value)
@isearch_terminators = retrieve_string(value)
when 'editing-mode'
case value
when 'emacs'

Просмотреть файл

@ -1593,9 +1593,11 @@ class Reline::LineEditor
searcher = generate_searcher
searcher.resume(key)
@searching_prompt = "(reverse-i-search)`': "
termination_keys = ["\C-j".ord]
termination_keys.concat(@config.isearch_terminators&.chars&.map(&:ord)) if @config.isearch_terminators
@waiting_proc = ->(k) {
case k
when "\C-j".ord
when *termination_keys
if @history_pointer
buffer = Reline::HISTORY[@history_pointer]
else

Просмотреть файл

@ -1894,6 +1894,36 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase
assert_cursor_max(0)
end
def test_search_history_with_isearch_terminator
@config.read_lines(<<~LINES.split(/(?<=\n)/))
set isearch-terminators "XYZ"
LINES
Reline::HISTORY.concat([
'1235', # old
'12aa',
'1234' # new
])
assert_line('')
assert_byte_pointer_size('')
assert_cursor(0)
assert_cursor_max(0)
input_keys("\C-r12a")
assert_line('12aa')
assert_byte_pointer_size('')
assert_cursor(0)
assert_cursor_max(0) # doesn't determine yet
input_keys('Y')
assert_line('12aa')
assert_byte_pointer_size('')
assert_cursor(0)
assert_cursor_max(4)
input_keys('x')
assert_line('x12aa')
assert_byte_pointer_size('x')
assert_cursor(1)
assert_cursor_max(5)
end
def test_em_set_mark_and_em_exchange_mark
input_keys('aaa bbb ccc ddd')
assert_byte_pointer_size('aaa bbb ccc ddd')