2012-04-23 7 views
5

Was wäre ein guter Weg, Emacs dazu zu bringen, einen Ausdruck hervorzuheben, der Dinge wie ausgewogene Klammern enthalten könnte - z. so etwas wieemacs: Hervorhebung ausgewogener Ausdrücke (z. B. LaTeX-Tags)

\highlightthis{some \textit{text} here 
some more text 
done now} 

highlight-regex funktioniert gut für einfache Dinge, aber ich hatte echte Probleme eine emacs regex schreiben Zeilenumbrüche zu erkennen, und natürlich passt es bis zum ersten schließenden Klammer.

(als sekundäre Frage. Zeiger auf alle Pakete, die Emacs regex Syntax erweitern wäre sehr willkommen - ich damit ziemlich harte Zeit habe, und ich bin ziemlich vertraut mit regulären Ausdrücken in Perl)

bearbeiten: Für meinen speziellen Zweck (LaTeX-Tags in einem AUCTeX Puffer Hervorhebung), konnte ich dies durch Anpassung eines AUCTeX bestimmte Variable font-latex-user-keyword-classes zur Arbeit kommen, fügt hinzu, dass so etwas zu custom-set-variables in .emacs:

'(font-latex-user-keyword-classes (quote (("mycommands" (("highlightthis" "{")) (:slant italic :foreground "red") command)))) 

Eine allgemeinere Lösung wäre s bis aber nett sein zu müssen!

Antwort

1

Sie könnten Funktionen verwenden, die auf s-Ausdrücke wirken, um mit der Region zu arbeiten, die Sie hervorheben möchten, und eine der unter this question genannten Lösungen verwenden, um sie hervorzuheben. Hier

ist ein Beispiel:

(defun my/highlight-function() 
    (interactive) 
    (save-excursion 
    (goto-char (point-min)) 
    (search-forward "\highlightthis") 
    (let ((end (scan-sexps (point) 1))) 
     (add-text-properties (point) end '(comment t face highlight))))) 

EDIT: Hier ist ein Beispiel eine ähnliche Funktion mit Emacs' Standardschriftart Verriegelungssystem verwendet wird, wie in dem search-based fontification Abschnitt des emacs-Lisp-Handbuch erläuterte:

(defun my/highlight-function (bound) 
    (if (search-forward "\highlightthis" bound 'noerror) 
     (let ((begin (match-end 0)) 
      (end (scan-sexps (point) 1))) 
     (set-match-data (list begin end)) 
     t) 
    nil)) 
(add-hook 'LaTeX-mode-hook 
      (lambda() 
      (font-lock-add-keywords nil '(my/highlight-function)))) 
+0

Gute Idee, aber ich kann das noch nicht schaffen. Erstens scheint die Lösung aus der "Regionshervorhebung" für mich nichts zu tun. Das Ausführen der Anweisung (add-text-properties 1 10 ...) allein hebt die Symbole 1 bis 10 nicht hervor. Zweitens, selbst wenn ich es zum Laufen bringe, bin ich etwas besorgt, dass die Hervorhebung an diesem Ort in der Puffer. Es wäre auch schön, wenn dies automatisch ausgeführt werden könnte, wie andere Syntaxhervorhebungen ... – laxxy

+0

"Ich bin ein bisschen besorgt, dass die Hervorhebung an dieser Stelle im Puffer hängen bleiben würde." Es ist nicht der Fall: Text Eigenschaften bleiben mit ihrem Text verknüpft, nicht mit bestimmten Positionen im Puffer. – Francesco

+0

für Sie zwei andere Anliegen, ich denke, die [Suche-basierte Fonifizierung] (http://www.gnu.org/software/emacs/manual/html_node/elisp/Search_002dased-Fontification.html#Search_002dasased-Fontification) Abschnitt der elisp Handbuch sollte Ihnen helfen. Sie könnten der 'font-lock-keywords' -Variable ein' function'-Element hinzufügen. – Francesco

Verwandte Themen