2009-12-08 8 views
5

ich den Standard verwenden (shipped) Emacs C++ Modus, aber ich habe einen leichten Juckreiz, dass ich zerkratzt bin auf der Suche nach. Wie würde ich gehen, um die Typen innerhalb einer sizeof und wirft in C++ richtig hervorzuheben?Emacs C++ Modus: Hervorhebungen Casts und Sizeof

Zum Beispiel:

  1. ein gegossener

    Type * pointer = reinterpret_cast <Type *> (original);

  2. Sizeof

    std::cout << sizeof (Type) << "\n";

+0

was meinst du mit "richtig Hervorhebung"? Soll der Typname genauso hervorgehoben werden wie der Typname, wenn eine Variable deklariert wird, oder gibt es eine andere "richtige" Art, wie sie hervorgehoben werden soll? – Andrew

+0

Ich möchte, dass der Typname hervorgehoben wird, wie beim Deklarieren einer Variablen, ja. –

+0

Vorausgesetzt, in 'sizeof (X) 'ist es völlig kontextabhängig, ob X ein Typ oder eine Variable ist, wie genau soll es sein? –

Antwort

4

Fügen Sie diese Ausdrücke zu Ihrem .emacs oder bewerten sie mit M-:.

Sizeof (das ist die einfachere der beiden Fälle)

Die Regex beliebige Kombination hebt (durch den Klammerausdruck [...] angegeben, in Bezug auf Syntax finden Sie bitte die Anmerkung unten) von alphanumerischen Zeichen, Leerzeichen und Sternchen in Klammern und vorangestellt von sizeof.

(font-lock-add-keywords 'c++-mode 
    '(("\\<sizeof[[:space:]]*(\\([[:alnum:][:space:]*]+\\))" 
    1 font-lock-type-face t))) 

Die Zahl 1 Emacs nur markieren Sie den ersten Teilausdruck (von \\(...\\) markiert) erzählt font-lock-type-face das Gesicht verwendet wird; t bedeutet, dass alle vorherigen Hervorhebungen überschrieben werden.

Sie können die verfügbaren Flächen mit M-x customize group [RET] font-lock-faces [RET] sehen und ändern.

C++ Casts

Ich bin nicht sicher, welche Type-Name Sie hervorgehoben werden soll – die “ Original ” oder die man in werfen. Diese Textmarker Marken beide:

(font-lock-add-keywords 'c++-mode 
    '(("\\<[[:alnum:]]+_cast[[:space:]]*<\\([[:alnum:][:space:]*]+\\)>[[:space:]]*(\\([[:alnum:][:space:]*]+\\))" 
    (1 font-lock-type-face t) 
    (2 font-lock-type-face t)))) 

Wieder ‚1 and 2` die entsprechenden Teilausdrücke wählen.

Hinweis: Die Regexe für die Typnamen stimmen nicht perfekt mit der C++ - Syntax überein. Zum Beispiel wird Emacs gerne Unsinn wie sizeof(int * 32) hervorheben.

Auch meine Lösung nicht berücksichtigt nicht das Problem Pavel im Kommentar zu Ihrer Frage erwähnt; dass Sie auch sizeof für Variablen verwenden könnten, die eine andere Hervorhebung benötigen würden. Ich denke nicht, dass dies möglich ist, kurz davor, einen vollständigen C-Parser in den Font-Lock-Code zu implementieren.