changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/ffi/xkb/pkg.lisp

changeset 149: 2d1fe1d7b738
parent: 797d729e14cc
child: b4bb3c52bc18
author: ellis <ellis@rwest.io>
date: Sat, 30 Dec 2023 20:50:15 -0500
permissions: -rw-r--r--
description: ffi update to support darwin, smh
1 ;;; ffi/xkb/pkg.lisp --- XKBCommon bindings
2 
3 ;; We use the X Keyboard Configuration Database for keymaps.
4 
5 ;; ref: https://xkbcommon.org/doc/current/
6 ;; https://www.freedesktop.org/wiki/Software/XKeyboardConfig/
7 ;; https://www.x.org/releases/X11R7.6/doc/xorg-docs/input/XKB-Config.html
8 ;; https://people.uleth.ca/~daniel.odonnell/Blog/custom-keyboard-in-linuxx11
9 ;;
10 
11 ;;; Code:
12 (defpackage :xkb
13  (:use :cl :std :sb-alien)
14  (:export
15  :xkb-context :xkb-keymap
16  :xkb-keycode :xkb-keysym
17  :xkb-layout-index :xkb-layout-mask
18  :xkb-level-index :xkb-mod-index
19  :xkb-mod-mask :xkb-led-index :xkb-led-mask
20  :xkb-keysym-flags :xkb-context-flags
21  :xkb-keysym-get-name :xkb-keysym-from-name :xkb-keysym-to-utf8
22  :xkb-keysym-to-utf32 :xkb-utf32-to-keysym :xkb-keysym-to-upper
23  :xkb-keysym-to-lower :xkb-context-new :xkb-context-set-user-data
24  :xkb-context-get-user-data :xkb-context-include-path-append
25  :xkb-context-include-path-append-default :xkb-context-include-path-reset-defaults
26  :xkb-context-include-path-clear :xkb-context-num-include-paths :xkb-context-include-path-get))
27 
28 (in-package :xkb)
29 
30 (define-alien-loader xkbcommon t)
31 
32 (define-alien-type xkb-context (struct xkb-context))
33 (define-alien-type xkb-keymap (struct xkb-keymap))
34 (define-alien-type xkb-state (struct xkb-state))
35 (define-alien-type xkb-keycode unsigned-int)
36 (define-alien-type xkb-keysym unsigned-int)
37 (define-alien-type xkb-layout-index unsigned-int)
38 (define-alien-type xkb-layout-mask unsigned-int)
39 (define-alien-type xkb-level-index unsigned-int)
40 (define-alien-type xkb-mod-index unsigned-int)
41 (define-alien-type xkb-mod-mask unsigned-int)
42 (define-alien-type xkb-led-index unsigned-int)
43 (define-alien-type xkb-led-mask unsigned-int)
44 (define-alien-type xkb-keysym-flags boolean)
45 (define-alien-type xkb-context-flags unsigned-char)
46 (define-alien-type xkb-keymap-compile-flags boolean)
47 (define-alien-type xkb-keymap-format boolean)
48 
49 (define-alien-type xkb-rule-names
50  (struct xkb-rule-names
51  (rules c-string)
52  (model c-string)
53  (layout c-string)
54  (variant c-string)
55  (options c-string)))
56 
57 (define-alien-routine xkb-keysym-get-name int
58  (keysym xkb-keysym-flags)
59  (buffer c-string)
60  (size size-t))
61 
62 (define-alien-routine xkb-keysym-from-name xkb-keysym
63  (name c-string)
64  (flags xkb-keysym-flags))
65 
66 (define-alien-routine xkb-keysym-to-utf8 int
67  (keysym xkb-keysym)
68  (buffer c-string)
69  (size size-t))
70 
71 (define-alien-routine xkb-keysym-to-utf32 unsigned-int
72  (keysym xkb-keysym))
73 
74 (define-alien-routine xkb-utf32-to-keysym xkb-keysym
75  (ucs unsigned-int))
76 
77 (define-alien-routine xkb-keysym-to-upper xkb-keysym
78  (ks xkb-keysym))
79 
80 (define-alien-routine xkb-keysym-to-lower xkb-keysym
81  (ks xkb-keysym))
82 
83 (define-alien-routine xkb-context-new (* xkb-context)
84  (flags xkb-context-flags))
85 
86 (define-alien-routine xkb-context-set-user-data void
87  (context (* xkb-context))
88  (user-data (* t)))
89 
90 (define-alien-routine xkb-context-get-user-data (* t)
91  (context (* xkb-context)))
92 
93 (define-alien-routine xkb-context-include-path-append int
94  (context (* xkb-context))
95  (path c-string))
96 
97 (define-alien-routine xkb-context-include-path-append-default int
98  (context (* xkb-context)))
99 
100 (define-alien-routine xkb-context-include-path-reset-defaults int
101  (context (* xkb-context)))
102 
103 (define-alien-routine xkb-context-include-path-clear void
104  (context (* xkb-context)))
105 
106 (define-alien-routine xkb-context-num-include-paths unsigned-int
107  (context (* xkb-context)))
108 
109 (define-alien-routine xkb-context-include-path-get c-string
110  (context (* xkb-context)))
111 
112 ;;; NYI Logging
113 
114 ;; https://xkbcommon.org/doc/current/group__logging.html
115 
116 ;;; Keymap Init
117 (define-alien-routine xkb-keymap-new-from-names (* xkb-keymap)
118  (context (* xkb-context))
119  (names (* xkb-rule-names))
120  (flags xkb-keymap-compile-flags))
121 
122 (define-alien-routine xkb-keymap-new-from-file (* xkb-keymap)
123  (context (* xkb-context))
124  (file (* t))
125  (fmt xkb-keymap-format)
126  (flags xkb-keymap-compile-flags))
127 
128 (define-alien-routine xkb-keymap-new-from-string (* xkb-keymap)
129  (context (* xkb-context))
130  (str c-string)
131  (fmt xkb-keymap-format)
132  (flags xkb-keymap-compile-flags))
133 
134 (define-alien-routine xkb-keymap-new-from-buffer (* xkb-keymap)
135  (context (* xkb-context))
136  (buffer c-string)
137  (length size-t)
138  (fmt xkb-keymap-format)
139  (flags xkb-keymap-compile-flags))
140 
141 ;;; Keymap Components
142 
143 (define-alien-routine xkb-keymap-min-keycode xkb-keycode
144  (keymap (* xkb-keymap)))
145 
146 (define-alien-routine xkb-keymap-max-keycode xkb-keycode
147  (keymap (* xkb-keymap)))
148 
149 (define-alien-routine xkb-keymap-key-for-each void
150  (keymap (* xkb-keymap))
151  (iter (* t))
152  (data (* t)))
153 
154 (define-alien-routine xkb-keymap-key-get-name c-string
155  (keymap (* xkb-keymap))
156  (key xkb-keycode))
157 
158 (define-alien-routine xkb-keymap-num-mods xkb-mod-index
159  (keymap (* xkb-keymap)))
160 
161 (define-alien-routine xkb-keymap-mod-get-name c-string
162  (keymap (* xkb-keymap))
163  (idx xkb-mod-index))
164 
165 (define-alien-routine xkb-keymap-get-index xkb-mod-index
166  (keymap (* xkb-keymap))
167  (name c-string))
168 
169 (define-alien-routine xkb-keymap-num-layouts xkb-layout-index
170  (keymap (* xkb-keymap)))
171 
172 (define-alien-routine xkb-keymap-layout-get-name c-string
173  (keymap (* xkb-keymap))
174  (idx xkb-layout-index))
175 
176 (define-alien-routine xkb-keymap-layout-get-index xkb-layout-index
177  (keymap (* xkb-keymap))
178  (name c-string))
179 
180 (define-alien-routine xkb-keymap-num-leds xkb-led-index
181  (keymap (* xkb-keymap)))
182 
183 (define-alien-routine xkb-keymap-led-get-name c-string
184  (keymap (* xkb-keymap))
185  (idx xkb-led-index))
186 
187 (define-alien-routine xkb-keymap-led-get-index xkb-led-index
188  (keymap (* xkb-keymap))
189  (name c-string))
190 
191 (define-alien-routine xkb-keymap-num-levels-for-key xkb-level-index
192  (keymap (* xkb-keymap))
193  (key xkb-keycode)
194  (layout xkb-layout-index))
195 
196 (define-alien-routine xkb-keymap-key-get-mods-for-level size-t
197  (keymap (* xkb-keymap))
198  (key xkb-keycode)
199  (layout xkb-layout-index)
200  (level xkb-level-index)
201  (masks-out (* xkb-mod-mask))
202  (masks-size size-t))
203 
204 (define-alien-routine xkb-keymap-key-get-syms-by-level int
205  (keymap (* xkb-keymap))
206  (key xkb-keycode)
207  (layout xkb-layout-index)
208  (level xkb-level-index)
209  (syms-out (* (* xkb-keysym))))
210 
211 (define-alien-routine xkb-keymap-key-repeats int
212  (keymap (* xkb-keymap))
213  (key xkb-keycode))
214 
215 ;;; TODO Keyboard State
216 
217 ;;; TODO Compose/Dead-keys support