class Riffer::Rig::Terminal::Autocomplete
Constants
- QUERY
- TRIGGER
Attributes
@dynamic editor, matches, index
index
[R]
Integer
matches
[R]
Array[Riffer::Rig::Terminal::Autocomplete::_Entry]
Public Class Methods
(commands: Array[Riffer::Rig::Terminal::Autocomplete::_Entry], ?editor: Riffer::Rig::Terminal::LineEditor, ?index: Integer, ?dismissed: bool) → void
Source
# File lib/riffer/rig/terminal/autocomplete.rb, line 21 def initialize(commands:, editor: Riffer::Rig::Terminal::LineEditor.new, index: 0, dismissed: false) @commands = commands @editor = editor @index = index @dismissed = dismissed @matches = dismissed ? [] : ranked(editor.text[QUERY, 1]) freeze end
@rbs commands: Array @rbs editor: Riffer::Rig::Terminal::LineEditor @rbs index: Integer @rbs dismissed: bool @rbs return: void
Public Instance Methods
() → String
Source
# File lib/riffer/rig/terminal/autocomplete.rb, line 41 def ghost name = selected&.name typed = editor.text.delete_prefix(TRIGGER) return '' unless name && editor.after.empty? && name.downcase.start_with?(typed.downcase) name[typed.length..].to_s end
@rbs return: String
() → String
Source
# File lib/riffer/rig/terminal/autocomplete.rb, line 73 def line chosen = selected return editor.text unless chosen && editor.text != TRIGGER "#{TRIGGER}#{chosen.name}" end
@rbs return: String
() → bool
Source
# File lib/riffer/rig/terminal/autocomplete.rb, line 31 def open? matches.any? end
@rbs return: bool
(Array[Riffer::Rig::Terminal::Autocomplete::_Entry] commands) → Riffer::Rig::Terminal::Autocomplete
Source
# File lib/riffer/rig/terminal/autocomplete.rb, line 51 def over(commands) return self if commands == @commands self.class.new(commands: commands, editor: editor, dismissed: @dismissed) end
@rbs commands: Array @rbs return: Riffer::Rig::Terminal::Autocomplete
# File lib/riffer/rig/terminal/autocomplete.rb, line 59 def press(key) return edit(key) unless open? case key.name when :up then with(index: (@index - 1) % matches.size) when :down then with(index: (@index + 1) % matches.size) when :tab then accept when :right then editor.after.empty? ? accept : edit(key) when :escape then with(dismissed: true) else edit(key) end end
@rbs key: Riffer::Rig::Terminal::Key @rbs return: Riffer::Rig::Terminal::Autocomplete
() → Riffer::Rig::Terminal::Autocomplete::_Entry?
Source
# File lib/riffer/rig/terminal/autocomplete.rb, line 36 def selected matches[@index] end
@rbs return: Riffer::Rig::Terminal::Autocomplete::_Entry?
Source
# File lib/riffer/rig/terminal/autocomplete.rb, line 81 def submit self.class.new(commands: @commands, editor: editor.submit(line)) end
@rbs return: Riffer::Rig::Terminal::Autocomplete