识别哪个键盘具有来自 Emacs 内部的击键

Identifying which keyboard has a keystroke originated from from within Emacs

像许多开明的开发人员一样,我一天的大部分时间都在 Emacs 中度过。由于我的主计算机是连接到桌面键盘和显示器的笔记本电脑,因此我有两个略有不同的键盘。我想让一些键具有不同的行为,具体取决于它们来自哪个键盘。

例如,我的笔记本电脑在 F4F6 上有下一首曲目和上一首曲目键。我希望这些键映射到下一个缓冲区和上一个缓冲区,但只在笔记本电脑键盘上。连接桌面键盘时,这些功能已绑定到 <XF86Forward><XF86Back>

一种简单的方法是通过 lsusb 检查给定的键盘是否连接在包装函数中,但这似乎太麻烦了(如果 USB 设备花费太长时间,可能会造成一些延迟)回答)。

P 最后,我选择了:

; Useful for checking whether a given keyboard is present
(defun usb-device-connected-p (device) 
  (< 0 (length (cl-remove-if-not (lambda (x) (cl-search device x)) 
                    (split-string (shell-command-to-string "lsusb") "\n")))))

这样,在我的init.el中,我可以根据我目前连接的键盘设置状态标志:

(if (usb-device-connected-p "Microsoft Corp. Natural Ergonomic Keyboard")
    (progn (global-set-key (kbd "<XF86Forward>") 'next-buffer)
           (global-set-key (kbd "<XF86Back>") 'previous-buffer)
           (global-set-key (kbd "<XF86Favorites>") 'buffer-menu)
           (global-set-key (kbd "<XF86HomePage>") 'buffer-menu))
)