Module: VER::Keyboard2
- Defined in:
- lib/ver/keyboard2.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, 80] => Ncurses::KEY_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] => Ncurses::KEY_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] => Ncurses::KEY_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
19 20 21 22 23 |
# File 'lib/ver/keyboard2.rb', line 19 def focus=(receiver) @stack = [] @focus = receiver poll unless @polling end |
.poll ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/ver/keyboard2.rb', line 25 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] @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
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ver/keyboard2.rb', line 47 def resolve(char) $log.debug("char: #{char} resolve") if char == ESC @stack << char if @stack.first == ESC MOD_KEYS[@stack] || SPECIAL_KEYS[@stack] elsif (char >= 0 and char < 27) or char == 32 or char == 127 char else #NCURSES_KEYS[char] || CONTROL_KEYS[char] || PRINTABLE_KEYS[char] NCURSES_KEYS[char] || PRINTABLE_KEYS[char] end end |