зеркало из https://github.com/github/ruby.git
[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
This commit is contained in:
Родитель
95c61c8d82
Коммит
c3a3f65b45
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче