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의 소스를 보고 그것이 어떻게 수행되는지 확인할 수도 있습니다.

관련 정보