像许多开明的开发者一样,我将大部分时间都花在Emacs上。由于我的主计算机是连接到桌面键盘和显示器的笔记本电脑,我有两个略有不同的键盘。我想让一些按键具有不同的行为,具体取决于它们来自哪个键盘。
例如,我的笔记本电脑在F4
和F6
上有下一首曲目和上一首曲目。我希望这些键映射到下一个缓冲区和前一个缓冲区,但只能在笔记本电脑键盘上。连接桌面键盘后,这些功能已绑定到<XF86Forward>
和<XF86Back>
。
一种简单的方法是检查lsusb
是否在包装函数中附加了给定的键盘,但这看起来太麻烦了(如果USB设备需要很长时间才能回答,可能会引入一些延迟)
答案 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))
)