Coverage report: /home/ellis/comp/core/ffi/xkb/pkg.lisp
Kind | Covered | All | % |
expression | 3 | 117 | 2.6 |
branch | 0 | 0 | nil |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;; ffi/xkb/pkg.lisp --- XKBCommon bindings
3
;; We use the X Keyboard Configuration Database for keymaps.
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
12
(:use :cl :std :sb-alien)
14
:xkb-context :xkb-keymap
15
:xkb-keycode :xkb-keysym
16
:xkb-layout-index :xkb-layout-mask
17
:xkb-level-index :xkb-mod-index
18
:xkb-mod-mask :xkb-led-index :xkb-led-mask
19
:xkb-keysym-flags :xkb-context-flags
20
:xkb-keysym-get-name :xkb-keysym-from-name :xkb-keysym-to-utf8
21
:xkb-keysym-to-utf32 :xkb-utf32-to-keysym :xkb-keysym-to-upper
22
:xkb-keysym-to-lower :xkb-context-new :xkb-context-set-user-data
23
:xkb-context-get-user-data :xkb-context-include-path-append
24
:xkb-context-include-path-append-default :xkb-context-include-path-reset-defaults
25
:xkb-context-include-path-clear :xkb-context-num-include-paths :xkb-context-include-path-get
30
(define-alien-loader xkbcommon "/usr/lib/")
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)
45
(define-alien-enum (xkb-keysym-flags unsigned-char)
47
:case-insensitive (ash 1 0))
48
(define-alien-enum (xkb-context-flags unsigned-char)
50
:no-default-includes (ash 1 0)
51
:no-environment-names (ash 1 1)
52
:no-secure-getenv (ash 1 2))
54
(define-alien-enum (xkb-keymap-compile-flags unsigned-char)
57
(define-alien-enum (xkb-keymap-format int)
60
(define-alien-type xkb-rule-names
61
(struct xkb-rule-names
68
(defar xkb-keysym-get-name int
70
(buffer (* unsigned-char))
73
(defar xkb-keysym-from-name xkb-keysym
75
(flags xkb-keysym-flags))
77
(defar xkb-keysym-to-utf8 int
82
(defar xkb-keysym-to-utf32 unsigned-int
85
(defar xkb-utf32-to-keysym xkb-keysym
88
(defar xkb-keysym-to-upper xkb-keysym
91
(defar xkb-keysym-to-lower xkb-keysym
94
(defar xkb-context-new (* xkb-context)
95
(flags xkb-context-flags))
97
(defar xkb-context-set-user-data void
98
(context (* xkb-context))
101
;; (defar xkb-context-get-user-data (* t)
102
;; (context (* xkb-context)))
104
(defar xkb-context-include-path-append int
105
(context (* xkb-context))
108
(defar xkb-context-include-path-append-default int
109
(context (* xkb-context)))
111
(defar xkb-context-include-path-reset-defaults int
112
(context (* xkb-context)))
114
(defar xkb-context-include-path-clear void
115
(context (* xkb-context)))
117
(defar xkb-context-num-include-paths unsigned-int
118
(context (* xkb-context)))
120
(defar xkb-context-include-path-get c-string
121
(context (* xkb-context)))
125
;; https://xkbcommon.org/doc/current/group__logging.html
127
(define-alien-enum (xkb-log-level int)
135
(defar xkb-keymap-new-from-names (* xkb-keymap)
136
(context (* xkb-context))
137
(names (* xkb-rule-names))
138
(flags xkb-keymap-compile-flags))
140
(defar xkb-keymap-new-from-file (* xkb-keymap)
141
(context (* xkb-context))
143
(fmt xkb-keymap-format)
144
(flags xkb-keymap-compile-flags))
146
(defar xkb-keymap-new-from-string (* xkb-keymap)
147
(context (* xkb-context))
149
(fmt xkb-keymap-format)
150
(flags xkb-keymap-compile-flags))
152
(defar xkb-keymap-new-from-buffer (* xkb-keymap)
153
(context (* xkb-context))
156
(fmt xkb-keymap-format)
157
(flags xkb-keymap-compile-flags))
159
;;; Keymap Components
161
(defar xkb-keymap-min-keycode xkb-keycode
162
(keymap (* xkb-keymap)))
164
(defar xkb-keymap-max-keycode xkb-keycode
165
(keymap (* xkb-keymap)))
167
(defar xkb-keymap-key-for-each void
168
(keymap (* xkb-keymap))
172
(defar xkb-keymap-key-get-name c-string
173
(keymap (* xkb-keymap))
176
(defar xkb-keymap-num-mods xkb-mod-index
177
(keymap (* xkb-keymap)))
179
(defar xkb-keymap-mod-get-name c-string
180
(keymap (* xkb-keymap))
183
(defar xkb-keymap-get-index xkb-mod-index
184
(keymap (* xkb-keymap))
187
(defar xkb-keymap-num-layouts xkb-layout-index
188
(keymap (* xkb-keymap)))
190
(defar xkb-keymap-layout-get-name c-string
191
(keymap (* xkb-keymap))
192
(idx xkb-layout-index))
194
(defar xkb-keymap-layout-get-index xkb-layout-index
195
(keymap (* xkb-keymap))
198
(defar xkb-keymap-num-leds xkb-led-index
199
(keymap (* xkb-keymap)))
201
(defar xkb-keymap-led-get-name c-string
202
(keymap (* xkb-keymap))
205
(defar xkb-keymap-led-get-index xkb-led-index
206
(keymap (* xkb-keymap))
209
(defar xkb-keymap-num-levels-for-key xkb-level-index
210
(keymap (* xkb-keymap))
212
(layout xkb-layout-index))
214
(defar xkb-keymap-key-get-mods-for-level size-t
215
(keymap (* xkb-keymap))
217
(layout xkb-layout-index)
218
(level xkb-level-index)
219
(masks-out (* xkb-mod-mask))
222
(defar xkb-keymap-key-get-syms-by-level int
223
(keymap (* xkb-keymap))
225
(layout xkb-layout-index)
226
(level xkb-level-index)
227
(syms-out (* (* xkb-keysym))))
229
(defar xkb-keymap-key-repeats int
230
(keymap (* xkb-keymap))
234
(defar xkb-state-new (* xkb-state) (keymap (* xkb-keymap)))
235
(defar xkb-state-ref (* xkb-state) (state (* xkb-state)))
236
(defar xkb-state-unref void (state (* xkb-state)))
237
(defar xkb-state-get-keymap (* xkb-keymap) (state (* xkb-state)))
239
(define-alien-enum (xkb-key-direction unsigned-char)
243
(define-alien-enum (xkb-state-component int)
244
:mods-depressed (ash 1 0)
245
:mods-latched (ash 1 1)
246
:mods-locked (ash 1 2)
247
:mods-effective (ash 1 3)
248
:layout-depressed (ash 1 4)
249
:layout-latched (ash 1 5)
250
:layout-locked (ash 1 6)
251
:layout-effective (ash 1 7)
254
(defar xkb-state-update-key xkb-state-component
255
(state (* xkb-state))
257
(direction xkb-key-direction))
259
(defar xkb-state-update-mask xkb-state-component
260
(state (* xkb-state))
261
(depressed-mods xkb-mod-mask)
262
(latched-mods xkb-mod-mask)
263
(locked-mods xkb-mod-mask)
264
(depressed-layout xkb-mod-mask)
265
(latched-layout xkb-mod-mask)
266
(locked-layout xkb-mod-mask))
268
(defar xkb-state-key-get-syms int
269
(state (* xkb-state))
271
(syms-out (* (* xkb-keysym))))
273
(defar xkb-state-key-get-utf8 int
274
(state (* xkb-state))
276
(buffer (* unsigned-char))
279
(defar xkb-state-key-get-utf32 int
280
(state (* xkb-state))
283
(defar xkb-state-key-get-one-sym xkb-keysym
284
(state (* xkb-state))
287
(defar xkb-state-key-get-layout xkb-layout-index
288
(state (* xkb-state))
291
(defar xkb-state-key-get-level xkb-level-index
292
(state (* xkb-state))
294
(layout xkb-layout-index))
296
(define-alien-enum (xkb-state-match int)
299
:non-exclusive (ash 1 16))
301
(defar xkb-state-serialize-mods xkb-mod-mask
302
(state (* xkb-state))
303
(components xkb-state-component))
305
(defar xkb-state-serialize-layout xkb-layout-index
306
(state (* xkb-state))
307
(components xkb-state-component))
309
(defar xkb-state-mod-name-is-active int
310
(state (* xkb-state))
311
(name (* unsigned-char))
312
(type xkb-state-component))
314
(defar xkb-state-mod-names-are-active int
315
(state (* xkb-state))
316
(type xkb-state-component)
317
(match xkb-state-match)
320
(defar xkb-state-mod-index-is-active int
321
(state (* xkb-state))
323
(type xkb-state-component))
325
(defar xkb-state-mod-indices-are-active int
326
(state (* xkb-state))
327
(type xkb-state-component)
328
(match xkb-state-match)
331
(define-alien-enum (xkb-consumed-mode int)
335
(defar xkb-state-key-get-consumed-mods2 xkb-mod-mask
336
(state (* xkb-state))
338
(mode xkb-consumed-mode))
340
(defar xkb-state-key-get-consumed-mods xkb-mod-mask
341
(state (* xkb-state))
344
(defar xkb-state-mod-index-is-consumed2 int
345
(state (* xkb-state))
348
(mode xkb-consumed-mode))
350
(defar xkb-state-mod-index-is-consumed int
351
(state (* xkb-state))
355
(defar xkb-state-mode-mask-remove-consumed xkb-mod-mask
356
(state (* xkb-state))
360
(defar xkb-state-layout-name-is-active int
361
(state (* xkb-state))
362
(name (* unsigned-char))
363
(type xkb-state-component))
365
(defar xkb-state-layout-index-is-active int
366
(state (* xkb-state))
367
(idx xkb-layout-index)
368
(type xkb-state-component))
370
(defar xkb-state-led-name-is-active int
371
(state (* xkb-state))
372
(name (* unsigned-char)))
374
(defar xkb-state-led-index-is-active int
375
(state (* xkb-state))
378
;;; xkbcommon-compose.h
379
(define-alien-type xkb-compose-table (struct xkb-compose-table))
381
(define-alien-type xkb-compose-state (struct xkb-compose-state))
383
(define-alien-enum (xkb-compose-compile-flags unsigned-char)
386
(define-alien-enum (xkb-compose-format unsigned-char)
389
(defar xkb-compose-table-new-from-locale (* xkb-compose-table)
390
(context (* xkb-context))
391
(locale (* unsigned-char))
392
(flags xkb-compose-compile-flags))
394
(defar xkb-compose-table-new-from-file (* xkb-compose-table)
396
(locale (* unsigned-char))
397
(format xkb-compose-format)
398
(flags xkb-compose-compile-flags))
400
(defar xkb-compose-table-new-from-buffer (* xkb-compose-table)
401
(context (* xkb-context))
402
(buffer (* unsigned-char))
404
(locale (* unsigned-char))
405
(format xkb-compose-format)
406
(flags xkb-compose-compile-flags))
408
(defar xkb-compose-table-ref (* xkb-compose-table)
409
(table (* xkb-compose-table)))
411
(defar xkb-compose-table-unref void
412
(table (* xkb-compose-table)))
414
(define-alien-type xkb-compose-table-entry (struct xkb-compose-table-entry))
416
(defar xkb-compose-table-entry-sequence (* xkb-keysym)
417
(entry (* xkb-compose-table-entry))
418
(sequence-length (* size-t)))
420
(defar xkb-compose-table-entry-keysym xkb-keysym
421
(entry (* xkb-compose-table-entry)))
423
(defar xkb-compose-table-entry-utf8 (* unsigned-char)
424
(entry (* xkb-compose-table-entry)))
426
(define-alien-type xkb-compose-table-iterator (struct xkb-compose-table-iterator))
428
(defar xkb-compose-table-iterator-new (* xkb-compose-table-iterator)
429
(table (* xkb-compose-table)))
431
(defar xkb-compose-table-iterator-free void
432
(iter (* xkb-compose-table-iterator)))
434
(defar xkb-compose-table-iterator-next (* xkb-compose-table-entry)
435
(iter (* xkb-compose-table-iterator)))
437
(define-alien-enum (xkb-compose-state-flags int)
440
(defar xkb-compose-state-new (* xkb-compose-state)
441
(table (* xkb-compose-table))
442
(flags xkb-compose-state-flags))
444
(defar xkb-compose-state-ref (* xkb-compose-state)
445
(state (* xkb-compose-state)))
447
(defar xkb-compose-state-unref void
448
(state (* xkb-compose-state)))
450
(defar xkb-compose-state-get-compose-table (* xkb-compose-table)
451
(state (* xkb-compose-state)))
453
(define-alien-enum (xkb-compose-status unsigned-char)
459
(define-alien-enum (xkb-compose-feed-result unsigned-char)
463
(defar xkb-compose-state-feed xkb-compose-feed-result
464
(state (* xkb-compose-state))
467
(defar xkb-compose-state-reset void
468
(state (* xkb-compose-state)))
470
(defar xkb-compose-state-get-status xkb-compose-status
471
(state (* xkb-compose-state)))
473
(defar xkb-compose-state-get-utf8 int
474
(state (* xkb-compose-state))
475
(buffer (* unsigned-char))
478
(defar xkb-compose-state-get-one-sym xkb-keysym
479
(state (* xkb-compose-state)))