我将如何实现裸露的骨头每次按键时都会“重新评估”的函数?我的意思是按键;我希望模仿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 的源代码来了解它是如何完成的。