2016-04-15 1 views
0

Im Emacs-Lisp-Modus möchte ich alle Funktionsaufrufe eine Farbe und alle zitierten Symbole eine andere Farbe markieren. Zum Beispiel, in (foo 1 2 'bar), foo sollte Farbe 1 hervorgehoben werden und 'bar sollte Farbe 2 markiert werden.Markieren Sie Funktionsaufrufe, aber nicht zuerst in der Emacs-Liste in Anführungszeichen

Ich konnte dies mit dem unten stehenden Code tun, jedoch markiert es auch das erste Symbol in einer Liste, wenn die Liste wird zitiert. In '(nil a b c) sollte z. B. nicht als Funktionsaufruf hervorgehoben werden, und alle Elemente in dieser Liste sollten als zitierte Symbole hervorgehoben werden (Farbe 2).

(defface font-lock-func-face 
    '((nil (:foreground "#6fc2ef")) 
     (t (:bold t :italic t))) 
    "Font Lock mode face used for function calls." 
    :group 'font-lock-highlighting-faces) 

(defface font-lock-quoted-face 
    '((nil (:foreground "#e1a3ee")) 
     (t (:bold t :italic t))) 
    "Font Lock mode face used for function calls." 
    :group 'font-lock-highlighting-faces) 

(font-lock-add-keywords 
'emacs-lisp-mode 
'(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>" 
    1 'font-lock-func-face))) 

(font-lock-add-keywords 
'emacs-lisp-mode 
'(("'[-a-zA-Z_][-a-zA-Z0-9_]*\\>" 0 'font-lock-quoted-face))) 

Es gibt auch ein Bild von dem, was ich hier bin auf der Suche: http://imgur.com/Iluku05

Antwort

1

Der erste Teil der Antwort: Das Paket lisp-extra-font-lock Highlights, unter anderem, Ausdrücke zitiert.

Es unterstreicht auch:

  • Variablen in den Parameterlisten von Funktionen und Variablen gebunden durch let, pcase usw. unterscheiden zwischen normalen lokalen Variablen und globalen durch eine defvar definierten Variablen durch verschiedene Farben.
  • Zurück zitierte Ausdrücke (und un-Highlights alle , - und ,@ -escaped Unterausdrücke)

Zum Beispiel: enter image description here

Der zweite Teil der Antwort:

Wenn Sie die Verwendung lisp-extra-font-lock Paket, Ihre Regel zum Hervorheben von Funktionen funktioniert so, wie Sie es gepostet haben, wenn Sie es als die letzte Regel hinzufügen, nachdem Sie das Paket aktiviert haben. Auf diese Weise wird kein anderes Highlight überschrieben:

(font-lock-add-keywords 
'emacs-lisp-mode 
'(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>" 
    1 'font-lock-func-face)) 
'append) ;; <-- Add after all other rules 
+0

danke, das ist genau das, was ich brauchte :) –

Verwandte Themen