Class: Vedeu::Input::Capture
- Inherits:
-
Object
- Object
- Vedeu::Input::Capture
- Extended by:
- Forwardable
- Includes:
- Common
- Defined in:
- lib/vedeu/input/capture.rb
Overview
Captures input from the user terminal via ‘getch’ and translates special characters into symbols.
Class Method Summary collapse
-
.read ⇒ Array|String|Symbol
Instantiate Vedeu::Input::Input and capture keypress(es).
Instance Method Summary collapse
-
#click?(keys) ⇒ Boolean
private
Returns a boolean indicating whether a mouse click was received.
-
#command ⇒ String
private
Takes input from the user via the keyboard.
- #console ⇒ IO private
-
#initialize ⇒ Vedeu::Input::Input
constructor
Returns a new instance of Vedeu::Input::Input.
-
#input ⇒ String
private
Takes input from the user via the keyboard.
- #interface ⇒ Vedeu::Interfaces::Interface private
-
#keypress ⇒ String|Symbol
private
Returns the translated (when possible) keypress(es).
- #name ⇒ String|Symbol private
-
#read ⇒ Array|String|Symbol
Triggers various events dependent on the terminal mode.
Methods included from Common
#absent?, #array?, #boolean, #boolean?, #empty_value?, #escape?, #falsy?, #hash?, #line_model?, #numeric?, #positionable?, #present?, #snake_case, #stream_model?, #string?, #symbol?, #truthy?, #view_model?
Constructor Details
#initialize ⇒ Vedeu::Input::Input
Returns a new instance of Vedeu::Input::Input.
33 |
# File 'lib/vedeu/input/capture.rb', line 33 def initialize; end |
Class Method Details
.read ⇒ Array|String|Symbol
Instantiate Vedeu::Input::Input and capture keypress(es).
26 27 28 |
# File 'lib/vedeu/input/capture.rb', line 26 def self.read new.read end |
Instance Method Details
#click?(keys) ⇒ Boolean (private)
Returns a boolean indicating whether a mouse click was received.
119 120 121 122 123 |
# File 'lib/vedeu/input/capture.rb', line 119 def click?(keys) return false if keys.nil? || symbol?(keys) keys.is_a?(Vedeu::Cursors::Cursor) || keys.start_with?("\e[M") end |
#command ⇒ String (private)
Takes input from the user via the keyboard. Accepts special keys like the F-Keys etc, by capturing the entire sequence.
134 135 136 |
# File 'lib/vedeu/input/capture.rb', line 134 def command console.gets.chomp end |
#console ⇒ IO (private)
126 127 128 |
# File 'lib/vedeu/input/capture.rb', line 126 def console @console ||= Vedeu::Terminal.console end |
#input ⇒ String (private)
Takes input from the user via the keyboard. Accepts special keys like the F-Keys etc, by capturing the entire sequence.
97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/vedeu/input/capture.rb', line 97 def input keys = Vedeu::Input::Raw.read if click?(keys) Vedeu::Input::Mouse.click(keys) else keys end end |
#interface ⇒ Vedeu::Interfaces::Interface (private)
110 111 112 |
# File 'lib/vedeu/input/capture.rb', line 110 def interface Vedeu.interfaces.by_name(name) end |
#keypress ⇒ String|Symbol (private)
Returns the translated (when possible) keypress(es).
89 90 91 |
# File 'lib/vedeu/input/capture.rb', line 89 def keypress Vedeu::Input::Translator.translate(input) end |
#name ⇒ String|Symbol (private)
139 140 141 |
# File 'lib/vedeu/input/capture.rb', line 139 def name Vedeu.focus end |
#read ⇒ Array|String|Symbol
Triggers various events dependent on the terminal mode.
-
When in raw mode, the :keypress event is triggered with the key(s) pressed.
-
When in fake mode, the keypress will be checked against the keymap relating to the interface/view currently in focus.
-
If registered, the :keypress event is triggered with the key(s) pressed.
-
If the keypress is not registered, we check whether the interface in focus is editable, if so, the :editor event is triggered.
-
Otherwise, the :key event is triggered for the client application to handle.
-
-
When in cooked mode, the :command event is triggered with the input given.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/vedeu/input/capture.rb', line 52 def read Vedeu.log(type: :input, message: "Waiting for user input...\n") if raw_mode? Vedeu.trigger(:_keypress_, keypress) elsif fake_mode? @key ||= keypress if @key.nil? nil elsif click?(@key) Vedeu.trigger(:_mouse_event_, @key) elsif Vedeu::Input::Mapper.registered?(@key, name) Vedeu.trigger(:_keypress_, @key, name) elsif interface.editable? Vedeu.trigger(:_editor_, @key) else Vedeu.trigger(:key, @key) end elsif cooked_mode? Vedeu.trigger(:_command_, command) end end |