Common lisp CLX、stumpwm、McCLIM键盘布局在启动时锁定
我正在使用CLX+STUMPWM+McCLIM,当我通过“setxkbmap us-variant dvorak-option ctrl:nocaps”修改键盘布局时,键盘布局在我的CLIM应用程序中无法更新,但其他所有内容都会正确更新(因此,要使用COLEMAK,我在第一次启动CLIM之前运行相应的shell命令)Common lisp CLX、stumpwm、McCLIM键盘布局在启动时锁定,common-lisp,clim,stumpwm,Common Lisp,Clim,Stumpwm,我正在使用CLX+STUMPWM+McCLIM,当我通过“setxkbmap us-variant dvorak-option ctrl:nocaps”修改键盘布局时,键盘布局在我的CLIM应用程序中无法更新,但其他所有内容都会正确更新(因此,要使用COLEMAK,我在第一次启动CLIM之前运行相应的shell命令) 关于为什么会这样的想法?这似乎是CLX中的一个bug,它独立地影响着McCLIM和stumpwm 例如,我正在测试 setxkbmap -layout us (querty)和
关于为什么会这样的想法?这似乎是CLX中的一个bug,它独立地影响着McCLIM和stumpwm 例如,我正在测试
setxkbmap -layout us
(querty)和
(阿泽蒂)。运行这些命令既不会影响stumpwm的输入栏,也不会影响Climacs。默认的querty仍然有效
X服务器向应用程序发送密钥码。应用程序可以使用keymap表解释这些键码,它们可以从服务器请求该表
在CLX中,keycode到keysym的转换似乎是由translate.lisp中定义的keycode->keysym
函数执行的。它调用其正上方定义的显示键盘映射
函数:
(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))))
显然,这个函数只请求keymap表一次并缓存它。改成
(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命令,请注意!定位在/我已经使用此修复程序几天了-它似乎没有损坏任何东西。
(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)))