如何在 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 的源代碼來了解它是如何完成的。

相關內容