【问题标题】:Strange behavior in occur-mode hook in EmacsEmacs 中发生模式挂钩的奇怪行为
【发布时间】:2014-01-04 09:40:24
【问题描述】:

我正在尝试调整 occur-mode 缓冲区窗口的大小以适应其缓冲区的内容。

更多信息请参见Resize occur window in Emacs

我添加了以下钩子:

(add-hook 'occur-mode-hook
       (lambda ()
         (save-selected-window
           (pop-to-buffer "*Occur*")
       (message-box "ok")
       (fit-window-to-buffer nil 10))))

然后我有以下缓冲窗口:

我现在执行(occur "test"),这给了我第一个

按下“确定”按钮后,我得到了

请注意,出现窗口在框架底部已缩小到单行高度。这显然不是我想要的..

我现在在“t.txt”缓冲区中再次输入(occur "test"),在消息框按“ok”后,我得到以下信息:

所以现在它突然完美地工作了。为什么这第一次不起作用?

【问题讨论】:

标签: emacs elisp


【解决方案1】:

这行得通:

(defadvice occur (after occur-advice activate)
  "Resize window."
  (save-selected-window
    (pop-to-buffer "*Occur*")
    (fit-window-to-buffer nil 10)))

【讨论】:

  • 谢谢!我收到错误 (void-function async-start).. 请注意,message-box 仅用于调试目的。即使我删除(message-box "ok") .. 行,问题仍然存在
  • 你需要获取异步包。
  • 我用你给出的代码重现了你的问题,我给出的代码没有引起问题。
  • 好的 :) 如果你删除(message-box "ok") 行,你还有问题吗?
  • 原因是occur-mode是在收集匹配之前在occur-1中调用的。
【解决方案2】:

IIUC,重要的部分是将fit-window-to-buffer 的调用保持在save-selected-window 内。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多