在 emacs 中定义定义键的正确方法是什么

What is proper way to define define-key in emacs

我正在尝试在 spacemacs 中切换 insert/normal 邪恶模式。 我已经用下面的代码成功地做到了这一点。但是我的 macbook pro 2018 13' 上 Caps-lock 旁边的 LED 灯停止工作。所以我想用脚本在我的大写锁定上切换 led。

我正在使用 karabiner-elements 将大写锁定重新映射到 f13。当 emacs 记录 f13 时,它会将状态更改为 evil-normal-state 或 evil-insert-state。

问题开始了,当我想在按下 f13 又名大写锁定时向 运行 添加另一个命令。它的 (shell-command "/Users/atrumoram/setleds +caps")。这会打开大写锁定灯或将其关闭。我试图制作自己的函数 defun。但我真的不能让它一起工作。最后我想要这样的东西。

这是使用大写锁定

在邪恶中切换 insert/normal 模式的代码
  (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"))

有什么办法可以帮助我吗?期待您的想法。

一个键一次只能绑定到一个函数,所以为了在您按下该键时发生两件事,您需要创建一个函数,使其成为 "interactive",然后绑定它到你想要的钥匙。

这个函数一个接一个地执行两个动作:

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

反之切换到插入状态