[已转meow]如何让xah-fly-keys的按键定义在overlay上临时失效?

或者说一个mode的快捷键如何才能不被另一个mode接管?

dictionary-overlay.el里这么一段:

(defvar dictionary-overlay-map
  (let ((map (make-sparse-keymap)))
    (define-key map (kbd "d") #'dictionary-overlay-lookup)
    (define-key map (kbd "r") #'dictionary-overlay-refresh-buffer)
    (define-key map (kbd "p") #'dictionary-overlay-jump-prev-unknown-word)
    (define-key map (kbd "n") #'dictionary-overlay-jump-next-unknown-word)
    (define-key map (kbd "<") #'dictionary-overlay-jump-first-unknown-word)
    (define-key map (kbd ">") #'dictionary-overlay-jump-last-unknown-word)
    (define-key map (kbd "m") #'dictionary-overlay-mark-word-smart)
    (define-key map (kbd "M") #'dictionary-overlay-mark-word-smart-reversely)
    (define-key map (kbd "c") #'dictionary-overlay-modify-translation)
    (define-key map (kbd "<escape>") #'dictionary-overlay-jump-out-of-overlay)
    map)
  "Keymap automatically activated inside overlays.
You can re-bind the commands to any keys you prefer.")


同时在用xah-fly-keys,这些定义就失效了,比如按n 应该是dictionary-overlay-jump-next-unknown-word,但实际上是执行的xah-fly-keys 的 I-search

没仔细用过 xah-fly-keys ,但是如果你用的是meow , 你可以自定义,具体操作参见: meow-define-state,这样就换了另一个模式进行接替。

xah-fly-key应该有用来处理这种special-mode的motion-mode吧,你这里应该是因为使用了normal-mode自然把原有的案件全覆盖了

感谢ls的回复,我继续学习搜索中

研究失败,虽然能判断是不是在overlay上,但以此为条件分别调用dictionary-overlay和xah-fly-keys的按键定义失败了

已转向meow,之前用过一小段,当时好像是全英文的文档遇到些没理解的语句没坚持下去,这回问了下bing,它总结的还挺好的对比meow自己对五种模式的介绍来说,特别是类比了下,分享下:

三种主要的模式是:

NORMAL 模式:这个模式下,你可以使用各种快捷键来移动光标,选择文本,执行命令等。这个模式类似于 Vim 的普通模式。 INSERT 模式:这个模式下,你可以正常地输入文本。这个模式类似于 Emacs 的默认模式。 MOTION 模式:这个模式下,你可以使用更多的快捷键来移动光标,选择文本,执行命令等。这个模式类似于 Vim 的可视化和操作符待决模式。 两种子模式是:

KEYPAD 子模式:这个子模式是 NORMAL 模式的一个扩展,它可以让你使用空格作为前导键来输入更多的 meow 命令。 SPECIAL 子模式:这个子模式是 NORMAL 模式的一个扩展,它可以让你使用特殊按键(比如方向键或者退格键)来执行一些 meow 命令

2 个赞

我想起当时为什么了,应该是卡在定义 SPC n/p向下上翻页没搞懂怎么做

研究了一天的解决方案如下:

       '("n" . meow-page-down)                ;; 自定义翻页
       '("u" . meow-page-up)                  ;; 同上
       ;;'("n" . scroll-up-command)           ;; 另一种写法
       ;;'("u" . scroll-down-command)         ;; 虽然不知区别在哪

Bing 写的有点怪

Normal 是用在具有文本编辑的 buffer 的,比如代码,repl, 终端等等。

Motion 是用在不具有文本编辑的 buffer 的。唯一提供的功能是重映射一些按键,以满足一些不想用 n p 做上下移动的需求。

Insert 模式用于插入文本。

Keypad 模式用于以不按修饰键的方式执行命令。提倡用 emacs 和包自带的快捷键。

Beacon 模式用于批量修改。

1 个赞

感谢指正,除了

我还是没太懂是什么意思 :sweat_smile:

问什么 Bing 啊,楼上 @DogLooksGood 就是作者 :laughing: