2009-04-16 5 views
4

Ich versuche, einen neuen Modus für Emacs zu schreiben, mit define-generic-mode. Ich habe ein paar Tutorials gefunden, die zeigen, wie man Schlüsselwörter (als Strings) hinzufügen kann, die dann hervorgehoben werden. Ist es möglich, dem define-generic-mode einen regulären Ausdruck zu geben, so dass er dann alles markieren kann, was diesem als Schlüsselwort entspricht?Gleichen Ausdruck als Schlüsselwort in define-generic-mode

Ich hätte gerne einen Modus, in dem alles mit einem Datum in der Form 15/01/09 in einer anderen Schriftart angezeigt wird (vorzugsweise unterstrichen, aber ich werde eine andere Farbe akzeptieren).

Irgendwelche Ideen?

Robin

Antwort

7

Hier ist ein Beispiel von define-generic-mode, die bis setzt die regexp haben alle Termine fontified ein eigenes Gesicht mit mit einigen Attributen als Beispiele gewählt:

(make-face 'my-date-face) 
(set-face-attribute 'my-date-face nil :underline t) 
(set-face-attribute 'my-date-face nil :family "times") 
(set-face-attribute 'my-date-face nil :slant 'normal) 
(set-face-attribute 'my-date-face nil :height '340) 

(define-generic-mode my-date-mode 
    nil 
    nil 
    '(("\\([0-9]+/[0-9]+/[0-9]+\\)" 
    (1 'my-date-face))) 
    nil 
    nil) 

Oh, und natürlich, den Modus von M-x my-date-mode. Dies kann automatisch über den Auto-Mode-Alist erfolgen (5. Argument zu define-generic-mode).

+0

Danke für die Antwort. Ich kann das nicht funktionieren sehen. Ich habe in den Code kopiert, und Eval-Puffer funktioniert gut, aber dann werden die richtigen Bits nicht unterstrichen. Irgendeine Idee, was das Problem ist? – robintw

+1

(Ungerade, mein erster Kommentar wurde verloren). Ich habe gerade den Code bearbeitet, um richtig zu arbeiten. Ich dachte, ich hätte das vorherige Formular getestet, aber es schlägt aus einem unbekannten Grund fehl. Diese Variante verwendet einen Unterausdruck in der Regexp (erfordert das '(1 'mein-Datum-Gesicht)'). Ich weiß nicht, warum das vorherige nicht funktioniert hat. –

+0

Danke - es funktioniert jetzt gut. :) – robintw

5

zum Beispiel unter Verwendung von font-lock-Add-Schlüsselwort, um FIXME, ERLEDIGEN und XXX als Warnung in Hauptmodi zu markieren:

(dolist (mode '(c-mode 
    java-mode 
    cperl-mode 
    html-mode-hook 
    css-mode-hook 
    emacs-lisp-mode)) 
      (font-lock-add-keywords mode 
      '(("\\(XXX\\|FIXME\\|TODO\\)" 
      1 font-lock-warning-face prepend)))) 
Verwandte Themen