keysyms.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #include "keysyms.h"
  3. #include <linux/ctype.h>
  4. #include <linux/kernel.h>
  5. const char *key_name(int key, char *bf, size_t size)
  6. {
  7. if (isprint(key)) {
  8. scnprintf(bf, size, "%c", key);
  9. } else if (key < 32) {
  10. scnprintf(bf, size, "Ctrl+%c", key + '@');
  11. } else {
  12. const char *name = NULL;
  13. switch (key) {
  14. case K_DOWN: name = "Down"; break;
  15. case K_END: name = "End"; break;
  16. case K_ENTER: name = "Enter"; break;
  17. case K_ESC: name = "ESC"; break;
  18. case K_F1: name = "F1"; break;
  19. case K_HOME: name = "Home"; break;
  20. case K_LEFT: name = "Left"; break;
  21. case K_PGDN: name = "PgDown"; break;
  22. case K_PGUP: name = "PgUp"; break;
  23. case K_RIGHT: name = "Right"; break;
  24. case K_TAB: name = "Tab"; break;
  25. case K_UNTAB: name = "Untab"; break;
  26. case K_UP: name = "Up"; break;
  27. case K_BKSPC: name = "Backspace"; break;
  28. case K_DEL: name = "Del"; break;
  29. default:
  30. if (key >= SL_KEY_F(1) && key <= SL_KEY_F(63))
  31. scnprintf(bf, size, "F%d", key - SL_KEY_F(0));
  32. else
  33. scnprintf(bf, size, "Unknown (%d)", key);
  34. }
  35. if (name)
  36. scnprintf(bf, size, "%s", name);
  37. }
  38. return bf;
  39. }