From 6258cc6b578be156db644bf8b86a82acc099da2b Mon Sep 17 00:00:00 2001 From: aycabta Date: Mon, 30 Aug 2021 02:08:16 +0900 Subject: [PATCH 1/4] Add --autocomplete / --noautocomplete options --- doc/irb/irb.rd.ja | 2 ++ lib/irb.rb | 3 +++ lib/irb/context.rb | 5 +++++ lib/irb/init.rb | 5 +++++ lib/irb/input-method.rb | 5 ++++- lib/irb/lc/help-message | 2 ++ lib/irb/lc/ja/help-message | 2 ++ man/irb.1 | 8 ++++++++ test/irb/test_context.rb | 1 + 9 files changed, 32 insertions(+), 1 deletion(-) diff --git a/doc/irb/irb.rd.ja b/doc/irb/irb.rd.ja index dd8333b59..92824a514 100644 --- a/doc/irb/irb.rd.ja +++ b/doc/irb/irb.rd.ja @@ -56,6 +56,8 @@ irbの使い方は, Rubyさえ知っていればいたって簡単です. 基本 用しようとする. --colorize 色付けを利用する. --nocolorize 色付けを利用しない. + --autocomplete オートコンプリートを利用する. + --noautocomplete オートコンプリートを利用しない. --prompt prompt-mode --prompt-mode prompt-mode プロンプトモードを切替えます. 現在定義されているプ diff --git a/lib/irb.rb b/lib/irb.rb index 661c55048..c22e6db03 100644 --- a/lib/irb.rb +++ b/lib/irb.rb @@ -72,6 +72,8 @@ # --nosingleline Don't use singleline editor module # --colorize Use colorization # --nocolorize Don't use colorization +# --autocomplete Use autocompletion +# --noautocomplete Don't use autocompletion # --prompt prompt-mode/--prompt-mode prompt-mode # Switch prompt mode. Pre-defined prompt modes are # `default', `simple', `xmp' and `inf-ruby' @@ -114,6 +116,7 @@ # IRB.conf[:USE_SINGLELINE] = nil # IRB.conf[:USE_COLORIZE] = true # IRB.conf[:USE_TRACER] = false +# IRB.conf[:USE_AUTOCOMPLETE] = true # IRB.conf[:IGNORE_SIGINT] = true # IRB.conf[:IGNORE_EOF] = false # IRB.conf[:PROMPT_MODE] = :DEFAULT diff --git a/lib/irb/context.rb b/lib/irb/context.rb index 0d358de6f..3827bda43 100644 --- a/lib/irb/context.rb +++ b/lib/irb/context.rb @@ -54,6 +54,7 @@ def initialize(irb, workspace = nil, input_method = nil) @use_multiline = nil end @use_colorize = IRB.conf[:USE_COLORIZE] + @use_autocomplete = IRB.conf[:USE_AUTOCOMPLETE] @verbose = IRB.conf[:VERBOSE] @io = nil @@ -185,6 +186,8 @@ def main # # A copy of the default IRB.conf[:USE_COLORIZE] attr_reader :use_colorize + # A copy of the default IRB.conf[:USE_AUTOCOMPLETE] + attr_reader :use_autocomplete # A copy of the default IRB.conf[:INSPECT_MODE] attr_reader :inspect_mode @@ -311,6 +314,8 @@ def main alias use_readline? use_singleline # Alias for #use_colorize alias use_colorize? use_colorize + # Alias for #use_autocomplete + alias use_autocomplete? use_autocomplete # Alias for #rc alias rc? rc alias ignore_sigint? ignore_sigint diff --git a/lib/irb/init.rb b/lib/irb/init.rb index 5923c54a2..3c27b4fff 100644 --- a/lib/irb/init.rb +++ b/lib/irb/init.rb @@ -45,6 +45,7 @@ def IRB.init_config(ap_path) @CONF[:USE_SINGLELINE] = false unless defined?(ReadlineInputMethod) @CONF[:USE_COLORIZE] = !ENV['NO_COLOR'] + @CONF[:USE_AUTOCOMPLETE] = true @CONF[:INSPECT_MODE] = true @CONF[:USE_TRACER] = false @CONF[:USE_LOADER] = false @@ -274,6 +275,10 @@ def IRB.parse_opts(argv: ::ARGV) @CONF[:USE_COLORIZE] = true when "--nocolorize" @CONF[:USE_COLORIZE] = false + when "--autocomplete" + @CONF[:USE_AUTOCOMPLETE] = true + when "--noautocomplete" + @CONF[:USE_AUTOCOMPLETE] = false when /^--prompt-mode(?:=(.+))?/, /^--prompt(?:=(.+))?/ opt = $1 || argv.shift prompt_mode = opt.upcase.tr("-", "_").intern diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb index 4d55e4ef3..3dec9d0ce 100644 --- a/lib/irb/input-method.rb +++ b/lib/irb/input-method.rb @@ -295,6 +295,10 @@ def initialize end end Reline.dig_perfect_match_proc = IRB::InputCompletor::PerfectMatchedProc + Reline.autocompletion = IRB.conf[:USE_AUTOCOMPLETE] + if IRB.conf[:USE_AUTOCOMPLETE] + Reline.add_dialog_proc(:show_doc, SHOW_DOC_DIALOG, Reline::DEFAULT_DIALOG_CONTEXT) + end end def check_termination(&block) @@ -361,7 +365,6 @@ def gets Reline.output = @stdout Reline.prompt_proc = @prompt_proc Reline.auto_indent_proc = @auto_indent_proc if @auto_indent_proc - Reline.add_dialog_proc(:show_doc, SHOW_DOC_DIALOG, Reline::DEFAULT_DIALOG_CONTEXT) if l = readmultiline(@prompt, false, &@check_termination_proc) HISTORY.push(l) if !l.empty? @line[@line_no += 1] = l + "\n" diff --git a/lib/irb/lc/help-message b/lib/irb/lc/help-message index 9c3ea859a..30f49947d 100644 --- a/lib/irb/lc/help-message +++ b/lib/irb/lc/help-message @@ -30,6 +30,8 @@ Usage: irb.rb [options] [programfile] [arguments] --nosingleline Don't use singleline editor module --colorize Use colorization --nocolorize Don't use colorization + --autocomplete Use autocompletion + --noautocomplete Don't use autocompletion --prompt prompt-mode/--prompt-mode prompt-mode Switch prompt mode. Pre-defined prompt modes are `default', `simple', `xmp' and `inf-ruby' diff --git a/lib/irb/lc/ja/help-message b/lib/irb/lc/ja/help-message index 9794a8e24..238535afb 100644 --- a/lib/irb/lc/ja/help-message +++ b/lib/irb/lc/ja/help-message @@ -29,6 +29,8 @@ Usage: irb.rb [options] [programfile] [arguments] --nosingleline シングルラインエディタを利用しない. --colorize 色付けを利用する. --nocolorize 色付けを利用しない. + --autocomplete オートコンプリートを利用する. + --noautocomplete オートコンプリートを利用しない. --prompt prompt-mode/--prompt-mode prompt-mode プロンプトモードを切替えます. 現在定義されているプ ロンプトモードは, default, simple, xmp, inf-rubyが diff --git a/man/irb.1 b/man/irb.1 index f0a720fbd..a7f2ce422 100644 --- a/man/irb.1 +++ b/man/irb.1 @@ -18,6 +18,7 @@ .Op Fl - Ns Oo no Oc Ns singleline .Op Fl - Ns Oo no Oc Ns echo .Op Fl - Ns Oo no Oc Ns colorize +.Op Fl - Ns Oo no Oc Ns autocomplete .Op Fl - Ns Oo no Oc Ns verbose .Op Fl -prompt Ar mode .Op Fl -prompt-mode Ar mode @@ -118,6 +119,13 @@ Use colorization. Don't use colorization. .Pp .Pp +.It Fl -autocomplete +Use autocompletion. +.Pp +.It Fl -noautocomplete +Don't use autocompletion. +.Pp +.Pp .It Fl -verbose Show details. .Pp diff --git a/test/irb/test_context.rb b/test/irb/test_context.rb index 71e8ad1c0..56878af63 100644 --- a/test/irb/test_context.rb +++ b/test/irb/test_context.rb @@ -159,6 +159,7 @@ def test_eval_object_without_inspect_method def test_default_config assert_equal(true, @context.use_colorize?) + assert_equal(true, @context.use_autocomplete?) end def test_assignment_expression From 66178f34b9a96dcc53720e24a0e29b0799e29347 Mon Sep 17 00:00:00 2001 From: aycabta Date: Mon, 30 Aug 2021 02:18:18 +0900 Subject: [PATCH 2/4] Update dependency to "reline >= 0.2.7.pre.2" for Reline.autocomplete=() --- irb.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/irb.gemspec b/irb.gemspec index 881839532..6f9a8ff2c 100644 --- a/irb.gemspec +++ b/irb.gemspec @@ -36,5 +36,5 @@ Gem::Specification.new do |spec| spec.required_ruby_version = Gem::Requirement.new(">= 2.5") - spec.add_dependency "reline", ">= 0.2.8.pre.1" + spec.add_dependency "reline", ">= 0.2.8.pre.2" end From 48029944a5a1a234d207281f5528fb2b9b20ba49 Mon Sep 17 00:00:00 2001 From: aycabta Date: Mon, 30 Aug 2021 02:29:13 +0900 Subject: [PATCH 3/4] Remove path settings for debugging --- test/irb/yamatanooroti/test_rendering.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/irb/yamatanooroti/test_rendering.rb b/test/irb/yamatanooroti/test_rendering.rb index 8f55b38a9..bacc26b31 100644 --- a/test/irb/yamatanooroti/test_rendering.rb +++ b/test/irb/yamatanooroti/test_rendering.rb @@ -29,7 +29,7 @@ def test_launch write_irbrc <<~'LINES' puts 'start IRB' LINES - start_terminal(25, 80, %W{ruby -I#{@pwd}/lib -I#{@pwd}/../reline/lib #{@pwd}/exe/irb}, startup_message: 'start IRB') + start_terminal(25, 80, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB') write(<<~EOC) 'Hello, World!' EOC @@ -46,7 +46,7 @@ def test_multiline_paste write_irbrc <<~'LINES' puts 'start IRB' LINES - start_terminal(25, 80, %W{ruby -I#{@pwd}/lib -I#{@pwd}/../reline/lib #{@pwd}/exe/irb}, startup_message: 'start IRB') + start_terminal(25, 80, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB') write(<<~EOC) class A def inspect; '#'; end @@ -85,7 +85,7 @@ def test_evaluate_each_toplevel_statement_by_multiline_paste write_irbrc <<~'LINES' puts 'start IRB' LINES - start_terminal(40, 80, %W{ruby -I#{@pwd}/lib -I#{@pwd}/../reline/lib #{@pwd}/exe/irb}, startup_message: 'start IRB') + start_terminal(40, 80, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB') write(<<~EOC) class A def inspect; '#'; end From 2f1d989d7c84c2e11283445e912184fb0b4c91b0 Mon Sep 17 00:00:00 2001 From: aycabta Date: Mon, 30 Aug 2021 02:29:47 +0900 Subject: [PATCH 4/4] Update dependency, reline >= 0.2.8.pre.3 --- irb.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/irb.gemspec b/irb.gemspec index 6f9a8ff2c..f11d273f5 100644 --- a/irb.gemspec +++ b/irb.gemspec @@ -36,5 +36,5 @@ Gem::Specification.new do |spec| spec.required_ruby_version = Gem::Requirement.new(">= 2.5") - spec.add_dependency "reline", ">= 0.2.8.pre.2" + spec.add_dependency "reline", ">= 0.2.8.pre.3" end