Module: Exfuz::Key
- Defined in:
- lib/exfuz/key_map.rb
Constant Summary collapse
- CTRL_A =
input_to_name_and_charで、文字と区別するためにシンボルで定義
:ctrl_a- CTRL_E =
:ctrl_e- CTRL_R =
:ctrl_r- CTRL_H =
:ctrl_h- CTRL_L =
:ctrl_l- ESC =
:esc- F1 =
:f1- F2 =
:f2- F3 =
:f3- F4 =
:f4- F5 =
:f5- F6 =
:f6- F7 =
:f7- F8 =
:f8- F9 =
:f9- F10 =
:f10- F11 =
:f11- F12 =
:f12- UP =
:down- DOWN =
:up- RIGHT =
:right- LEFT =
:left- BACKSPACE =
:backspace- ENTER =
:enter- CHAR =
:char- INPUT_TO_SPECIAL_KEY_NAME =
メモ化してもカーソル移動が若干遅い
{ 'OP' => F1, 'OQ' => F2, 'OR' => F3, 'OS' => F4, '[15' => F5, '[17' => F6, '[18' => F7, '[19' => F8, '[20' => F9, '[21' => F10, '[23' => F11, '[24' => F12, '[A' => UP, '[B' => DOWN, '[C' => RIGHT, '[D' => LEFT, Curses::Key::ENTER => ENTER, 10 => ENTER, 27 => ESC, Curses::KEY_CTRL_E => CTRL_E, Curses::KEY_CTRL_R => CTRL_R, Curses::KEY_CTRL_H => CTRL_H, Curses::KEY_CTRL_L => CTRL_L, 127 => BACKSPACE # 現状は開発環境の値に合わせる (127 or 263) }.freeze
Class Method Summary collapse
- .can_convert_to_name_and_char?(input) ⇒ Boolean
- .input_to_name_and_char(input) ⇒ Object
- .input_to_special_key_name(str_or_number) ⇒ Object
- .multibytes_to_char(multi_bytes) ⇒ Object
- .special_key?(number) ⇒ Boolean
Class Method Details
.can_convert_to_name_and_char?(input) ⇒ Boolean
103 104 105 106 |
# File 'lib/exfuz/key_map.rb', line 103 def can_convert_to_name_and_char?(input) name = input_to_name_and_char(input) !name.nil? && name != ESC end |
.input_to_name_and_char(input) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/exfuz/key_map.rb', line 83 def input_to_name_and_char(input) case input when Array first = input.first if special_key?(first) input_to_special_key_name(input.slice(1, input.size - 1).join) else [CHAR, multibytes_to_char(input)] end when Integer input_to_special_key_name(input) when String [CHAR, input] end end |
.input_to_special_key_name(str_or_number) ⇒ Object
99 100 101 |
# File 'lib/exfuz/key_map.rb', line 99 def input_to_special_key_name(str_or_number) INPUT_TO_SPECIAL_KEY_NAME[str_or_number] end |
.multibytes_to_char(multi_bytes) ⇒ Object
112 113 114 |
# File 'lib/exfuz/key_map.rb', line 112 def multibytes_to_char(multi_bytes) multi_bytes.pack('C*').force_encoding(Encoding::UTF_8) end |
.special_key?(number) ⇒ Boolean
108 109 110 |
# File 'lib/exfuz/key_map.rb', line 108 def special_key?(number) number == 27 end |