我將如何實施裸露的骨頭每次按鍵時都會「重新評估」的功能?我的意思是按鍵鬆散;我希望效法我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 的源代碼來了解它是如何完成的。