gpt4 book ai didi

用于检测事件缓冲区变化的 Emacs-lisp 钩子(Hook)?

转载 作者:行者123 更新时间:2023-12-04 02:14:29 32 4
gpt4 key购买 nike

我正在尝试在事件缓冲区发生更改时执行

  • 更改当前窗口中的缓冲区(例如 C-x <left> )。
  • 切换到另一个窗口(C-x o)。
  • 切换到另一帧。

  • 他们的钩子(Hook)适合检测这个吗?

    到目前为止我发现了什么

    浏览 Standard Hooks我找到了以下选项,但没有一个完全符合我的要求:
  • buffer-list-update-hook (1) 和 (2) 都调用。然而它是不合适的,因为它是在缓冲区更改之前运行的,而我想知道 current-buffer 是什么改变之后就是。
  • window-configuration-change-hook可用于检测当前窗口中显示的缓冲区的变化,并根据需要在变化后运行。但是它不是为 M-x other-window 运行的。 .
  • mouse-leave-buffer-hook检测基于鼠标的窗口切换似乎是可行的,但它经常被调用(对我来说,用鼠标切换窗口时四次,切换前三次,切换后一次),这需要额外的逻辑来防止多次执行。
  • post-command-hook将是可行的,但有点笨拙,即使是小错误也可能会导致编辑器显着变慢。
  • 由于我的操作需要使用 with-selected-window ,它触发这些钩子(Hook),必须注意避免钩子(Hook)触发自身的无限循环。
  • 最佳答案

    从评论来看,这个问题的答案是 “不,没有这样的钩子(Hook)。”

    此外,我的问题中提到的一些钩子(Hook)也是由用户不可见的更改触发的,例如由于 with-current-buffer 引起的临时更改。和 with-selected-window .

    但是,使用 post-command-hook已证明对性能而言不是问题,因为所需的状态检查很便宜。

    选择

    可能很明显,但为了完整起见。

  • 将状态信息存储在全局变量、帧参数、窗口参数或缓冲区局部变量中,以最适用于用例的为准。在我的用例中,这个必要的唯一状态由 current-buffer 定义。 , current-window , 在一种情况下 line-beginning-position .*
  • post-command-hook ,检查状态是否改变,可能跳过
    即便如此,如果 this-commandself-insert-command .
  • 如果有,请执行预期的操作并更新存储的状态。


  • * line-number-at-pos不合适,因为它通过从 point-min 迭代缓冲区来计算行数至 point ,使其通常便宜,但不足以在每个键入字符后执行。

    关于用于检测事件缓冲区变化的 Emacs-lisp 钩子(Hook)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47456134/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com