如何在Emacs Lisp函数中等待事件?

Ant*_*nko 7 emacs elisp w3m

我正在尝试编写最简单的函数:向w3m浏览器发送查询,然后在网页上找到一个特定的位置:

(defun w3m-define-word (word)
  (interactive "sDefine: ")
  (progn (w3m-search "Dictionary" word)
         (set-window-start nil (search-forward "Search Results"))))
Run Code Online (Sandbox Code Playgroud)

这里的错误是w3m-search不要等到页面重新加载并set-window-start在旧页面上执行.然后页面重新加载并将光标放在缓冲区的开头.

(sleep-for ..)之间w3m-searchset-window-start帮助,但由于加载时间是任意的,它不是很方便.

我怎样才能重写这个函数,所以它会等到缓冲区重新加载,然后才能重新执行?

Ros*_*son 7

在elisp中实现此目的的方法是使用钩子.所以你需要看看w3m在加载页面时是否调用了一个钩子.如果是这样,那么你可以为那个做你想要的钩子注册一个钩子函数.

它看起来就像C-h v w3m-display-hook RET你在寻找.这是一个很好的例子.