在 pyim/emacs-rime 里都有“探针/断言”函数来在特定的状态下自动切换到英文状态,省去手工切换的动作。
但是我在使用中偶然发现在打开 Hydra 菜单的时候不能自动切换到英文模式,有点儿影响体验。我一直以为 Hydra 激活时是一个 “button” 模式,看来不是这样。
试图搜索一下与 hydra 有关的 mode ,却一无所获,莫非 hydra 不是以一种特定 mode 的方式来实现的?查看官方文档和 google 搜索也都没有找到类似有一个单独的 mode 的描述,只是说明 defhydra 里会定义一些快捷键。但是注意到一个情况,就是 defhydra 会生成一个 keymap ,可是怎么使得这个 keymap 在需要的时候激活,不需要的时候关闭呢?
无奈英语太烂,实在找不到更详细的信息了,只好去查看代码,终于发现一个函数 hydra-set-transient-map
,它的说明是 Set KEYMAP to the highest priority.
也就 是把需要的 hydra 的 keymap 优先级提到最高,这样其对应的快捷键就生效了,退出时再 恢复到低级。这下明白了hydra 的实现方式。可是如何判断当前把 hydra keymap 提高到最 高优先级使得快捷键生效了呢?
只好继续看代码,在逐个搜索函数和变量的过程中,终于发现一个变量 hydra-curr-map
,其当前值是 nil ,描述是 The keymap of the current Hydra called.
,可以试一下。
试着写一个断言函数:
|
|
加载到 rime-disable-predicates
里试一下,果然有用。 ^_^
找到这个的过程好费劲,各种搜索无果,在群里多次提问也没有回答,不知是这问题太基础还是大家确实都不知道,加上看到找到的这个变量,感觉应该挺容易发现才对,现在自信心挺受打击,总觉得自己绕了很多弯路。
因此就假定也会有同学有我同样的情况吧,所以记录一下备查,也许有人用得着。