diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-12-14 11:01:49 +0900 |
---|---|---|
committer | aycabta <aycabta@gmail.com> | 2019-12-22 01:57:35 +0900 |
commit | 7fd6077d9896cc10244fb9416ef87ae461c079db (patch) | |
tree | b0b78293b0aaeb997d24db3cbec4ff2b8de9fe83 | |
parent | 85a337f986fe6da99c7f8358f790f17b122b3903 (diff) | |
download | ruby-7fd6077d9896cc10244fb9416ef87ae461c079db.tar.gz |
[ruby/reline] Consider Reline::ANSI.input at prep
https://github.com/ruby/reline/commit/b111cde3c3
-rw-r--r-- | lib/reline/ansi.rb | 23 |
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 |