Это, кажется, ошибка в CLX, независимо влияющая на McCLIM и stumpwm.
Например, я тестирую разницу между
setxkbmap -layout us
(QUERTY) и
setxkbmap -layout fr
(AZERTY). Выполнение этих команд не влияет ни на панель ввода stumpwm, ни на Climacs. Ошибка по умолчанию остается в силе.
X сервер отправляет коды ключей в приложения. Приложения могут интерпретировать эти коды ключей, используя таблицу раскладок, которую они могут запрашивать с сервера.
Похоже, что в CLX ключевой код для преобразования ключей выполняется функцией keycode->keysym
, определенной в translate.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. CAVEAT: Я не утверждаю, что это ничего не сломает.
NB: Если вы пытаетесь запустить команду оболочки из панели ввода stumpwm с использованием французского макета, помните об этом! позиционируется на /.
Я использовал это исправление в течение нескольких дней - он, кажется, ничего не сломал. –