summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2021-08-27 21:33:22 +0900
committeraycabta <aycabta@gmail.com>2021-08-29 20:30:33 +0900
commit4cd344c958a0886fc02238f7f397188dbfca27bd (patch)
tree18b48a4d1a4f75fb144db4ce385e2d41e54e6a57 /lib
parent8d4370b066fd9ff7e6f6c9ee0c5035ad5c81050e (diff)
[ruby/reline] Add the ability to handle context between dialogs
https://github.com/ruby/reline/commit/063d9c70d9
Diffstat (limited to 'lib')
-rw-r--r--lib/reline.rb8
-rw-r--r--lib/reline/line_editor.rb11
2 files changed, 12 insertions, 7 deletions
diff --git a/lib/reline.rb b/lib/reline.rb
index 81c5f9ed64..842f6ba61d 100644
--- a/lib/reline.rb
+++ b/lib/reline.rb
@@ -132,10 +132,10 @@ module Reline
@dig_perfect_match_proc = p
end
- def add_dialog_proc(name_sym, p)
+ def add_dialog_proc(name_sym, p, context = nil)
raise ArgumentError unless p.respond_to?(:call) or p.nil?
raise ArgumentError unless name_sym.instance_of?(Symbol)
- @dialog_proc_list << [name_sym, p]
+ @dialog_proc_list << [name_sym, p, context]
end
def input=(val)
@@ -273,8 +273,8 @@ module Reline
line_editor.dig_perfect_match_proc = dig_perfect_match_proc
line_editor.pre_input_hook = pre_input_hook
@dialog_proc_list.each do |d|
- name_sym, dialog_proc = d
- line_editor.add_dialog_proc(name_sym, dialog_proc)
+ name_sym, dialog_proc, context = d
+ line_editor.add_dialog_proc(name_sym, dialog_proc, context)
end
unless config.test_mode
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb
index c8884749dd..6783ff96d9 100644
--- a/lib/reline/line_editor.rb
+++ b/lib/reline/line_editor.rb
@@ -478,12 +478,17 @@ class Reline::LineEditor
end
class DialogProcScope
- def initialize(line_editor, proc_to_exec)
+ def initialize(line_editor, proc_to_exec, context)
@line_editor = line_editor
@proc_to_exec = proc_to_exec
+ @context = context
@cursor_pos = Reline::CursorPos.new
end
+ def context
+ @context
+ end
+
def retrieve_completion_block(set_completion_quote_character = false)
@line_editor.retrieve_completion_block(set_completion_quote_character)
end
@@ -536,9 +541,9 @@ class Reline::LineEditor
end
end
- def add_dialog_proc(name, p)
+ def add_dialog_proc(name, p, context = nil)
return if @dialogs.any? { |d| d.name == name }
- @dialogs << Dialog.new(name, DialogProcScope.new(self, p))
+ @dialogs << Dialog.new(name, DialogProcScope.new(self, p, context))
end
DIALOG_HEIGHT = 20