Module: Plushie::Protocol::Keys
- Defined in:
- lib/plushie/protocol/keys.rb
Overview
Named key and physical key maps for the wire protocol.
The Rust renderer serializes named keys via format!("{:?}", key) which
produces PascalCase variant names (e.g. "ArrowUp", "Escape", "F1").
This module maps those wire strings to Ruby symbols.
Single-character keys (e.g. "a", "1", "/") pass through as strings.
Constant Summary collapse
- NAMED_KEYS =
Maps PascalCase wire key names to snake_case Ruby symbols. Covers all iced::keyboard::key::Named variants.
{ # Navigation "Escape" => :escape, "Enter" => :enter, "Tab" => :tab, "Backspace" => :backspace, "Delete" => :delete, "ArrowUp" => :arrow_up, "ArrowDown" => :arrow_down, "ArrowLeft" => :arrow_left, "ArrowRight" => :arrow_right, "Home" => :home, "End" => :end, "PageUp" => :page_up, "PageDown" => :page_down, "Space" => :space, "Insert" => :insert, "Clear" => :clear, # Modifier keys "Alt" => :alt, "AltGraph" => :alt_graph, "CapsLock" => :caps_lock, "Control" => :control, "Fn" => :fn_key, "FnLock" => :fn_lock, "NumLock" => :num_lock, "ScrollLock" => :scroll_lock, "Shift" => :shift, "Symbol" => :symbol, "SymbolLock" => :symbol_lock, "Meta" => :meta, "Hyper" => :hyper, "Super" => :super_key, # Editing keys "Copy" => :copy, "Cut" => :cut, "Paste" => :paste, "Redo" => :redo, "Undo" => :undo, "CrSel" => :cr_sel, "EraseEof" => :erase_eof, "ExSel" => :ex_sel, # UI keys "Accept" => :accept, "Again" => :again, "Attn" => :attn, "Cancel" => :cancel, "ContextMenu" => :context_menu, "Execute" => :execute, "Find" => :find, "Help" => :help, "Pause" => :pause, "Play" => :play, "Props" => :props, "Select" => :select, "ZoomIn" => :zoom_in, "ZoomOut" => :zoom_out, # System keys "BrightnessDown" => :brightness_down, "BrightnessUp" => :brightness_up, "Eject" => :eject, "LogOff" => :log_off, "Power" => :power, "PowerOff" => :power_off, "PrintScreen" => :print_screen, "Hibernate" => :hibernate, "Standby" => :standby, "WakeUp" => :wake_up, # IME keys "AllCandidates" => :all_candidates, "Alphanumeric" => :alphanumeric, "CodeInput" => :code_input, "Compose" => :compose, "Convert" => :convert, "FinalMode" => :final_mode, "GroupFirst" => :group_first, "GroupLast" => :group_last, "GroupNext" => :group_next, "GroupPrevious" => :group_previous, "ModeChange" => :mode_change, "NextCandidate" => :next_candidate, "NonConvert" => :non_convert, "PreviousCandidate" => :previous_candidate, "Process" => :process, "SingleCandidate" => :single_candidate, # Korean IME "HangulMode" => :hangul_mode, "HanjaMode" => :hanja_mode, "JunjaMode" => :junja_mode, # Japanese IME "Eisu" => :eisu, "Hankaku" => :hankaku, "Hiragana" => :hiragana, "HiraganaKatakana" => :hiragana_katakana, "KanaMode" => :kana_mode, "KanjiMode" => :kanji_mode, "Katakana" => :katakana, "Romaji" => :romaji, "Zenkaku" => :zenkaku, "ZenkakuHankaku" => :zenkaku_hankaku, # Soft keys "Soft1" => :soft1, "Soft2" => :soft2, "Soft3" => :soft3, "Soft4" => :soft4, # Media keys "ChannelDown" => :channel_down, "ChannelUp" => :channel_up, "Close" => :close, "MailForward" => :mail_forward, "MailReply" => :mail_reply, "MailSend" => :mail_send, "MediaClose" => :media_close, "MediaFastForward" => :media_fast_forward, "MediaPause" => :media_pause, "MediaPlay" => :media_play, "MediaPlayPause" => :media_play_pause, "MediaRecord" => :media_record, "MediaRewind" => :media_rewind, "MediaStop" => :media_stop, "MediaTrackNext" => :media_track_next, "MediaTrackPrevious" => :media_track_previous, "New" => :new, "Open" => :open, "Print" => :print, "Save" => :save, "SpellCheck" => :spell_check, # Audio keys "AudioBalanceLeft" => :audio_balance_left, "AudioBalanceRight" => :audio_balance_right, "AudioBassBoostDown" => :audio_bass_boost_down, "AudioBassBoostToggle" => :audio_bass_boost_toggle, "AudioBassBoostUp" => :audio_bass_boost_up, "AudioFaderFront" => :audio_fader_front, "AudioFaderRear" => :audio_fader_rear, "AudioSurroundModeNext" => :audio_surround_mode_next, "AudioTrebleDown" => :audio_treble_down, "AudioTrebleUp" => :audio_treble_up, "AudioVolumeDown" => :audio_volume_down, "AudioVolumeUp" => :audio_volume_up, "AudioVolumeMute" => :audio_volume_mute, # Microphone keys "MicrophoneToggle" => :microphone_toggle, "MicrophoneVolumeDown" => :microphone_volume_down, "MicrophoneVolumeUp" => :microphone_volume_up, "MicrophoneVolumeMute" => :microphone_volume_mute, # Speech keys "SpeechCorrectionList" => :speech_correction_list, "SpeechInputToggle" => :speech_input_toggle, # Launch keys "LaunchApplication1" => :launch_application1, "LaunchApplication2" => :launch_application2, "LaunchCalendar" => :launch_calendar, "LaunchContacts" => :launch_contacts, "LaunchMail" => :launch_mail, "LaunchMediaPlayer" => :launch_media_player, "LaunchMusicPlayer" => :launch_music_player, "LaunchPhone" => :launch_phone, "LaunchScreenSaver" => :launch_screen_saver, "LaunchSpreadsheet" => :launch_spreadsheet, "LaunchWebBrowser" => :launch_web_browser, "LaunchWebCam" => :launch_web_cam, "LaunchWordProcessor" => :launch_word_processor, # Browser keys "BrowserBack" => :browser_back, "BrowserFavorites" => :browser_favorites, "BrowserForward" => :browser_forward, "BrowserHome" => :browser_home, "BrowserRefresh" => :browser_refresh, "BrowserSearch" => :browser_search, "BrowserStop" => :browser_stop, # Mobile / phone keys "AppSwitch" => :app_switch, "Call" => :call, "Camera" => :camera, "CameraFocus" => :camera_focus, "EndCall" => :end_call, "GoBack" => :go_back, "GoHome" => :go_home, "HeadsetHook" => :headset_hook, "LastNumberRedial" => :last_number_redial, "Notification" => :notification, "MannerMode" => :manner_mode, "VoiceDial" => :voice_dial, # TV keys "TV" => :tv, "TV3DMode" => :tv_3d_mode, "TVAntennaCable" => :tv_antenna_cable, "TVAudioDescription" => :tv_audio_description, "TVAudioDescriptionMixDown" => :tv_audio_description_mix_down, "TVAudioDescriptionMixUp" => :tv_audio_description_mix_up, "TVContentsMenu" => :tv_contents_menu, "TVDataService" => :tv_data_service, "TVInput" => :tv_input, "TVInputComponent1" => :tv_input_component1, "TVInputComponent2" => :tv_input_component2, "TVInputComposite1" => :tv_input_composite1, "TVInputComposite2" => :tv_input_composite2, "TVInputHDMI1" => :tv_input_hdmi1, "TVInputHDMI2" => :tv_input_hdmi2, "TVInputHDMI3" => :tv_input_hdmi3, "TVInputHDMI4" => :tv_input_hdmi4, "TVInputVGA1" => :tv_input_vga1, "TVMediaContext" => :tv_media_context, "TVNetwork" => :tv_network, "TVNumberEntry" => :tv_number_entry, "TVPower" => :tv_power, "TVRadioService" => :tv_radio_service, "TVSatellite" => :tv_satellite, "TVSatelliteBS" => :tv_satellite_bs, "TVSatelliteCS" => :tv_satellite_cs, "TVSatelliteToggle" => :tv_satellite_toggle, "TVTerrestrialAnalog" => :tv_terrestrial_analog, "TVTerrestrialDigital" => :tv_terrestrial_digital, "TVTimer" => :tv_timer, # Numpad named keys "Key11" => :key11, "Key12" => :key12, "NumpadBackspace" => :numpad_backspace, "NumpadClear" => :numpad_clear, "NumpadClearEntry" => :numpad_clear_entry, "NumpadComma" => :numpad_comma, "NumpadDecimal" => :numpad_decimal, "NumpadDivide" => :numpad_divide, "NumpadEnter" => :numpad_enter, "NumpadEqual" => :numpad_equal, "NumpadHash" => :numpad_hash, "NumpadMemoryAdd" => :numpad_memory_add, "NumpadMemoryClear" => :numpad_memory_clear, "NumpadMemoryRecall" => :numpad_memory_recall, "NumpadMemoryStore" => :numpad_memory_store, "NumpadMemorySubtract" => :numpad_memory_subtract, "NumpadMultiply" => :numpad_multiply, "NumpadParenLeft" => :numpad_paren_left, "NumpadParenRight" => :numpad_paren_right, "NumpadStar" => :numpad_star, "NumpadSubtract" => :numpad_subtract, # Function keys F1-F35 "F1" => :f1, "F2" => :f2, "F3" => :f3, "F4" => :f4, "F5" => :f5, "F6" => :f6, "F7" => :f7, "F8" => :f8, "F9" => :f9, "F10" => :f10, "F11" => :f11, "F12" => :f12, "F13" => :f13, "F14" => :f14, "F15" => :f15, "F16" => :f16, "F17" => :f17, "F18" => :f18, "F19" => :f19, "F20" => :f20, "F21" => :f21, "F22" => :f22, "F23" => :f23, "F24" => :f24, "F25" => :f25, "F26" => :f26, "F27" => :f27, "F28" => :f28, "F29" => :f29, "F30" => :f30, "F31" => :f31, "F32" => :f32, "F33" => :f33, "F34" => :f34, "F35" => :f35, # Unidentified "Unidentified" => :unidentified }.freeze
- PHYSICAL_KEYS =
Maps Rust KeyCode Debug format strings to Ruby symbols. Covers standard US keyboard physical key positions.
{ # Letters "KeyA" => :key_a, "KeyB" => :key_b, "KeyC" => :key_c, "KeyD" => :key_d, "KeyE" => :key_e, "KeyF" => :key_f, "KeyG" => :key_g, "KeyH" => :key_h, "KeyI" => :key_i, "KeyJ" => :key_j, "KeyK" => :key_k, "KeyL" => :key_l, "KeyM" => :key_m, "KeyN" => :key_n, "KeyO" => :key_o, "KeyP" => :key_p, "KeyQ" => :key_q, "KeyR" => :key_r, "KeyS" => :key_s, "KeyT" => :key_t, "KeyU" => :key_u, "KeyV" => :key_v, "KeyW" => :key_w, "KeyX" => :key_x, "KeyY" => :key_y, "KeyZ" => :key_z, # Digits "Digit0" => :digit_0, "Digit1" => :digit_1, "Digit2" => :digit_2, "Digit3" => :digit_3, "Digit4" => :digit_4, "Digit5" => :digit_5, "Digit6" => :digit_6, "Digit7" => :digit_7, "Digit8" => :digit_8, "Digit9" => :digit_9, # Function keys "F1" => :f1, "F2" => :f2, "F3" => :f3, "F4" => :f4, "F5" => :f5, "F6" => :f6, "F7" => :f7, "F8" => :f8, "F9" => :f9, "F10" => :f10, "F11" => :f11, "F12" => :f12, "F13" => :f13, "F14" => :f14, "F15" => :f15, "F16" => :f16, "F17" => :f17, "F18" => :f18, "F19" => :f19, "F20" => :f20, "F21" => :f21, "F22" => :f22, "F23" => :f23, "F24" => :f24, # Modifiers "ShiftLeft" => :shift_left, "ShiftRight" => :shift_right, "ControlLeft" => :control_left, "ControlRight" => :control_right, "AltLeft" => :alt_left, "AltRight" => :alt_right, "MetaLeft" => :meta_left, "MetaRight" => :meta_right, # Navigation "Escape" => :escape, "Enter" => :enter, "Tab" => :tab, "Backspace" => :backspace, "Delete" => :delete, "Insert" => :insert, "Home" => :home, "End" => :end, "PageUp" => :page_up, "PageDown" => :page_down, "ArrowUp" => :arrow_up, "ArrowDown" => :arrow_down, "ArrowLeft" => :arrow_left, "ArrowRight" => :arrow_right, "Space" => :space, "CapsLock" => :caps_lock, # Punctuation / symbols "Minus" => :minus, "Equal" => :equal, "BracketLeft" => :bracket_left, "BracketRight" => :bracket_right, "Backslash" => :backslash, "Semicolon" => :semicolon, "Quote" => :quote, "Backquote" => :backquote, "Comma" => :comma, "Period" => :period, "Slash" => :slash, # Numpad "Numpad0" => :numpad_0, "Numpad1" => :numpad_1, "Numpad2" => :numpad_2, "Numpad3" => :numpad_3, "Numpad4" => :numpad_4, "Numpad5" => :numpad_5, "Numpad6" => :numpad_6, "Numpad7" => :numpad_7, "Numpad8" => :numpad_8, "Numpad9" => :numpad_9, "NumpadAdd" => :numpad_add, "NumpadSubtract" => :numpad_subtract, "NumpadMultiply" => :numpad_multiply, "NumpadDivide" => :numpad_divide, "NumpadDecimal" => :numpad_decimal, "NumpadEnter" => :numpad_enter, "NumLock" => :num_lock, "ScrollLock" => :scroll_lock, "PrintScreen" => :print_screen, "Pause" => :pause, "ContextMenu" => :context_menu }.freeze
Class Method Summary collapse
-
.parse_key(key) ⇒ Symbol, ...
Convert a named key wire string to a Ruby symbol.
-
.parse_location(loc) ⇒ Symbol
Parse a key location string to a symbol.
-
.parse_physical_key(key) ⇒ Symbol, ...
Convert a physical key code wire string to a Ruby symbol.
Class Method Details
.parse_key(key) ⇒ Symbol, ...
Convert a named key wire string to a Ruby symbol. Single-character keys (e.g. "a", "1") pass through as strings. Named keys (e.g. "Escape", "ArrowUp") become symbols (:escape, :arrow_up). Unknown multi-character keys pass through as strings.
266 267 268 269 |
# File 'lib/plushie/protocol/keys.rb', line 266 def parse_key(key) return nil if key.nil? NAMED_KEYS.fetch(key, key) end |
.parse_location(loc) ⇒ Symbol
Parse a key location string to a symbol.
285 286 287 288 289 290 291 292 |
# File 'lib/plushie/protocol/keys.rb', line 285 def parse_location(loc) case loc when "left" then :left when "right" then :right when "numpad" then :numpad else :standard end end |
.parse_physical_key(key) ⇒ Symbol, ...
Convert a physical key code wire string to a Ruby symbol. Unknown codes pass through as strings.
276 277 278 279 |
# File 'lib/plushie/protocol/keys.rb', line 276 def parse_physical_key(key) return nil if key.nil? PHYSICAL_KEYS.fetch(key, key) end |