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 |