识别哪个键盘具有来自 Emacs 内部的击键
Identifying which keyboard has a keystroke originated from from within Emacs
像许多开明的开发人员一样,我一天的大部分时间都在 Emacs 中度过。由于我的主计算机是连接到桌面键盘和显示器的笔记本电脑,因此我有两个略有不同的键盘。我想让一些键具有不同的行为,具体取决于它们来自哪个键盘。
例如,我的笔记本电脑在 F4
和 F6
上有下一首曲目和上一首曲目键。我希望这些键映射到下一个缓冲区和上一个缓冲区,但只在笔记本电脑键盘上。连接桌面键盘时,这些功能已绑定到 <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))
)
像许多开明的开发人员一样,我一天的大部分时间都在 Emacs 中度过。由于我的主计算机是连接到桌面键盘和显示器的笔记本电脑,因此我有两个略有不同的键盘。我想让一些键具有不同的行为,具体取决于它们来自哪个键盘。
例如,我的笔记本电脑在 F4
和 F6
上有下一首曲目和上一首曲目键。我希望这些键映射到下一个缓冲区和上一个缓冲区,但只在笔记本电脑键盘上。连接桌面键盘时,这些功能已绑定到 <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))
)