2012-05-20 3 views
3

대화식 기능을 정의하고 동시에 키에 바인딩하는 간단한 매크로를 작성했습니다. (그 이전의 내 질문과 관련) 강조 표시 없이는보기 싫은 유일한 점은 저를 귀찮게합니다.Emacs lisp 강조 표시

(define-and-bind-command foo "C-x £" (message "Hello world")) 

내가 define-and-bind-commandfoo을 강조합니다 : 이 같은 방법을했다. 음, define-and-bind-command을 강조 표시하려면 defmacro 주위에 래퍼를 사용할 수 있습니다. altho는 그렇게 예쁘지 않습니다. foo에 대해 전혀 알지 못합니다. require의 인수가 const face로 강조 표시되어 있기 때문에 가능하다는 것을 알고 있습니다.

아마도, 나는 바퀴를 발명하고 있으며, 더 많은 강조 표시가있는 가있는 또 다른 혀짤음 모드가 있습니까? 강조

답변

3

'정의 및 바인드-명령' '글꼴 잠금 추가 키워드'를 사용하여 매우 쉽게 달성 할 수 있으며, 사용이 될 것이다 변경할 수 물론

(defun my-elisp-mode-keywords() 
    (font-lock-add-keywords nil 
    '(
     ("\\<\\(define-and-bind-command\\)" . 'font-lock-keyword-face) 
    ) 
) 
) 

'font- lock-keyword-face '를 좋아하는 사람의 얼굴에 표시하거나 자신의 얼굴을 만들고 사용하십시오. 이미 사용 된 얼굴의 이름은 텍스트의 글꼴 고정 부분 위로 포인트 (커서)를 이동하고 '설명 -면'을 입력 한 다음 리턴하여 쉽게 찾을 수 있습니다.

Edit2가 : 아, 그리고 물론 당신이 될 것이다 elisp 모드, 일부 훅에 그 defun는 후크해야합니다

(add-hook 'emacs-lisp-mode-hook 'my-elisp-mode-keywords) 

regexp와를 사용하여 수행 할 수있는 foo는 부분을 강조. 불행히도 'define-and-bind-command'가 포함 된 regexp와 어떻게 일치하는지 모르겠지만 그 단어 만 강조 표시하기 때문에 아직 그 부분을 도와 드릴 수는 없습니다.
편집 : '정의 및 바인드 명령'과 foo 부분을 같은면에 강조 표시하지 않으려면 매우 쉽습니다. 하지만 서로 다른 얼굴을 갖기를 원합니까?
EDIT3 :이 ... 유래 전에 몇 가지 중괄호를 먹고,
Edit4을 내 코드를 수정 : 좋아, 난 단지 두 번째 부분 일치를위한 솔루션, 나는 광범위하게 그것을 테스트하지 않은 있지만 작동하는 것 같다. 나는 foo가 어떤 문자라도 포함 할 수 있도록 허용했지만 space (그리고 newline은 내가 생각하는 것)를 사용하면 그 이벤트를 a-zA-z0-9와 "-"로 제한 할 수 있기 때문에 원하는대로 변경할 수 있습니다. 단지 foo는 부분 일치에 대한 책임 코드

("\\bdefine-and-bind-command\s\\([^\s]*\\)" 1 'font-lock-function-name-face t) 

위의 함수에서 다른 글꼴 잠금 키워드 뒤의 줄이를 삽입하고 당신은 갈 수 있어요. 정규 표현식은 단어를 시작해야하는 ('\ b') 공백이 있어야하는 'define-and-bind-command'와 일치하며 공백이있을 때까지 모든 내용을 반환합니다 (글꼴 잠금).

희망이 도움이됩니다.

2

font-lock-add-keywords은 새로운 키워드를 적용 할 수있는 기호를 취할 수 있습니다.그렇게 할 수있다

(font-lock-add-keywords 
'emacs-lisp-mode 
'(("\\<\\(define-and-bind-command\\)" . 'font-lock-keyword-face))) 

단점은 함수와 후크를 사용하는 것에 비해 단점은 파생 된 모드에서는 작동하지 않는다는 것입니다. 즉, emacs-lisp-mode에서 파생 된 모드가있는 경우이 키워드를 상속하지 않습니다.

관련 문제