diff options
author | tomoya ishida <[email protected]> | 2024-04-05 01:38:41 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <[email protected]> | 2024-04-05 09:34:28 +0900 |
commit | 4e48d2724edafdebfe7fba4db01a50cd2a726d20 () | |
tree | e5218642e844ad49bf154d0740148b68414e4652 /lib/reline.rb | |
parent | 4cbe4e49c7e2a90d7d34337343187ab9af2f58d1 (diff) |
[ruby/reline] Thread safe readline
(https://.com/ruby/reline/pull/669) Block until other Reline.readline or Reline.readmultiline finish https://.com/ruby/reline/commit/ebab2875f1
-rw-r--r-- | lib/reline.rb | 63 |
1 files changed, 34 insertions, 29 deletions
@@ -75,6 +75,7 @@ module Reline def initialize self.output = STDOUT @dialog_proc_list = {} yield self @completion_quote_character = nil @@ -254,44 +255,48 @@ module Reline Reline::DEFAULT_DIALOG_CONTEXT = Array.new def readmultiline(prompt = '', add_hist = false, &confirm_multiline_termination) - unless confirm_multiline_termination - raise ArgumentError.new('#readmultiline needs block to confirm multiline termination') - end - Reline.update_iogate - io_gate.with_raw_input do - inner_readline(prompt, add_hist, true, &confirm_multiline_termination) - end - whole_buffer = line_editor.whole_buffer.dup - whole_buffer.taint if RUBY_VERSION < '2.7' - if add_hist and whole_buffer and whole_buffer.chomp("\n").size > 0 - Reline::HISTORY << whole_buffer - end - if line_editor.eof? - line_editor.reset_line - # Return nil if the input is aborted by C-d. - nil - else - whole_buffer end end def readline(prompt = '', add_hist = false) - Reline.update_iogate - io_gate.with_raw_input do - inner_readline(prompt, add_hist, false) - end - line = line_editor.line.dup - line.taint if RUBY_VERSION < '2.7' - if add_hist and line and line.chomp("\n").size > 0 - Reline::HISTORY << line.chomp("\n") - end - line_editor.reset_line if line_editor.line.nil? - line end private def inner_readline(prompt, add_hist, multiline, &confirm_multiline_termination) |