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

时间:2015-03-19 13:56:48

标签: emacs keyboard

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

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

一种简单的方法是检查lsusb是否在包装函数中附加了给定的键盘,但这看起来太麻烦了(如果USB设备需要很长时间才能回答,可能会引入一些延迟)

1 个答案:

答案 0 :(得分:1)

最后,我选择了:

; 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))
)