1
使用键盘,我不能在使用数字键盘的Evaling窗口中输入数字(NumLock已打开)。通过hacking input.lisp,我发现了以下结果:不能使用键盘的数字键盘输入数字
#的读取键和选择将返回主键盘和数字键盘的不同值。
1 2 3 4 5 6 7 8 9
primary pad (10 . 16) (11 . 16) (12 . 16) (13 . 16) (14 . 16) (15 . 16) (16 . 16) (17 . 16) (18 . 16)
numpad (87 . 16) (88 . 16) (89 . 16) (83 . 16) (84 . 16) (85 . 16) (79 . 16) (80 . 16) (81 . 16)
它导致#'进程输入将numpad输入视为:错误。
(defun read-key-or-selection()
(loop for ev = (xlib:process-event *display* :handler #'read-key-or-selection-handle-event :timeout nil) do
(cond ((stringp ev)
(return ev))
((and (consp ev)
(eq (first ev) :key-press))
(return (cdr ev))))))
(defun read-key-or-selection-handle-event (&rest event-slots &key display event-key &allow-other-keys)
(declare (ignore display))
(case event-key
((or :key-release :key-press)
(apply 'input-handle-key-press-event event-slots))
(:selection-notify
(apply 'input-handle-selection-event event-slots))
(t nil)))
(defun input-handle-key-press-event (&rest event-slots &key event-key root code state &allow-other-keys)
(declare (ignore event-slots root))
(list* event-key code state))
从上面的代码看来,在#'xlib:process-event中存在问题。但我不知道如何解决它?
请大家指点一下,谢谢!
我对stumpwm一无所知,但在我看来,这是处理原始输入。你必须翻译它才能得到一个真实的角色。 – acelent
“小键盘”是什么意思?您是使用外部(例如USB)数字小键盘还是使用键盘右侧的数字小键盘? – acelent
除了stumpwm外,其他的应用程序在使用freebsd 9.0的时候工作得很好。这种翻译不应该由用户完成。 –