aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-12-14 11:01:49 +0900
committeraycabta <aycabta@gmail.com>2019-12-22 01:57:35 +0900
commit7fd6077d9896cc10244fb9416ef87ae461c079db (patch)
treeb0b78293b0aaeb997d24db3cbec4ff2b8de9fe83
parent85a337f986fe6da99c7f8358f790f17b122b3903 (diff)
downloadruby-7fd6077d9896cc10244fb9416ef87ae461c079db.tar.gz
[ruby/reline] Consider Reline::ANSI.input at prep
https://github.com/ruby/reline/commit/b111cde3c3
-rw-r--r--lib/reline/ansi.rb23
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/reline/ansi.rb b/lib/reline/ansi.rb
index e29ee75537..21c05403ab 100644
--- a/lib/reline/ansi.rb
+++ b/lib/reline/ansi.rb
@@ -120,20 +120,29 @@ class Reline::ANSI
def self.prep
retrieve_keybuffer
int_handle = Signal.trap('INT', 'IGNORE')
- otio = `stty -g`.chomp
- setting = ' -echo -icrnl cbreak -ixoff -iexten'
- stty = `stty -a`
- if /-parenb\b/ =~ stty
- setting << ' pass8'
+ begin
+ otio = IO.popen(%w[stty -g], in: @@input, &:read).chomp
+ rescue ArgumentError
+ else
+ setting = %w'-echo -icrnl cbreak -ixoff -iexten'
+ stty = IO.popen(%w[stty -a], in: @@input, &:read)
+ if /-parenb\b/ =~ stty
+ setting << 'pass8'
+ end
+ system("stty", *setting, in: @@input)
end
- `stty #{setting}`
Signal.trap('INT', int_handle)
otio
end
def self.deprep(otio)
int_handle = Signal.trap('INT', 'IGNORE')
- system("stty #{otio}", err: File::NULL)
+ if otio
+ begin
+ system("stty #{otio}", in: @@input, err: File::NULL)
+ rescue ArgumentError
+ end
+ end
Signal.trap('INT', int_handle)
Signal.trap('WINCH', @@old_winch_handler) if @@old_winch_handler
end