在emacs中定义define-key的正确方法是什么

时间:2019-05-24 13:13:03

标签: macos emacs key-bindings spacemacs evil-mode

我正在尝试在spacemacs中使切换插入/普通模式无效。 我已经用下面的代码成功实现了这一点。但是我的Macbook Pro 2018 13'上的Caps-lock旁边的LED灯停止工作。所以我试图用脚本来切换大写锁定。

我正在使用karabiner元素将大写锁定重新映射到f13。当emacs记录f13时,它将状态更改为邪恶正常状态或邪恶插入状态。

问题开始了,当我想添加另一个要在按下f13 aka caps-lock ist时运行的命令。其(shell-command "/Users/atrumoram/setleds +caps")。这会打开或关闭大写锁定灯。我试图创建自己的函数defun。但是我真的无法使其协同工作。最后,我想要这样的东西。

这是使用Capslock邪恶地切换插入/普通模式的代码

  (define-key evil-insert-state-map (kbd "<f13>") 'evil-normal-state)
  (define-key evil-normal-state-map (kbd "<f13>") 'evil-insert-state)

最后,我想拥有这样的东西。

  (define-key evil-insert-state-map (kbd "<f13>") 'evil-normal-state (shell-command "/Users/atrumoram/setleds +caps"))
  (define-key evil-normal-state-map (kbd "<f13>") 'evil-insert-state (shell-command "/Users/atrumoram/setleds -caps"))

有人可以通过某种方式帮助我吗?期待您的想法。

1 个答案:

答案 0 :(得分:2)

一个键一次只能绑定到一个功能,因此,为了在您按下该键时发生两件事,您需要创建一个功能,使其“交互”,并将其绑定到您所需要的键上。想要。

此功能执行两个操作,一个接一个:

(defun my-evil-normal-state-and-set-caps-led ()
  (interactive)
  (evil-normal-state)
  (shell-command "/Users/atrumoram/setleds +caps"))

由于已将其声明为interactive函数,因此可以使用M-x my-evil-normal-state-and-set-caps-led对其进行测试。

那只是一个问题:

(define-key evil-insert-state-map (kbd "<f13>") 'my-evil-normal-state-and-set-caps-led)

反之亦然,切换到插入状态。