【问题标题】:What is proper way to define define-key in emacs在emacs中定义define-key的正确方法是什么
【发布时间】:2019-05-24 13:13:02
【问题描述】:

我正在尝试在 spacemacs 中切换插入/正常模式。 我已经通过那里的代码成功地实现了这一点。但是我的 macbook pro 2018 13' 上 Caps-lock 旁边的 LED 灯停止工作。所以我试图用脚本打开我的大写锁定。

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

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

这是使用大写锁定切换插入/正常模式的代码

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

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

【问题讨论】:

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


    【解决方案1】:

    一个键一次只能绑定一个功能,所以当你按下一个键时,为了让两件事发生,你需要创建一个函数,让它“交互”,然后把它绑定到你的键上想要。

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

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

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

    【讨论】:

    • 首先我要感谢您的帮助。但是有一些错误,Symbol's function definition is void: evil-insert-mode。你知道怎么解决吗?
    • 不确定,但我认为应该是evil-insert-state 而不是evil-insert-mode
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多