diff options
author | Stan Lo <stan001212@gmail.com> | 2023-07-07 18:27:14 +0100 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-07-07 17:27:25 +0000 |
commit | 24d9e21f84eced634b3e443ada2a57621b2b4b9b (patch) | |
tree | 96ecaa8228d6b04c80b48047e8a77abc15b5cb61 /lib | |
parent | a642a94b68a31c0e7c092087114c269132cdb159 (diff) |
[ruby/reline] Reduce direct references to `Reline::IOGate`
(https://github.com/ruby/reline/pull/566)
* Avoid referencing IOGate from IOGate classes
The only time those classes being used is when themselves being the IOGate.
So when referencing to IOGate, it's better to use `self` instead.
* Avoid referencing to IOGate from LineEditor directly
* Avoid referencing to IOGate from Core directly
* Reference to Reline.core directly
* Replace Reline::IOGate with Reline.core.io_gate
Diffstat (limited to 'lib')
-rw-r--r-- | lib/reline.rb | 60 | ||||
-rw-r--r-- | lib/reline/ansi.rb | 2 | ||||
-rw-r--r-- | lib/reline/line_editor.rb | 4 |
3 files changed, 37 insertions, 29 deletions
diff --git a/lib/reline.rb b/lib/reline.rb index 8da614aa2b..0a2dba4f0d 100644 --- a/lib/reline.rb +++ b/lib/reline.rb @@ -83,8 +83,12 @@ module Reline @bracketed_paste_finished = false end + def io_gate + Reline::IOGate + end + def encoding - Reline::IOGate.encoding + io_gate.encoding end def completion_append_character=(val) @@ -181,16 +185,16 @@ module Reline def input=(val) raise TypeError unless val.respond_to?(:getc) or val.nil? - if val.respond_to?(:getc) && Reline::IOGate.respond_to?(:input=) - Reline::IOGate.input = val + if val.respond_to?(:getc) && io_gate.respond_to?(:input=) + io_gate.input = val end end def output=(val) raise TypeError unless val.respond_to?(:write) or val.nil? @output = val - if Reline::IOGate.respond_to?(:output=) - Reline::IOGate.output = val + if io_gate.respond_to?(:output=) + io_gate.output = val end end @@ -213,7 +217,7 @@ module Reline end def get_screen_size - Reline::IOGate.get_screen_size + io_gate.get_screen_size end Reline::DEFAULT_DIALOG_PROC_AUTOCOMPLETE = ->() { @@ -267,7 +271,7 @@ module Reline def readmultiline(prompt = '', add_hist = false, &confirm_multiline_termination) Reline.update_iogate - Reline::IOGate.with_raw_input do + io_gate.with_raw_input do unless confirm_multiline_termination raise ArgumentError.new('#readmultiline needs block to confirm multiline termination') end @@ -300,7 +304,7 @@ module Reline private def inner_readline(prompt, add_hist, multiline, &confirm_multiline_termination) if ENV['RELINE_STDERR_TTY'] - if Reline::IOGate.win? + if io_gate.win? $stderr = File.open(ENV['RELINE_STDERR_TTY'], 'a') else $stderr.reopen(ENV['RELINE_STDERR_TTY'], 'w') @@ -308,7 +312,7 @@ module Reline $stderr.sync = true $stderr.puts "Reline is used by #{Process.pid}" end - otio = Reline::IOGate.prep + otio = io_gate.prep may_req_ambiguous_char_width line_editor.reset(prompt, encoding: encoding) @@ -335,7 +339,7 @@ module Reline unless config.test_mode config.read config.reset_default_key_bindings - Reline::IOGate.set_default_key_bindings(config) + io_gate.set_default_key_bindings(config) end line_editor.rerender @@ -344,9 +348,9 @@ module Reline line_editor.set_signal_handlers prev_pasting_state = false loop do - prev_pasting_state = Reline::IOGate.in_pasting? + prev_pasting_state = io_gate.in_pasting? read_io(config.keyseq_timeout) { |inputs| - line_editor.set_pasting_state(Reline::IOGate.in_pasting?) + line_editor.set_pasting_state(io_gate.in_pasting?) inputs.each { |c| line_editor.input_key(c) line_editor.rerender @@ -356,29 +360,29 @@ module Reline @bracketed_paste_finished = false end } - if prev_pasting_state == true and not Reline::IOGate.in_pasting? and not line_editor.finished? + if prev_pasting_state == true and not io_gate.in_pasting? and not line_editor.finished? line_editor.set_pasting_state(false) prev_pasting_state = false line_editor.rerender_all end break if line_editor.finished? end - Reline::IOGate.move_cursor_column(0) + io_gate.move_cursor_column(0) rescue Errno::EIO # Maybe the I/O has been closed. rescue StandardError => e line_editor.finalize - Reline::IOGate.deprep(otio) + io_gate.deprep(otio) raise e rescue Exception # Including Interrupt line_editor.finalize - Reline::IOGate.deprep(otio) + io_gate.deprep(otio) raise end line_editor.finalize - Reline::IOGate.deprep(otio) + io_gate.deprep(otio) end # GNU Readline waits for "keyseq-timeout" milliseconds to see if the ESC @@ -393,7 +397,7 @@ module Reline private def read_io(keyseq_timeout, &block) buffer = [] loop do - c = Reline::IOGate.getc + c = io_gate.getc if c == -1 result = :unmatched @bracketed_paste_finished = true @@ -433,7 +437,7 @@ module Reline begin succ_c = nil Timeout.timeout(keyseq_timeout / 1000.0) { - succ_c = Reline::IOGate.getc + succ_c = io_gate.getc } rescue Timeout::Error # cancel matching only when first byte block.([Reline::Key.new(c, c, false)]) @@ -448,7 +452,7 @@ module Reline end return :break when :matching - Reline::IOGate.ungetc(succ_c) + io_gate.ungetc(succ_c) return :next when :matched buffer << succ_c @@ -465,7 +469,7 @@ module Reline begin escaped_c = nil Timeout.timeout(keyseq_timeout / 1000.0) { - escaped_c = Reline::IOGate.getc + escaped_c = io_gate.getc } rescue Timeout::Error # independent ESC block.([Reline::Key.new(c, c, false)]) @@ -488,19 +492,19 @@ module Reline end private def may_req_ambiguous_char_width - @ambiguous_width = 2 if Reline::IOGate == Reline::GeneralIO or !STDOUT.tty? + @ambiguous_width = 2 if io_gate == Reline::GeneralIO or !STDOUT.tty? return if defined? @ambiguous_width - Reline::IOGate.move_cursor_column(0) + io_gate.move_cursor_column(0) begin output.write "\u{25bd}" rescue Encoding::UndefinedConversionError # LANG=C @ambiguous_width = 1 else - @ambiguous_width = Reline::IOGate.cursor_pos.x + @ambiguous_width = io_gate.cursor_pos.x end - Reline::IOGate.move_cursor_column(0) - Reline::IOGate.erase_after_cursor + io_gate.move_cursor_column(0) + io_gate.erase_after_cursor end end @@ -576,7 +580,7 @@ module Reline end def self.ungetc(c) - Reline::IOGate.ungetc(c) + core.io_gate.ungetc(c) end def self.line_editor @@ -588,7 +592,7 @@ module Reline # Need to change IOGate when `$stdout.tty?` change from false to true by `$stdout.reopen` # Example: rails/spring boot the application in non-tty, then run console in tty. - if ENV['TERM'] != 'dumb' && Reline::IOGate == Reline::GeneralIO && $stdout.tty? + if ENV['TERM'] != 'dumb' && core.io_gate == Reline::GeneralIO && $stdout.tty? require 'reline/ansi' remove_const(:IOGate) const_set(:IOGate, Reline::ANSI) diff --git a/lib/reline/ansi.rb b/lib/reline/ansi.rb index 06ea9efd09..1e018d4e82 100644 --- a/lib/reline/ansi.rb +++ b/lib/reline/ansi.rb @@ -206,7 +206,7 @@ class Reline::ANSI end def self.in_pasting? - @@in_bracketed_paste_mode or (not Reline::IOGate.empty_buffer?) + @@in_bracketed_paste_mode or (not empty_buffer?) end def self.empty_buffer? diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 404a595f9c..4030902139 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -60,6 +60,10 @@ class Reline::LineEditor reset_variables(encoding: encoding) end + def io_gate + Reline::IOGate + end + def set_pasting_state(in_pasting) @in_pasting = in_pasting end |