diff --git a/lib/irb.rb b/lib/irb.rb index 8e27aff0b..ebb89f454 100644 --- a/lib/irb.rb +++ b/lib/irb.rb @@ -312,7 +312,9 @@ # ### Input Method # # The IRB input method determines how command input is to be read; by default, -# the input method for a session is IRB::RelineInputMethod. +# the input method for a session is IRB::RelineInputMethod. Unless the +# value of the TERM environment variable is 'dumb', in which case the +# most simplistic input method is used. # # You can set the input method by: # @@ -330,7 +332,8 @@ # IRB::ReadlineInputMethod. # * `--nosingleline` or `--multiline` sets the input method to # IRB::RelineInputMethod. -# +# * `--nosingleline` together with `--nomultiline` sets the +# input to IRB::StdioInputMethod. # # # Method `conf.use_multiline?` and its synonym `conf.use_reline` return: diff --git a/lib/irb/context.rb b/lib/irb/context.rb index 60dfb9668..1d9b48e2a 100644 --- a/lib/irb/context.rb +++ b/lib/irb/context.rb @@ -85,7 +85,7 @@ def initialize(irb, workspace = nil, input_method = nil) @io = nil case use_multiline? when nil - if STDIN.tty? && IRB.conf[:PROMPT_MODE] != :INF_RUBY && !use_singleline? + if term_interactive? && IRB.conf[:PROMPT_MODE] != :INF_RUBY && !use_singleline? # Both of multiline mode and singleline mode aren't specified. @io = RelineInputMethod.new(build_completor) else @@ -99,7 +99,7 @@ def initialize(irb, workspace = nil, input_method = nil) unless @io case use_singleline? when nil - if (defined?(ReadlineInputMethod) && STDIN.tty? && + if (defined?(ReadlineInputMethod) && term_interactive? && IRB.conf[:PROMPT_MODE] != :INF_RUBY) @io = ReadlineInputMethod.new else @@ -151,6 +151,10 @@ def initialize(irb, workspace = nil, input_method = nil) @command_aliases = @user_aliases.merge(KEYWORD_ALIASES) end + private def term_interactive? + STDIN.tty? && ENV['TERM'] != 'dumb' + end + # because all input will eventually be evaluated as Ruby code, # command names that conflict with Ruby keywords need special workaround # we can remove them once we implemented a better command system for IRB