-
Notifications
You must be signed in to change notification settings - Fork 6
/
keytrans.lisp
105 lines (94 loc) · 3.71 KB
/
keytrans.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
;; Copyright (C) 2006-2008 Matthew Kennedy
;; Copyright (C) 2010-2011 Alexander aka CosmonauT Vynnyk
;;
;; This file is part of dswm.
;;
;; dswm is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; dswm is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this software; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
;; Boston, MA 02111-1307 USA
;; Commentary:
;;
;; Translate between dswm key names and keysym names.
;;
;; Code:
(in-package #:dswm)
(defvar *dswm-name->keysym-name-translations* (make-hash-table :test #'equal)
"Hashtable mapping from dswm key names to keysym names.")
(defun define-keysym-name (dswm-name keysym-name)
"Define a mapping from a DSWM-NAME to KEYSYM-NAME.
This function is used to translate Emacs-like names to keysym
names."
(setf (gethash dswm-name *dswm-name->keysym-name-translations*)
keysym-name))
(defun dswm-name->keysym-name (dswm-name)
(multiple-value-bind (value present-p)
(gethash dswm-name *dswm-name->keysym-name-translations*)
(declare (ignore present-p))
value))
(defun keysym-name->dswm-name (keysym-name)
(maphash (lambda (k v)
(when (equal v keysym-name)
(return-from keysym-name->dswm-name k)))
*dswm-name->keysym-name-translations*))
(defun dswm-name->keysym (dswm-name)
"Return the keysym corresponding to DSWM-NAME.
If no mapping for DSWM-NAME exists, then fallback by calling
KEYSYM-NAME->KEYSYM."
(let ((keysym-name (dswm-name->keysym-name dswm-name)))
(keysym-name->keysym (or keysym-name dswm-name))))
(defun keysym->dswm-name (keysym)
"Return the dswm key name corresponding to KEYSYM.
If no mapping for the dswm key name exists, then fall back by
calling KEYSYM->KEYSYM-NAME."
(let ((keysym-name (keysym->keysym-name keysym)))
(or (keysym-name->dswm-name keysym-name)
keysym-name)))
(define-keysym-name "RET" "Return")
(define-keysym-name "ESC" "Escape")
(define-keysym-name "TAB" "Tab")
(define-keysym-name "DEL" "BackSpace")
(define-keysym-name "SPC" "space")
(define-keysym-name "!" "exclam")
(define-keysym-name "\"" "quotedbl")
(define-keysym-name "$" "dollar")
(define-keysym-name "%" "percent")
(define-keysym-name "&" "ampersand")
(define-keysym-name "'" "quoteright") ;deprecated
(define-keysym-name "'" "apostrophe")
(define-keysym-name "`" "quoteleft") ;deprecated
(define-keysym-name "`" "grave")
(define-keysym-name "&" "ampersand")
(define-keysym-name "(" "parenleft")
(define-keysym-name ")" "parenright")
(define-keysym-name "*" "asterisk")
(define-keysym-name "+" "plus")
(define-keysym-name "," "comma")
(define-keysym-name "-" "minus")
(define-keysym-name "." "period")
(define-keysym-name "/" "slash")
(define-keysym-name ":" "colon")
(define-keysym-name ";" "semicolon")
(define-keysym-name "<" "less")
(define-keysym-name "=" "equal")
(define-keysym-name ">" "greater")
(define-keysym-name "?" "question")
(define-keysym-name "@" "at")
(define-keysym-name "[" "bracketleft")
(define-keysym-name "\\" "backslash")
(define-keysym-name "]" "bracketright")
(define-keysym-name "^" "asciicircum")
(define-keysym-name "_" "underscore")
(define-keysym-name "#" "numbersign")
(define-keysym-name "{" "braceleft")
(define-keysym-name "|" "bar")
(define-keysym-name "}" "braceright")
(define-keysym-name "~" "asciitilde")