ruby-changes:59033
From: aycabta <ko1@a...>
Date: Mon, 2 Dec 2019 04:19:43 +0900 (JST)
Subject: [ruby-changes:59033] 103b04128f (master): Support incremental search again by C-r in incremental search
https://git.ruby-lang.org/ruby.git/commit/?id=103b04128f From 103b04128f4e40b87bb9c7fb2916d2a800bfd94f Mon Sep 17 00:00:00 2001 From: aycabta <aycabta@g...> Date: Mon, 2 Dec 2019 04:17:47 +0900 Subject: Support incremental search again by C-r in incremental search diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 950bc3a..fb0b47d 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -1158,6 +1158,7 @@ class Reline::LineEditor https://github.com/ruby/ruby/blob/trunk/lib/reline/line_editor.rb#L1158 last_hit = nil loop do key = Fiber.yield(search_word) + search_again = false case key when "\C-h".ord, "\C-?".ord grapheme_clusters = search_word.grapheme_clusters @@ -1165,6 +1166,8 @@ class Reline::LineEditor https://github.com/ruby/ruby/blob/trunk/lib/reline/line_editor.rb#L1166 grapheme_clusters.pop search_word = grapheme_clusters.join end + when "\C-r".ord + search_again = true else multibyte_buf << key if multibyte_buf.dup.force_encoding(@encoding).valid_encoding? @@ -1177,7 +1180,11 @@ class Reline::LineEditor https://github.com/ruby/ruby/blob/trunk/lib/reline/line_editor.rb#L1180 @history_pointer = nil hit = @line_backup_in_history else - if @history_pointer + if search_again + if @history_pointer + history = Reline::HISTORY[0..(@history_pointer - 1)] + end + elsif @history_pointer history = Reline::HISTORY[0..@history_pointer] else history = Reline::HISTORY @@ -1237,7 +1244,7 @@ class Reline::LineEditor https://github.com/ruby/ruby/blob/trunk/lib/reline/line_editor.rb#L1244 @cursor = @byte_pointer = 0 else chr = k.is_a?(String) ? k : k.chr(Encoding::ASCII_8BIT) - if chr.match?(/[[:print:]]/) or k == "\C-h".ord or k == "\C-?".ord + if chr.match?(/[[:print:]]/) or k == "\C-h".ord or k == "\C-?".ord or k == "\C-r".ord searcher.resume(k) else if @history_pointer diff --git a/test/reline/test_key_actor_emacs.rb b/test/reline/test_key_actor_emacs.rb index da2d41a..6ec583b 100644 --- a/test/reline/test_key_actor_emacs.rb +++ b/test/reline/test_key_actor_emacs.rb @@ -1452,6 +1452,28 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_key_actor_emacs.rb#L1452 assert_cursor_max(4) end + def test_search_history_twice + Reline::HISTORY.concat([ + '1235', # old + '12aa', + '1234' # new + ]) + assert_line('') + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(0) + input_keys("\C-r123") + assert_line('1234') + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(0) # doesn't determine yet + input_keys("\C-r") + assert_line('1235') + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(0) + end + def test_em_set_mark_and_em_exchange_mark input_keys('aaa bbb ccc ddd') assert_byte_pointer_size('aaa bbb ccc ddd') -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/