class Riffer::Rig::Terminal::LineEditor
Constants
- CONTROLS
-
A line feed is left out: it stays a line break, on screen and in the echo.
- CONTROL_PICTURES
-
C1 has no pictures of its own: tr pads the set with its last character.
- ELIDE_FROM
- NEWLINE_KEYS
- WORD
Attributes
after
[R]
String
before
[R]
String
@dynamic before, after, history
history
[R]
Array[String]
Public Class Methods
(?before: String, ?after: String, ?history: Array[String], ?recall: Integer, ?draft: String, ?pastes: Array[String], ?kill: String) → void
Source
# File lib/riffer/rig/terminal/line_editor.rb, line 34 def initialize(before: '', after: '', history: [], recall: history.size, draft: '', pastes: [], kill: '') @before = before @after = after @history = history @recall = recall @draft = draft @pastes = pastes @kill = kill freeze end
Public Instance Methods
# File lib/riffer/rig/terminal/line_editor.rb, line 62 def press(key) return with(before: "#{before}\n") if NEWLINE_KEYS.include?(key.name) case key.name when :text then with(before: before + key.text.to_s) when :paste then paste(key.text.to_s) when :backspace then with(before: before.delete_suffix(unit_before)) when :delete then with(after: after.delete_prefix(unit_after)) when :left then left when :right then right when :ctrl_left, :alt_left, :alt_b then word_left when :ctrl_right, :alt_right, :alt_f then word_right when :home then with(before: '', after: text) when :end then with(before: text, after: '') when :ctrl_w then kill_before(word_before(/\S/)) when :ctrl_u then kill_before(before) when :ctrl_k then after.empty? ? self : with(after: '', kill: after) when :ctrl_y then with(before: before + @kill) when :up then recall(-1) when :down then recall(1) else self end end
@rbs key: Riffer::Rig::Terminal::Key @rbs return: Riffer::Rig::Terminal::LineEditor
() → String
Source
# File lib/riffer/rig/terminal/line_editor.rb, line 56 def printable_after printable(after) end
@rbs return: String
() → String
Source
# File lib/riffer/rig/terminal/line_editor.rb, line 51 def printable_before printable(before) end
@rbs return: String
(?String sent) → Riffer::Rig::Terminal::LineEditor
Source
# File lib/riffer/rig/terminal/line_editor.rb, line 88 def submit(sent = text) self.class.new(history: sent.strip.empty? ? history : [*history, sent], kill: @kill) end
@rbs sent: String @rbs return: Riffer::Rig::Terminal::LineEditor
() → String
Source
# File lib/riffer/rig/terminal/line_editor.rb, line 46 def text before + after end
@rbs return: String