4

I'm using CLX+STUMPWM+McCLIM and when I modify the keyboard layout via "setxkbmap us -variant dvorak -option ctrl:nocaps" the keyboard layout fails to update in my CLIM applications, but updates correctly for everything else (thus, to use COLEMAK I run the appropriate shell command prior to starting up CLIM for the first time).

Thoughts on why this might be?

4

1 回答 1

1

这似乎是 CLX 中独立影响 McCLIM 和 stumpwm 的错误。

例如,我正在测试

setxkbmap -layout us

(查询)和

setxkbmap -layout fr

(阿诚)。运行这些命令既不会影响 stumpwm 的输入栏,也不会影响 Climacs。默认查询仍然有效。

X 服务器向应用程序发送密钥代码。应用程序可以使用他们可以从服务器请求的键映射表来解释这些键码。

似乎在 CLX 中,键码到键符的转换是由keycode->keysymtranslate.lisp 中定义的函数执行的。它调用它display-keyboard-mapping上面定义的函数:

(defun display-keyboard-mapping (display)
  (declare (type display display))
  (declare (clx-values (simple-array keysym (display-max-keycode keysyms-per-keycode))))
  (or (display-keysym-mapping display)
      (setf (display-keysym-mapping display) (keyboard-mapping display))))

显然,这个函数只请求一次键映射表并缓存它。将其更改为

(defun display-keyboard-mapping (display)
  (declare (type display display))
  (declare (clx-values (simple-array keysym (display-max-keycode keysyms-per-keycode))))
  (setf (display-keysym-mapping display) (keyboard-mapping display)))

修复了输入栏和 Climacs。警告:我不声称这不会破坏其他任何东西。

注意:如果尝试使用法语布局从 stumpwm 的输入栏运行 shell 命令,请注意!位于 / 上。

于 2016-03-22T19:01:43.707 回答