Module: VER::Keyboard
- Defined in:
- lib/ver/keyboard.rb
Overview
avoid initialize
Constant Summary collapse
- ESC =
keycode
27
- ASCII =
TODO: make this section sane
(0..255).map{|c| c.chr }
- CONTROL =
ASCII.grep(/[[:cntrl:]]/)
- PRINTABLE =
ASCII.grep(/[[:print:]]/)
- SPECIAL_KEYS =
{ [27, 79, 50, 81] => 'F14', [27, 79, 50, 82] => 'F15', [27, 79, 70] => 'end', [27, 79, 70] => 'end', [27, 79, 72] => 'home', [27, 79, 80] => 'F1', [27, 79, 81] => 'F2', [27, 79, 82] => 'F3', [27, 79, 83] => 'F4', [27, 91, 49, 126] => 'end', [27, 91, 49, 126] => 'home', [27, 91, 49, 49, 126] => 'F1', [27, 91, 49, 50, 126] => 'F2', [27, 91, 49, 51, 126] => 'F3', [27, 91, 49, 52, 126] => 'F4', [27, 91, 49, 52, 126] => 'F4', [27, 91, 49, 53, 126] => 'F5', [27, 91, 49, 55, 126] => 'F6', [27, 91, 49, 56, 59, 50, 126] => 'F19', [27, 91, 49, 56, 59, 51, 126] => 'F7', [27, 91, 49, 59, 51, 65] => 'ppage', [27, 91, 49, 59, 51, 66] => 'npage', [27, 91, 49, 59, 53, 65] => 'ppage', [27, 91, 49, 59, 53, 66] => 'npage', [27, 91, 49, 59, 53, 70] => 'M-<', [27, 91, 49, 59, 53, 72] => 'M->', [27, 91, 50, 54, 126] => 'F14', [27, 91, 50, 56, 126] => 'F15', [27, 91, 51, 59, 51, 126] => 'del', [27, 91, 52, 126] => 'end', [27, 91, 55, 126] => 'home', [27, 91, 55, 126] => 'home', [27, 91, 56, 126] => 'end', [27, 91, 56, 126] => 'end', [27, 91, 65] => 'up', [27, 91, 66] => 'down', [27, 91, 67] => 'right', [27, 91, 68] => 'left', [27, 91, 70] => 'end', [27, 91, 72] => 'end', [27, 91, 72] => 'home', [27, 91, 91, 65] => 'F1', [27, 91, 91, 66] => 'F2', [27, 91, 91, 67] => 'F3', [27, 91, 91, 68] => 'F4', [27, 91, 91, 69] => 'F5', }
- CONTROL_KEYS =
{ 0 => 'C-space', 1 => 'C-a', 2 => 'C-b', 3 => 'C-c', 4 => 'C-d', 5 => 'C-e', 6 => 'C-f', 7 => 'C-g', 8 => 'C-h', 9 => 'tab', 10 => 'return', # C-j 11 => 'C-k', 12 => 'C-l', 13 => 'return', # C-m 14 => 'C-n', 15 => 'C-o', 16 => 'C-p', 17 => 'C-q', 18 => 'C-r', 19 => 'C-s', 20 => 'C-t', 21 => 'C-u', 22 => 'C-v', 23 => 'C-w', 24 => 'C-x', 25 => 'C-y', 26 => 'C-z', # FIXME: is usually suspend in shell job control # 27 => 'esc', 32 => 'space', 127 => 'backspace', }
- PRINTABLE_KEYS =
{}
- MOD_KEYS =
{}
- NCURSES_KEYS =
{}
Class Method Summary collapse
Class Method Details
.focus=(receiver) ⇒ Object
8 9 10 11 12 |
# File 'lib/ver/keyboard.rb', line 8 def focus=(receiver) @stack = [] @focus = receiver poll unless @polling end |
.poll ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/ver/keyboard.rb', line 14 def poll @polling = true while char = @focus.window.getch break if @focus.stopping? # XXX #break if VER.stopping? $log.debug("char: #{char} stakc: #{@stack.inspect}") if char != Ncurses::ERR if char == Ncurses::ERR # timeout or signal @focus.press('esc') if @stack == [ESC] @stack.clear elsif ready = resolve(char) $log.debug("char: #{char} ready: #{ready}") @stack.clear @focus.press(ready) end end ensure @polling = false end |
.resolve(char) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/ver/keyboard.rb', line 35 def resolve(char) @stack << char if @stack.first == ESC MOD_KEYS[@stack] || SPECIAL_KEYS[@stack] else NCURSES_KEYS[char] || CONTROL_KEYS[char] || PRINTABLE_KEYS[char] end end |