我怎样才能在 emacs 中获得‘真正’的交互式命令?

我怎样才能在 emacs 中获得‘真正’的交互式命令?

我将如何实现裸露的骨头每次按键时都会“重新评估”的函数?我的意思是按键;我希望模仿isearch和朋友的行为。

我将使用它来针对打开的 nxml 模式缓冲区以交互方式测试 XPath 表达式,使用类似于缓冲区缩小的方法。不过,就这个问题而言,仅仅一个调用message迷你缓冲区中任何内容的函数就绝对很棒了。

答案1

根据您的需要,您可以作弊并使用isearch-mode:它的第三个参数(OP-FUN)是在处理每个输入后调用的函数,它的第五个参数(WORD)可以是任何将 isearch 中输入的字符串转换为要在缓冲区中查找的正则表达式的函数。

例如:

(defun my-op-fun (string &optional lax)
  (let ((words (split-string string ":")))
    (mapconcat '(lambda (word) 
                  (concat "\\<" (regexp-quote word)))
               words "\\>.*")))

(defun my-isearch-beggining-of-line ()
  (interactive)
  (isearch-mode t t nil t 'my-op-fun))

如果您输入“foo”,它将查找以“foo”开头的单词;如果您输入“foo:bar”,它将查找“foo”单词后跟其他字符,然后以“bar”作为单词的开头。

您可能需要掌握一些正则表达式才能完成这项工作。

您也可以查看 isearch 的源代码来了解它是如何完成的。

相关内容