Skip to main content

Keycode

Enum Keycode 

Source
#[repr(u32)]
pub enum Keycode {
Show 328 variants SYSTEM_POWER = 65_665, SYSTEM_SLEEP = 65_666, SYSTEM_WAKE_UP = 65_667, A = 458_756, B = 458_757, C = 458_758, D = 458_759, E = 458_760, F = 458_761, G = 458_762, H = 458_763, I = 458_764, J = 458_765, K = 458_766, L = 458_767, M = 458_768, N = 458_769, O = 458_770, P = 458_771, Q = 458_772, R = 458_773, S = 458_774, T = 458_775, U = 458_776, V = 458_777, W = 458_778, X = 458_779, Y = 458_780, Z = 458_781, NUMBER_1 = 458_782, NUMBER_2 = 458_783, NUMBER_3 = 458_784, NUMBER_4 = 458_785, NUMBER_5 = 458_786, NUMBER_6 = 458_787, NUMBER_7 = 458_788, NUMBER_8 = 458_789, NUMBER_9 = 458_790, NUMBER_0 = 458_791, RETURN = 458_792, ESCAPE = 458_793, BACKSPACE = 458_794, TAB = 458_795, SPACE = 458_796, MINUS = 458_797, EQUAL = 458_798, BACKSLASH = 458_801, NON_US_HASH = 458_802, SEMICOLON = 458_803, SINGLE_QUOTE = 458_804, GRAVE = 458_805, COMMA = 458_806, PERIOD = 458_807, SLASH = 458_808, CAPSLOCK = 458_809, F1 = 458_810, F2 = 458_811, F3 = 458_812, F4 = 458_813, F5 = 458_814, F6 = 458_815, F7 = 458_816, F8 = 458_817, F9 = 458_818, F10 = 458_819, F11 = 458_820, F12 = 458_821, PRINTSCREEN = 458_822, SCROLLLOCK = 458_823, PAUSE_BREAK = 458_824, INSERT = 458_825, HOME = 458_826, PAGE_UP = 458_827, DELETE = 458_828, END = 458_829, PAGE_DOWN = 458_830, RIGHT_ARROW = 458_831, LEFT_ARROW = 458_832, DOWN_ARROW = 458_833, UP_ARROW = 458_834, KP_NUMLOCK = 458_835, KP_DIVIDE = 458_836, KP_ASTERISK = 458_837, KP_SUBTRACT = 458_838, KP_PLUS = 458_839, KP_ENTER = 458_840, KP_NUMBER_1 = 458_841, KP_NUMBER_2 = 458_842, KP_NUMBER_3 = 458_843, KP_NUMBER_4 = 458_844, KP_NUMBER_5 = 458_845, KP_NUMBER_6 = 458_846, KP_NUMBER_7 = 458_847, KP_NUMBER_8 = 458_848, KP_NUMBER_9 = 458_849, KP_NUMBER_0 = 458_850, KP_DOT = 458_851, K_CONTEXT_MENU = 458_853, K_POWER = 458_854, KP_EQUAL = 458_855, F13 = 458_856, F14 = 458_857, F15 = 458_858, F16 = 458_859, F17 = 458_860, F18 = 458_861, F19 = 458_862, F20 = 458_863, F21 = 458_864, F22 = 458_865, F23 = 458_866, F24 = 458_867, K_EXECUTE = 458_868, K_HELP = 458_869, K_MENU = 458_870, K_SELECT = 458_871, K_STOP = 458_872, K_AGAIN = 458_873, K_UNDO = 458_874, K_CUT = 458_875, K_COPY = 458_876, K_PASTE = 458_877, K_FIND = 458_878, K_MUTE = 458_879, K_VOLUME_UP = 458_880, K_VOLUME_DOWN = 458_881, LOCKING_CAPS = 458_882, LOCKING_NUM = 458_883, LOCKING_SCROLL = 458_884, KP_COMMA = 458_885, KP_EQUAL_AS400 = 458_886, INTERNATIONAL_1 = 458_887, INT_KATAKANAHIRAGANA = 458_888, INTERNATIONAL_3 = 458_889, INTERNATIONAL_4 = 458_890, INTERNATIONAL_5 = 458_891, INTERNATIONAL_6 = 458_892, INTERNATIONAL_7 = 458_893, INTERNATIONAL_8 = 458_894, INTERNATIONAL_9 = 458_895, LANG_HANGEUL = 458_896, LANG_HANJA = 458_897, LANG_KATAKANA = 458_898, LANG_HIRAGANA = 458_899, LANG_ZENKAKUHANKAKU = 458_900, LANGUAGE_6 = 458_901, LANGUAGE_7 = 458_902, LANGUAGE_8 = 458_903, LANGUAGE_9 = 458_904, ALT_ERASE = 458_905, ATTENTION = 458_906, K_CANCEL = 458_907, CLEAR = 458_908, PRIOR = 458_909, RETURN2 = 458_910, SEPARATOR = 458_911, OUT = 458_912, OPER = 458_913, CLEAR_AGAIN = 458_914, CRSEL = 458_915, EXSEL = 458_916, KP_LEFT_PARENTHESIS = 458_934, KP_RIGHT_PARENTHESIS = 458_935, KP_CLEAR = 458_968, LEFT_CONTROL = 458_976, LEFT_SHIFT = 458_977, LEFT_ALT = 458_978, LEFT_COMMAND = 458_979, RIGHT_CONTROL = 458_980, RIGHT_SHIFT = 458_981, RIGHT_ALT = 458_982, RIGHT_COMMAND = 458_983, K_PLAY_PAUSE = 458_984, K_STOP2 = 458_985, K_PREVIOUS = 458_986, K_NEXT = 458_987, K_EJECT = 458_988, K_VOLUME_UP2 = 458_989, K_VOLUME_DOWN2 = 458_990, K_MUTE2 = 458_991, K_WWW = 458_992, K_BACK = 458_993, K_FORWARD = 458_994, K_STOP3 = 458_995, K_FIND2 = 458_996, K_SCROLL_UP = 458_997, K_SCROLL_DOWN = 458_998, K_EDIT = 458_999, K_SLEEP = 459_000, K_SCREENSAVER = 459_001, K_REFRESH = 459_002, K_CALCULATOR = 459_003, C_POWER = 786_480, C_RESET = 786_481, C_SLEEP = 786_482, C_SLEEP_MODE = 786_484, C_MENU = 786_496, C_MENU_SELECT = 786_497, C_MENU_UP = 786_498, C_MENU_DOWN = 786_499, C_MENU_LEFT = 786_500, C_MENU_RIGHT = 786_501, C_MENU_ESCAPE = 786_502, C_MENU_INCREASE = 786_503, C_MENU_DECREASE = 786_504, C_DATA_ON_SCREEN = 786_528, C_SUBTITLES = 786_529, C_SNAPSHOT = 786_533, C_PIP = 786_535, C_RED_BUTTON = 786_537, C_GREEN_BUTTON = 786_538, C_BLUE_BUTTON = 786_539, C_YELLOW_BUTTON = 786_540, C_ASPECT = 786_541, C_MEDIA_STEP = 786_562, C_RECALL_LAST = 786_563, C_MEDIA_TV = 786_569, C_MEDIA_WWW = 786_570, C_MEDIA_DVD = 786_571, C_MEDIA_PHONE = 786_572, C_MEDIA_GAMES = 786_575, C_MEDIA_CD = 786_577, C_MEDIA_VCR = 786_578, C_MEDIA_TUNER = 786_579, C_QUIT = 786_580, C_HELP = 786_581, C_MEDIA_TAPE = 786_582, C_MEDIA_CABLE = 786_583, C_MEDIA_HOME = 786_586, C_CHANNEL_INC = 786_588, C_CHANNEL_DEC = 786_589, C_MEDIA_VCR_PLUS = 786_592, C_PLAY = 786_608, C_PAUSE = 786_609, C_RECORD = 786_610, C_FAST_FORWARD = 786_611, C_REWIND = 786_612, C_NEXT = 786_613, C_PREVIOUS = 786_614, C_STOP = 786_615, C_EJECT = 786_616, C_RANDOM_PLAY = 786_617, C_REPEAT = 786_620, C_SLOW_TRACKING = 786_623, C_STOP_EJECT = 786_636, C_PLAY_PAUSE = 786_637, C_VOICE_COMMAND = 786_639, C_MUTE = 786_658, C_BASS_BOOST = 786_661, C_VOLUME_UP = 786_665, C_VOLUME_DOWN = 786_666, C_SLOW = 786_677, C_AL_WORD = 786_820, C_AL_TEXT_EDITOR = 786_821, C_AL_SPREADSHEET = 786_822, C_AL_DATABASE = 786_825, C_AL_EMAIL = 786_826, C_AL_NEWS = 786_827, C_AL_VOICEMAIL = 786_828, C_AL_CALENDAR = 786_830, C_AL_JOURNAL = 786_832, C_AL_FINANCE = 786_833, C_AL_CALCULATOR = 786_834, C_AL_WWW = 786_838, C_AL_NETWORK_CHAT = 786_841, C_AL_LOGOFF = 786_844, C_AL_CONTROL_PANEL = 786_847, C_AL_HELP = 786_854, C_AL_DOCUMENTS = 786_855, C_AL_SPELLCHECK = 786_859, C_AL_SCREEN_SAVER = 786_865, C_AL_FILE_BROWSER = 786_868, C_AL_IMAGE_BROWSER = 786_870, C_AL_AUDIO_BROWSER = 786_871, C_AL_MOVIE_BROWSER = 786_872, C_AC_NEW = 786_945, C_AC_OPEN = 786_946, C_AC_CLOSE = 786_947, C_AC_EXIT = 786_948, C_AC_SAVE = 786_951, C_AC_PRINT = 786_952, C_AC_PROPERTIES = 786_953, C_AC_UNDO = 786_970, C_AC_COPY = 786_971, C_AC_CUT = 786_972, C_AC_PASTE = 786_973, C_AC_FIND = 786_975, C_AC_SEARCH = 786_977, C_AC_GOTO = 786_978, C_AC_HOME = 786_979, C_AC_BACK = 786_980, C_AC_FORWARD = 786_981, C_AC_STOP = 786_982, C_AC_REFRESH = 786_983, C_AC_FAVOURITES = 786_986, C_AC_ZOOM_IN = 786_989, C_AC_ZOOM_OUT = 786_990, C_AC_ZOOM = 786_991, C_AC_VIEW_TOGGLE = 786_994, C_AC_SCROLL_UP = 786_995, C_AC_SCROLL_DOWN = 786_996, C_AC_EDIT = 787_005, C_AC_CANCEL = 787_039, C_AC_INSERT = 787_049, C_AC_DEL = 787_050, C_AC_REDO = 787_065, C_AC_REPLY = 787_081, C_AC_FORWARD_MAIL = 787_083, C_AC_SEND = 787_084, C_AC_NEXT_KEYBOARD_LAYOUT_SELECT = 787_101, EXCLAMATION = 34_013_214, AT_SIGN = 34_013_215, POUND = 34_013_216, DOLLAR = 34_013_217, PERCENT = 34_013_218, CARET = 34_013_219, AMPERSAND = 34_013_220, ASTERISK = 34_013_221, UNDERSCORE = 34_013_229, PLUS = 34_013_230, PIPE = 34_013_233, TILDE2 = 34_013_234, COLON = 34_013_235, TILDE = 34_013_237, LESS_THAN = 34_013_238, QUESTION = 34_013_240, CLEAR2 = 34_013_267, PIPE2 = 34_013_284,
}
Expand description

ZMK keycode enum used in typed behavior APIs. ZMK keycode value

This is the primary key type used by typed behavior APIs.

Variants§

§

SYSTEM_POWER = 65_665

§

SYSTEM_SLEEP = 65_666

§

SYSTEM_WAKE_UP = 65_667

§

A = 458_756

§

B = 458_757

§

C = 458_758

§

D = 458_759

§

E = 458_760

§

F = 458_761

§

G = 458_762

§

H = 458_763

§

I = 458_764

§

J = 458_765

§

K = 458_766

§

L = 458_767

§

M = 458_768

§

N = 458_769

§

O = 458_770

§

P = 458_771

§

Q = 458_772

§

R = 458_773

§

S = 458_774

§

T = 458_775

§

U = 458_776

§

V = 458_777

§

W = 458_778

§

X = 458_779

§

Y = 458_780

§

Z = 458_781

§

NUMBER_1 = 458_782

§

NUMBER_2 = 458_783

§

NUMBER_3 = 458_784

§

NUMBER_4 = 458_785

§

NUMBER_5 = 458_786

§

NUMBER_6 = 458_787

§

NUMBER_7 = 458_788

§

NUMBER_8 = 458_789

§

NUMBER_9 = 458_790

§

NUMBER_0 = 458_791

§

RETURN = 458_792

§

ESCAPE = 458_793

§

BACKSPACE = 458_794

§

TAB = 458_795

§

SPACE = 458_796

§

MINUS = 458_797

§

EQUAL = 458_798

§

BACKSLASH = 458_801

§

NON_US_HASH = 458_802

§

SEMICOLON = 458_803

§

SINGLE_QUOTE = 458_804

§

GRAVE = 458_805

§

COMMA = 458_806

§

PERIOD = 458_807

§

SLASH = 458_808

§

CAPSLOCK = 458_809

§

F1 = 458_810

§

F2 = 458_811

§

F3 = 458_812

§

F4 = 458_813

§

F5 = 458_814

§

F6 = 458_815

§

F7 = 458_816

§

F8 = 458_817

§

F9 = 458_818

§

F10 = 458_819

§

F11 = 458_820

§

F12 = 458_821

§

PRINTSCREEN = 458_822

§

SCROLLLOCK = 458_823

§

PAUSE_BREAK = 458_824

§

INSERT = 458_825

§

HOME = 458_826

§

PAGE_UP = 458_827

§

DELETE = 458_828

§

END = 458_829

§

PAGE_DOWN = 458_830

§

RIGHT_ARROW = 458_831

§

LEFT_ARROW = 458_832

§

DOWN_ARROW = 458_833

§

UP_ARROW = 458_834

§

KP_NUMLOCK = 458_835

§

KP_DIVIDE = 458_836

§

KP_ASTERISK = 458_837

§

KP_SUBTRACT = 458_838

§

KP_PLUS = 458_839

§

KP_ENTER = 458_840

§

KP_NUMBER_1 = 458_841

§

KP_NUMBER_2 = 458_842

§

KP_NUMBER_3 = 458_843

§

KP_NUMBER_4 = 458_844

§

KP_NUMBER_5 = 458_845

§

KP_NUMBER_6 = 458_846

§

KP_NUMBER_7 = 458_847

§

KP_NUMBER_8 = 458_848

§

KP_NUMBER_9 = 458_849

§

KP_NUMBER_0 = 458_850

§

KP_DOT = 458_851

§

K_CONTEXT_MENU = 458_853

§

K_POWER = 458_854

§

KP_EQUAL = 458_855

§

F13 = 458_856

§

F14 = 458_857

§

F15 = 458_858

§

F16 = 458_859

§

F17 = 458_860

§

F18 = 458_861

§

F19 = 458_862

§

F20 = 458_863

§

F21 = 458_864

§

F22 = 458_865

§

F23 = 458_866

§

F24 = 458_867

§

K_EXECUTE = 458_868

§

K_HELP = 458_869

§

K_MENU = 458_870

§

K_SELECT = 458_871

§

K_STOP = 458_872

§

K_AGAIN = 458_873

§

K_UNDO = 458_874

§

K_CUT = 458_875

§

K_COPY = 458_876

§

K_PASTE = 458_877

§

K_FIND = 458_878

§

K_MUTE = 458_879

§

K_VOLUME_UP = 458_880

§

K_VOLUME_DOWN = 458_881

§

LOCKING_CAPS = 458_882

§

LOCKING_NUM = 458_883

§

LOCKING_SCROLL = 458_884

§

KP_COMMA = 458_885

§

KP_EQUAL_AS400 = 458_886

§

INTERNATIONAL_1 = 458_887

§

INT_KATAKANAHIRAGANA = 458_888

§

INTERNATIONAL_3 = 458_889

§

INTERNATIONAL_4 = 458_890

§

INTERNATIONAL_5 = 458_891

§

INTERNATIONAL_6 = 458_892

§

INTERNATIONAL_7 = 458_893

§

INTERNATIONAL_8 = 458_894

§

INTERNATIONAL_9 = 458_895

§

LANG_HANGEUL = 458_896

§

LANG_HANJA = 458_897

§

LANG_KATAKANA = 458_898

§

LANG_HIRAGANA = 458_899

§

LANG_ZENKAKUHANKAKU = 458_900

§

LANGUAGE_6 = 458_901

§

LANGUAGE_7 = 458_902

§

LANGUAGE_8 = 458_903

§

LANGUAGE_9 = 458_904

§

ALT_ERASE = 458_905

§

ATTENTION = 458_906

§

K_CANCEL = 458_907

§

CLEAR = 458_908

§

PRIOR = 458_909

§

RETURN2 = 458_910

§

SEPARATOR = 458_911

§

OUT = 458_912

§

OPER = 458_913

§

CLEAR_AGAIN = 458_914

§

CRSEL = 458_915

§

EXSEL = 458_916

§

KP_LEFT_PARENTHESIS = 458_934

§

KP_RIGHT_PARENTHESIS = 458_935

§

KP_CLEAR = 458_968

§

LEFT_CONTROL = 458_976

§

LEFT_SHIFT = 458_977

§

LEFT_ALT = 458_978

§

LEFT_COMMAND = 458_979

§

RIGHT_CONTROL = 458_980

§

RIGHT_SHIFT = 458_981

§

RIGHT_ALT = 458_982

§

RIGHT_COMMAND = 458_983

§

K_PLAY_PAUSE = 458_984

§

K_STOP2 = 458_985

§

K_PREVIOUS = 458_986

§

K_NEXT = 458_987

§

K_EJECT = 458_988

§

K_VOLUME_UP2 = 458_989

§

K_VOLUME_DOWN2 = 458_990

§

K_MUTE2 = 458_991

§

K_WWW = 458_992

§

K_BACK = 458_993

§

K_FORWARD = 458_994

§

K_STOP3 = 458_995

§

K_FIND2 = 458_996

§

K_SCROLL_UP = 458_997

§

K_SCROLL_DOWN = 458_998

§

K_EDIT = 458_999

§

K_SLEEP = 459_000

§

K_SCREENSAVER = 459_001

§

K_REFRESH = 459_002

§

K_CALCULATOR = 459_003

§

C_POWER = 786_480

§

C_RESET = 786_481

§

C_SLEEP = 786_482

§

C_SLEEP_MODE = 786_484

§

C_MENU = 786_496

§

C_MENU_SELECT = 786_497

§

C_MENU_UP = 786_498

§

C_MENU_DOWN = 786_499

§

C_MENU_LEFT = 786_500

§

C_MENU_RIGHT = 786_501

§

C_MENU_ESCAPE = 786_502

§

C_MENU_INCREASE = 786_503

§

C_MENU_DECREASE = 786_504

§

C_DATA_ON_SCREEN = 786_528

§

C_SUBTITLES = 786_529

§

C_SNAPSHOT = 786_533

§

C_PIP = 786_535

§

C_RED_BUTTON = 786_537

§

C_GREEN_BUTTON = 786_538

§

C_BLUE_BUTTON = 786_539

§

C_YELLOW_BUTTON = 786_540

§

C_ASPECT = 786_541

§

C_MEDIA_STEP = 786_562

§

C_RECALL_LAST = 786_563

§

C_MEDIA_TV = 786_569

§

C_MEDIA_WWW = 786_570

§

C_MEDIA_DVD = 786_571

§

C_MEDIA_PHONE = 786_572

§

C_MEDIA_GAMES = 786_575

§

C_MEDIA_CD = 786_577

§

C_MEDIA_VCR = 786_578

§

C_MEDIA_TUNER = 786_579

§

C_QUIT = 786_580

§

C_HELP = 786_581

§

C_MEDIA_TAPE = 786_582

§

C_MEDIA_CABLE = 786_583

§

C_MEDIA_HOME = 786_586

§

C_CHANNEL_INC = 786_588

§

C_CHANNEL_DEC = 786_589

§

C_MEDIA_VCR_PLUS = 786_592

§

C_PLAY = 786_608

§

C_PAUSE = 786_609

§

C_RECORD = 786_610

§

C_FAST_FORWARD = 786_611

§

C_REWIND = 786_612

§

C_NEXT = 786_613

§

C_PREVIOUS = 786_614

§

C_STOP = 786_615

§

C_EJECT = 786_616

§

C_RANDOM_PLAY = 786_617

§

C_REPEAT = 786_620

§

C_SLOW_TRACKING = 786_623

§

C_STOP_EJECT = 786_636

§

C_PLAY_PAUSE = 786_637

§

C_VOICE_COMMAND = 786_639

§

C_MUTE = 786_658

§

C_BASS_BOOST = 786_661

§

C_VOLUME_UP = 786_665

§

C_VOLUME_DOWN = 786_666

§

C_SLOW = 786_677

§

C_AL_WORD = 786_820

§

C_AL_TEXT_EDITOR = 786_821

§

C_AL_SPREADSHEET = 786_822

§

C_AL_DATABASE = 786_825

§

C_AL_EMAIL = 786_826

§

C_AL_NEWS = 786_827

§

C_AL_VOICEMAIL = 786_828

§

C_AL_CALENDAR = 786_830

§

C_AL_JOURNAL = 786_832

§

C_AL_FINANCE = 786_833

§

C_AL_CALCULATOR = 786_834

§

C_AL_WWW = 786_838

§

C_AL_NETWORK_CHAT = 786_841

§

C_AL_LOGOFF = 786_844

§

C_AL_CONTROL_PANEL = 786_847

§

C_AL_HELP = 786_854

§

C_AL_DOCUMENTS = 786_855

§

C_AL_SPELLCHECK = 786_859

§

C_AL_SCREEN_SAVER = 786_865

§

C_AL_FILE_BROWSER = 786_868

§

C_AL_IMAGE_BROWSER = 786_870

§

C_AL_AUDIO_BROWSER = 786_871

§

C_AL_MOVIE_BROWSER = 786_872

§

C_AC_NEW = 786_945

§

C_AC_OPEN = 786_946

§

C_AC_CLOSE = 786_947

§

C_AC_EXIT = 786_948

§

C_AC_SAVE = 786_951

§

C_AC_PRINT = 786_952

§

C_AC_PROPERTIES = 786_953

§

C_AC_UNDO = 786_970

§

C_AC_COPY = 786_971

§

C_AC_CUT = 786_972

§

C_AC_PASTE = 786_973

§

C_AC_FIND = 786_975

§

C_AC_GOTO = 786_978

§

C_AC_HOME = 786_979

§

C_AC_BACK = 786_980

§

C_AC_FORWARD = 786_981

§

C_AC_STOP = 786_982

§

C_AC_REFRESH = 786_983

§

C_AC_FAVOURITES = 786_986

§

C_AC_ZOOM_IN = 786_989

§

C_AC_ZOOM_OUT = 786_990

§

C_AC_ZOOM = 786_991

§

C_AC_VIEW_TOGGLE = 786_994

§

C_AC_SCROLL_UP = 786_995

§

C_AC_SCROLL_DOWN = 786_996

§

C_AC_EDIT = 787_005

§

C_AC_CANCEL = 787_039

§

C_AC_INSERT = 787_049

§

C_AC_DEL = 787_050

§

C_AC_REDO = 787_065

§

C_AC_REPLY = 787_081

§

C_AC_FORWARD_MAIL = 787_083

§

C_AC_SEND = 787_084

§

C_AC_NEXT_KEYBOARD_LAYOUT_SELECT = 787_101

§

EXCLAMATION = 34_013_214

§

AT_SIGN = 34_013_215

§

POUND = 34_013_216

§

DOLLAR = 34_013_217

§

PERCENT = 34_013_218

§

CARET = 34_013_219

§

AMPERSAND = 34_013_220

§

ASTERISK = 34_013_221

§

UNDERSCORE = 34_013_229

§

PLUS = 34_013_230

§

PIPE = 34_013_233

§

TILDE2 = 34_013_234

§

COLON = 34_013_235

§

TILDE = 34_013_237

§

LESS_THAN = 34_013_238

§

QUESTION = 34_013_240

§

CLEAR2 = 34_013_267

§

PIPE2 = 34_013_284

Implementations§

Source§

impl Keycode

Source

pub const fn to_hid_usage(self) -> u32

Returns the raw HID usage value as encoded by ZMK.

Examples found in repository?
examples/basic_example.rs (line 111)
66fn run_example<T: Read + Write>(mut client: StudioClient<T>) -> Result<(), Box<dyn Error>> {
67    let info = client.get_device_info()?;
68    println!("Device: {}", info.name);
69    println!("Lock: {:?}", client.get_lock_state()?);
70
71    let behavior_ids = client.list_all_behaviors()?;
72    println!("Behavior count: {}", behavior_ids.len());
73    if let Some(first_behavior_id) = behavior_ids.first().copied() {
74        let details = client.get_behavior_details(first_behavior_id)?;
75        println!("First behavior: {} ({})", details.id, details.display_name);
76    }
77
78    let keymap = match client.get_keymap() {
79        Ok(keymap) => keymap,
80        Err(ClientError::Meta(_)) => {
81            println!("Keymap request denied (likely locked); press `&studio_unlock` then rerun.");
82            return Ok(());
83        }
84        Err(err) => return Err(Box::new(err)),
85    };
86    println!("Layers: {}", keymap.layers.len());
87
88    let layouts = client.get_physical_layouts()?;
89    println!(
90        "Physical layouts: {} (active index: {})",
91        layouts.layouts.len(),
92        layouts.active_layout_index
93    );
94
95    let Some(first_layer) = keymap.layers.first() else {
96        return Ok(());
97    };
98    if first_layer.bindings.is_empty() {
99        return Ok(());
100    }
101
102    let layer_id = first_layer.id;
103    let key_position = 0;
104
105    let before = client.get_key_at(layer_id, key_position)?;
106    println!("Before: {before:?}");
107
108    client.set_key_at(
109        layer_id,
110        key_position,
111        Behavior::KeyPress(HidUsage::from_encoded(Keycode::A.to_hid_usage())),
112    )?;
113    let after = client.get_key_at(layer_id, key_position)?;
114    println!("After:  {after:?}");
115
116    // Change management APIs.
117    let has_changes = client.check_unsaved_changes()?;
118    println!("Unsaved changes: {has_changes}");
119    if has_changes {
120        client.discard_changes()?;
121    }
122
123    Ok(())
124}
Source

pub fn from_hid_usage(encoded: u32) -> Option<Self>

Converts a raw HID usage value into a known Keycode.

Returns None when the usage is not present in this enum table.

Source

pub fn from_name(name: &str) -> Option<Self>

Parses a keycode from a ZMK name/alias (for example "A" or "LSHFT").

Source

pub fn to_name(self) -> &'static str

Returns the canonical static name for this keycode variant.

Trait Implementations§

Source§

impl AsRef<str> for Keycode

Source§

fn as_ref(&self) -> &str

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for Keycode

Source§

fn clone(&self) -> Keycode

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Keycode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'_derivative_strum> From<&'_derivative_strum Keycode> for &'static str

Source§

fn from(x: &'_derivative_strum Keycode) -> &'static str

Converts to this type from the input type.
Source§

impl From<Keycode> for &'static str

Source§

fn from(x: Keycode) -> &'static str

Converts to this type from the input type.
Source§

impl FromStr for Keycode

Source§

type Err = ParseError

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Keycode, <Self as FromStr>::Err>

Parses a string s to return a value of this type. Read more
Source§

impl Hash for Keycode

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl IntoEnumIterator for Keycode

Source§

type Iterator = KeycodeIter

Source§

fn iter() -> KeycodeIter

Source§

impl PartialEq for Keycode

Source§

fn eq(&self, other: &Keycode) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl TryFrom<&str> for Keycode

Source§

type Error = ParseError

The type returned in the event of a conversion error.
Source§

fn try_from(s: &str) -> Result<Keycode, <Self as TryFrom<&str>>::Error>

Performs the conversion.
Source§

impl TryFrom<u32> for Keycode

Source§

type Error = TryFromPrimitiveError<Keycode>

The type returned in the event of a conversion error.
Source§

fn try_from(number: u32) -> Result<Self, TryFromPrimitiveError<Self>>

Performs the conversion.
Source§

impl TryFromPrimitive for Keycode

Source§

impl Copy for Keycode

Source§

impl Eq for Keycode

Source§

impl StructuralPartialEq for Keycode

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.