怎样定制 hydra 的退出键?

我想要取得这样的效果,F12进入 hydra,利用 hydra 选单做一些事情,然后 F12 退出。 也就是 用相同的按键进入和退出 hydra,请问这可以办到吗?

之所以这样问,是因为我设定 F12 调出 hydra,并且将系统的 Caps 按键映射为 F12。如果进入和退出是同一个按键的话,就不需要另外去关闭 Caps 的 LED 灯。

(defhydra your-hydra (...)
  ("<f12>" nil) ;; quit
  )

我试过这样做,但是不行,因为会再次调用 hydra。:foreign-keys 选项貌似也没有我需要的:

:foreign-keys

It decides what to do when a key is pressed that doesn’t belong to any head:

It can take the following values:

  • :foreign-keys nil (the default) means that the hydra state will stop and the foreign key will do whatever it was supposed to do if there was no hydra state.
  • :foreign-keys warn will not stop the hydra state, but instead will issue a warning without running the foreign key.
  • :foreign-keys run will not stop the hydra state, and try to run the foreign key.

你如果没有设置 ("<f12>" nil),按 F12 应该提示 <f12> is undefined。你可以用 hydra 官方提供的 hydra-zoom 试试。

你如果没有设置 ("<f12>" nil),按 F12 应该提示 is undefined。

###错误: F12 是全局按键,属于 :foreign-keys。对于 :foreign-keys,hydra 的默认行为就是关闭 hydra,执行这个 key 上所绑定的命令,这里即 (再次)调用 hydra

谢谢 @twlz0ne 我看了一下,hydra-zoom 是 wiki 上的一个例子?没有看出和我的问题有什么联系?当然也可以用 key-chord, 但是那样就打败了我用 Caps 的本意了。

Update:

在 hydra buffer 会优先调用 hydra map 的F12 上绑定的命令,global map 的 F12 上绑定的命令并不会被调用。感谢 @twlz0ne

当然没有什么直接的关联,只是你又不贴代码,又要和我争辩。所以就让你在一个简单的例子上去验证。

1 个赞

Sorry, 如有冒犯请海涵

这次真的是一个大大的乌龙,我刚才同样的方法试了多次都不成功,这次又试居然行了 :sweat:

抱歉耽误您的宝贵时间 @twlz0ne

能不能这样,省去g/l操作 (defhyadra hydra-zoom() “zoom” (“f12” nil) (if !当前是否开启了这个模式(从下面那个bar列表里 或者minor mode里) text-scale-increase text-scale-decrease)) (global-set-ket xxx’xxx)

没看懂。你是想要动态菜单,还是按 f12 执行一个 if 判断?如果是后者,普通函数不就可以吗,没必要 hydra

我没有遇到问题,也不用hydra。 只是看你的gif图片的时候 输入了两个按键,突发奇想,用一个按键可不可以,即可进又可退。

确实是一个按键。gif的左下角是按键。进入和退出都是F12

他可能是被 “in” “out” 这两个描述给误导了,以为是进入/退出 :smile:

请问你用的哪款录屏软件,还可以添加注释?

:grimacing:

您录制的视频都放哪里了??

我的系统是 macOS,录 gif 用的是 licecap,左下角 f12 按键提示是 Key Castr,字幕是在网上随便找的一个在线编辑器加的。

再一次不明白。。录好的 gif 就存在自己电脑上,然后回帖的时候点

上传。