int cmd_unbind(int argc, char *argv[]) { KeyAction action; KeyCode key; /* unbind all case ("unbind *") */ if (argc == 2 && strcmp(argv[1], "*") == 0) { kb_unbind_all(); return 0; } /* unbind action case ("unbind action <ACTION>") */ if (argc == 3 && strcasecmp(argv[1], "action") == 0) { if (kb_str2action(argv[2], &action)) { kb_unbind_action(action); return 0; } else { paint_error("Unknown action '%s'", argv[2]); return 1; } } /* unbind key case, no control ("unbind key X") */ if (argc == 3 && strcasecmp(argv[1], "key") == 0) { if ((key = kb_str2keycode(argv[2])) < 0) { paint_error("Invalid keycode '%s'", argv[2]); return 1; } kb_unbind_key(key); return 0; } /* unbind key case, with control ("unbind key control X") */ if (argc == 4 && strcasecmp(argv[1], "key") == 0) { if ((key = kb_str2keycode2(argv[2], argv[3])) < 0) { paint_error("Invalid keycode '%s %s'", argv[2], argv[3]); return 1; } kb_unbind_key(key); return 0; } paint_error("usage: unbind [* | action <ACTION> | key <KEYCODE> ]"); return 1; }
void kb_bind(KeyAction action, KeyCode key) { kb_unbind_key(key); if (KeyBindingsSize == KeyBindingsCapacity) kb_increase_capacity(); KeyBindings[KeyBindingsSize].action = action; KeyBindings[KeyBindingsSize].key = key; KeyBindingsSize++; }