Mercurial > core / lisp/ffi/xkb/pkg.lisp
changeset 698: |
96958d3eb5b0 |
parent: |
29fe829a7ac3
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: |
-rw-r--r-- |
description: |
fixes |
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 13 (:use :cl :std :sb-alien) 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)) 30 (define-alien-loader "xkbcommon" t "/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) 56 (define-alien-type xkb-keymap-format boolean) 58 (define-alien-type xkb-rule-names 59 (struct xkb-rule-names 66 (define-alien-routine xkb-keysym-get-name int 71 (define-alien-routine xkb-keysym-from-name xkb-keysym 73 (flags xkb-keysym-flags)) 75 (define-alien-routine xkb-keysym-to-utf8 int 80 (define-alien-routine xkb-keysym-to-utf32 unsigned-int 83 (define-alien-routine xkb-utf32-to-keysym xkb-keysym 86 (define-alien-routine xkb-keysym-to-upper xkb-keysym 89 (define-alien-routine xkb-keysym-to-lower xkb-keysym 92 (define-alien-routine xkb-context-new (* xkb-context) 93 (flags xkb-context-flags)) 95 (define-alien-routine xkb-context-set-user-data void 96 (context (* xkb-context)) 99 ;; (define-alien-routine xkb-context-get-user-data (* t) 100 ;; (context (* xkb-context))) 102 (define-alien-routine xkb-context-include-path-append int 103 (context (* xkb-context)) 106 (define-alien-routine xkb-context-include-path-append-default int 107 (context (* xkb-context))) 109 (define-alien-routine xkb-context-include-path-reset-defaults int 110 (context (* xkb-context))) 112 (define-alien-routine xkb-context-include-path-clear void 113 (context (* xkb-context))) 115 (define-alien-routine xkb-context-num-include-paths unsigned-int 116 (context (* xkb-context))) 118 (define-alien-routine xkb-context-include-path-get c-string 119 (context (* xkb-context))) 123 ;; https://xkbcommon.org/doc/current/group__logging.html 127 (define-alien-routine xkb-keymap-new-from-names (* xkb-keymap) 128 (context (* xkb-context)) 129 (names (* xkb-rule-names)) 130 (flags xkb-keymap-compile-flags)) 132 (define-alien-routine xkb-keymap-new-from-file (* xkb-keymap) 133 (context (* xkb-context)) 135 (fmt xkb-keymap-format) 136 (flags xkb-keymap-compile-flags)) 138 (define-alien-routine xkb-keymap-new-from-string (* xkb-keymap) 139 (context (* xkb-context)) 141 (fmt xkb-keymap-format) 142 (flags xkb-keymap-compile-flags)) 144 (define-alien-routine xkb-keymap-new-from-buffer (* xkb-keymap) 145 (context (* xkb-context)) 148 (fmt xkb-keymap-format) 149 (flags xkb-keymap-compile-flags)) 151 ;;; Keymap Components 153 (define-alien-routine xkb-keymap-min-keycode xkb-keycode 154 (keymap (* xkb-keymap))) 156 (define-alien-routine xkb-keymap-max-keycode xkb-keycode 157 (keymap (* xkb-keymap))) 159 (define-alien-routine xkb-keymap-key-for-each void 160 (keymap (* xkb-keymap)) 164 (define-alien-routine xkb-keymap-key-get-name c-string 165 (keymap (* xkb-keymap)) 168 (define-alien-routine xkb-keymap-num-mods xkb-mod-index 169 (keymap (* xkb-keymap))) 171 (define-alien-routine xkb-keymap-mod-get-name c-string 172 (keymap (* xkb-keymap)) 175 (define-alien-routine xkb-keymap-get-index xkb-mod-index 176 (keymap (* xkb-keymap)) 179 (define-alien-routine xkb-keymap-num-layouts xkb-layout-index 180 (keymap (* xkb-keymap))) 182 (define-alien-routine xkb-keymap-layout-get-name c-string 183 (keymap (* xkb-keymap)) 184 (idx xkb-layout-index)) 186 (define-alien-routine xkb-keymap-layout-get-index xkb-layout-index 187 (keymap (* xkb-keymap)) 190 (define-alien-routine xkb-keymap-num-leds xkb-led-index 191 (keymap (* xkb-keymap))) 193 (define-alien-routine xkb-keymap-led-get-name c-string 194 (keymap (* xkb-keymap)) 197 (define-alien-routine xkb-keymap-led-get-index xkb-led-index 198 (keymap (* xkb-keymap)) 201 (define-alien-routine xkb-keymap-num-levels-for-key xkb-level-index 202 (keymap (* xkb-keymap)) 204 (layout xkb-layout-index)) 206 (define-alien-routine xkb-keymap-key-get-mods-for-level size-t 207 (keymap (* xkb-keymap)) 209 (layout xkb-layout-index) 210 (level xkb-level-index) 211 (masks-out (* xkb-mod-mask)) 214 (define-alien-routine xkb-keymap-key-get-syms-by-level int 215 (keymap (* xkb-keymap)) 217 (layout xkb-layout-index) 218 (level xkb-level-index) 219 (syms-out (* (* xkb-keysym)))) 221 (define-alien-routine xkb-keymap-key-repeats int 222 (keymap (* xkb-keymap)) 225 ;;; TODO Keyboard State 226 (define-alien-routine xkb-state-new (* xkb-state) (keymap (* xkb-keymap))) 227 (define-alien-routine xkb-state-ref (* xkb-state) (state (* xkb-state))) 228 (define-alien-routine xkb-state-unref void (state (* xkb-state))) 229 (define-alien-routine xkb-state-get-keymap (* xkb-keymap) (state (* xkb-state))) 231 (define-alien-enum (xkb-key-direction unsigned-char) 235 (define-alien-enum (xkb-state-component int) 236 :mods-depressed (ash 1 0) 237 :mods-latched (ash 1 1) 238 :mods-locked (ash 1 2) 239 :mods-effective (ash 1 3) 240 :layout-depressed (ash 1 4) 241 :layout-latched (ash 1 5) 242 :layout-locked (ash 1 6) 243 :layout-effective (ash 1 7) 246 (define-alien-routine xkb-state-update-key xkb-state-component 247 (state (* xkb-state)) 249 (direction xkb-key-direction)) 251 (define-alien-routine xkb-state-update-mask xkb-state-component 252 (state (* xkb-state)) 253 (depressed-mods xkb-mod-mask) 254 (latched-mods xkb-mod-mask) 255 (locked-mods xkb-mod-mask) 256 (depressed-layout xkb-mod-mask) 257 (latched-layout xkb-mod-mask) 258 (locked-layout xkb-mod-mask)) 260 (define-alien-routine xkb-state-key-get-syms int 261 (state (* xkb-state)) 263 (syms-out (* (* xkb-keysym)))) 265 (define-alien-routine xkb-state-key-get-utf8 int 266 (state (* xkb-state)) 271 (define-alien-routine xkb-state-key-get-utf32 int 272 (state (* xkb-state)) 275 (define-alien-routine xkb-state-key-get-one-sym xkb-keysym 276 (state (* xkb-state)) 279 (define-alien-routine xkb-state-key-get-layout xkb-layout-index 280 (state (* xkb-state)) 283 (define-alien-routine xkb-state-key-get-level xkb-level-index 284 (state (* xkb-state)) 286 (layout xkb-layout-index)) 288 (define-alien-enum (xkb-state-match int) 291 :non-exclusive (ash 1 16)) 293 (define-alien-routine xkb-state-serialize-mods xkb-mod-mask 294 (state (* xkb-state)) 295 (components xkb-state-component)) 297 (define-alien-routine xkb-state-serialize-layout xkb-layout-index 298 (state (* xkb-state)) 299 (components xkb-state-component)) 301 (define-alien-routine xkb-state-mod-name-is-active int 302 (state (* xkb-state)) 304 (type xkb-state-component)) 306 (define-alien-routine xkb-state-mod-names-are-active int 307 (state (* xkb-state)) 308 (type xkb-state-component) 309 (match xkb-state-match) 312 (define-alien-routine xkb-state-mod-index-is-active int 313 (state (* xkb-state)) 315 (type xkb-state-component)) 317 (define-alien-routine xkb-state-mod-indices-are-active int 318 (state (* xkb-state)) 319 (type xkb-state-component) 320 (match xkb-state-match) 323 (define-alien-enum (xkb-consumed-mode int) 327 (define-alien-routine xkb-state-key-get-consumed-mods2 xkb-mod-mask 328 (state (* xkb-state)) 330 (mode xkb-consumed-mode)) 332 (define-alien-routine xkb-state-key-get-consumed-mods xkb-mod-mask 333 (state (* xkb-state)) 336 (define-alien-routine xkb-state-mod-index-is-consumed2 int 337 (state (* xkb-state)) 340 (mode xkb-consumed-mode)) 342 (define-alien-routine xkb-state-mod-index-is-consumed int 343 (state (* xkb-state)) 347 (define-alien-routine xkb-state-mode-mask-remove-consumed xkb-mod-mask 348 (state (* xkb-state)) 352 (define-alien-routine xkb-state-layout-name-is-active int 353 (state (* xkb-state)) 355 (type xkb-state-component)) 357 (define-alien-routine xkb-state-layout-index-is-active int 358 (state (* xkb-state)) 359 (idx xkb-layout-index) 360 (type xkb-state-component)) 362 (define-alien-routine xkb-state-led-name-is-active int 363 (state (* xkb-state)) 366 (define-alien-routine xkb-state-led-index-is-active int 367 (state (* xkb-state)) 370 ;;; xkbcommon-compose.h 371 (define-alien-type xkb-compose-table (struct xkb-compose-table)) 373 (define-alien-type xkb-compose-state (struct xkb-compose-state)) 375 (define-alien-enum (xkb-compose-compile-flags unsigned-char) 378 (define-alien-enum (xkb-compose-format unsigned-char) 381 (define-alien-routine xkb-compose-table-new-from-locale (* xkb-compose-table) 382 (context (* xkb-context)) 384 (flags xkb-compose-compile-flags)) 386 (define-alien-routine xkb-compose-table-new-from-file (* xkb-compose-table) 389 (format xkb-compose-format) 390 (flags xkb-compose-compile-flags)) 392 (define-alien-routine xkb-compose-table-new-from-buffer (* xkb-compose-table) 393 (context (* xkb-context)) 397 (format xkb-compose-format) 398 (flags xkb-compose-compile-flags)) 400 (define-alien-routine xkb-compose-table-ref (* xkb-compose-table) 401 (table (* xkb-compose-table))) 403 (define-alien-routine xkb-compose-table-unref void 404 (table (* xkb-compose-table))) 406 (define-alien-type xkb-compose-table-entry (struct xkb-compose-table-entry)) 408 (define-alien-routine xkb-compose-table-entry-sequence (* xkb-keysym) 409 (entry (* xkb-compose-table-entry)) 410 (sequence-length (* size-t))) 412 (define-alien-routine xkb-compose-table-entry-keysym xkb-keysym 413 (entry (* xkb-compose-table-entry))) 415 (define-alien-routine xkb-compose-table-entry-utf8 (* char) 416 (entry (* xkb-compose-table-entry))) 418 (define-alien-type xkb-compose-table-iterator (struct xkb-compose-table-iterator)) 420 (define-alien-routine xkb-compose-table-iterator-new (* xkb-compose-table-iterator) 421 (table (* xkb-compose-table))) 423 (define-alien-routine xkb-compose-table-iterator-free void 424 (iter (* xkb-compose-table-iterator))) 426 (define-alien-routine xkb-compose-table-iterator-next (* xkb-compose-table-entry) 427 (iter (* xkb-compose-table-iterator))) 429 (define-alien-enum (xkb-compose-state-flags int) 432 (define-alien-routine xkb-compose-state-new (* xkb-compose-state) 433 (table (* xkb-compose-table)) 434 (flags xkb-compose-state-flags)) 436 (define-alien-routine xkb-compose-state-ref (* xkb-compose-state) 437 (state (* xkb-compose-state))) 439 (define-alien-routine xkb-compose-state-unref void 440 (state (* xkb-compose-state))) 442 (define-alien-routine xkb-compose-state-get-compose-table (* xkb-compose-table) 443 (state (* xkb-compose-state))) 445 (define-alien-enum (xkb-compose-status unsigned-char) 451 (define-alien-enum (xkb-compose-feed-result unsigned-char) 455 (define-alien-routine xkb-compose-state-feed xkb-compose-feed-result 456 (state (* xkb-compose-state)) 459 (define-alien-routine xkb-compose-state-reset void 460 (state (* xkb-compose-state))) 462 (define-alien-routine xkb-compose-state-get-status xkb-compose-status 463 (state (* xkb-compose-state))) 465 (define-alien-routine xkb-compose-state-get-utf8 int 466 (state (* xkb-compose-state)) 470 (define-alien-routine xkb-compose-state-get-one-sym xkb-keysym 471 (state (* xkb-compose-state)))