summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2021-12-20 18:46:57 +0900
committergit <svn-admin@ruby-lang.org>2021-12-21 00:13:19 +0900
commitc3a3f65b4575898ae2ae457bc4f56d1e6bdb169f (patch)
tree4e4ff786da1c16dd7eb707ecc6358306ef559798 /lib
parent95c61c8d827959b30c12b1a5fe32df95cab81cbd (diff)
[ruby/reline] Split off set_signal_handler method
In some tests, the LineEditor#reset method is always called, but doesn't need to set the signal handlers there, so cuts it out to a separate method. https://github.com/ruby/reline/commit/b143c4f5f9
Diffstat (limited to 'lib')
-rw-r--r--lib/reline.rb1
-rw-r--r--lib/reline/line_editor.rb57
2 files changed, 31 insertions, 27 deletions
diff --git a/lib/reline.rb b/lib/reline.rb
index e5c722fe53..88f1df3995 100644
--- a/lib/reline.rb
+++ b/lib/reline.rb
@@ -290,6 +290,7 @@ module Reline
may_req_ambiguous_char_width
line_editor.reset(prompt, encoding: Reline::IOGate.encoding)
+ line_editor.set_signal_handlers
if multiline
line_editor.multiline_on
if block_given?
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb
index 657b3e7018..2c458388cd 100644
--- a/lib/reline/line_editor.rb
+++ b/lib/reline/line_editor.rb
@@ -151,33 +151,6 @@ class Reline::LineEditor
@screen_size = Reline::IOGate.get_screen_size
@screen_height = @screen_size.first
reset_variables(prompt, encoding: encoding)
- @old_trap = Signal.trap('INT') {
- clear_dialog
- if @scroll_partial_screen
- move_cursor_down(@screen_height - (@line_index - @scroll_partial_screen) - 1)
- else
- move_cursor_down(@highest_in_all - @line_index - 1)
- end
- Reline::IOGate.move_cursor_column(0)
- scroll_down(1)
- case @old_trap
- when 'DEFAULT', 'SYSTEM_DEFAULT'
- raise Interrupt
- when 'IGNORE'
- # Do nothing
- when 'EXIT'
- exit
- else
- @old_trap.call
- end
- }
- begin
- @old_tstp_trap = Signal.trap('TSTP') {
- Reline::IOGate.ungetc("\C-z".ord)
- @old_tstp_trap.call if @old_tstp_trap.respond_to?(:call)
- }
- rescue ArgumentError
- end
Reline::IOGate.set_winch_handler do
@resized = true
end
@@ -244,6 +217,36 @@ class Reline::LineEditor
end
end
+ def set_signal_handlers
+ @old_trap = Signal.trap('INT') {
+ clear_dialog
+ if @scroll_partial_screen
+ move_cursor_down(@screen_height - (@line_index - @scroll_partial_screen) - 1)
+ else
+ move_cursor_down(@highest_in_all - @line_index - 1)
+ end
+ Reline::IOGate.move_cursor_column(0)
+ scroll_down(1)
+ case @old_trap
+ when 'DEFAULT', 'SYSTEM_DEFAULT'
+ raise Interrupt
+ when 'IGNORE'
+ # Do nothing
+ when 'EXIT'
+ exit
+ else
+ @old_trap.call
+ end
+ }
+ begin
+ @old_tstp_trap = Signal.trap('TSTP') {
+ Reline::IOGate.ungetc("\C-z".ord)
+ @old_tstp_trap.call if @old_tstp_trap.respond_to?(:call)
+ }
+ rescue ArgumentError
+ end
+ end
+
def finalize
Signal.trap('INT', @old_trap)
begin