2012-11-01 206 views
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中存在問題。但我不知道如何解決它?

請大家指點一下,謝謝!

+1

我對stumpwm一無所知,但在我看來,這是處理原始輸入。你必須翻譯它才能得到一個真實的角色。 – acelent

+0

「小鍵盤」是什麼意思?您是使用外部(例如USB)數字小鍵盤還是使用鍵盤右側的數字小鍵盤? – acelent

+0

除了stumpwm外,其他的應用程序在使用freebsd 9.0的時候工作得很好。這種翻譯不應該由用戶完成。 –

回答