Ich habe eine andere Syntax, die für SQL-Schlüsselwörter in Zeichenfolgen (in Anführungszeichen) in VIM hervorgehoben wird. Es sieht aus wie das:
In Emacs mit PHP-Modus wird dann alles zwischen Anführungszeichen ( '
) von der Schriftsperre als Zeichenfolge betrachtet:
Wie Sie sehen können, ist das erste Beispiel mit anderen Eigenschaften der Schriftart (keine kursiven Schlüsselwörter) klarer. Die Schlüsselwörter sind viel einfacher zu unterscheiden.
Wenn ich in meine font face
Eigenschaften schaue :
(font-lock-string-face ((t (:foreground "#536991" :slant italic))))
Dann frage ich mich, wie ich feststellen könnte, dass ein anderes Gesicht in einem font-lock-string-face
angewendet werden sollte, wenn es mit den spezifischen Schlüsselwörtern übereinstimmt.
Jeder Vorschlag wäre dankbar.
font-lock
syntax-highlighting
highlighting
ReneFroger
quelle
quelle
Antworten:
Das folgende Elisp-Snippet sollte ausreichen. Die wichtigen Details sind:
t
für das MATCHER-Flag OVERRIDE überschreiben (siehe Dokument vonfont-lock-keywords
).php-sql-keyword-matcher
. Der Test für Zeichenfolgen erfolgt übersyntax-ppss
(siehe Dokument für diese Funktion).Beachten Sie, dass ich nur eine Anzeige der Klasse habe
color
. Also konnte ich die anderen Klassen nicht testen. Ich gehe davon aus, dass Sie eine andere Anzeigeklasse haben, da Zeichenfolgen in Ihrem Beispiel kursiv dargestellt werden. Wenn Sie nicht das erwartete Ergebnis erhalten, passen Sie das Gesicht anphp-sql-keyword-face
.Hinweis: Bitte fügen Sie nicht nur Bilder von Texten ein, die für die Rekonstruktion des Problems benötigt werden. Der ASCII-Text kann potenziellen Helfern die Rekonstruktion des Problems erleichtern. Für den Fall, dass jemand anderes eine bessere Lösung hat, füge ich hier die ASCII-Version des Textes ein:
Und hier ein Bild des Textes, wie er aussieht, wenn ich ihn im PHP-Modus in Emacs lade:
Bei der
color
Anzeigeklasse sind Zeichenfolgen nicht kursiv, sondern haben eine andere Farbe. Aus diesem Grund habe ich für SQL-Schlüsselwörter in Zeichenfolgen eine kursive Schrift ausgewählt .Die Kommentare weisen auf einige Schwierigkeiten mit dieser Antwort hin. Es wurde angegeben, dass die Lösung nicht mit der Standardschriftart funktioniert
Consolas
. Ich habe es gerade getestet und auf meinem System funktioniert es standardmäßig auch mit Consola-Schriftart:In der Hilfe für habe
font-lock-add-keywords
ich folgenden Text gefunden:Der erste Fall
FIXME
ist der interessante. Hier verwenden sieprepend
als Override-Flag.quelle
subexp-highlighter
Override-Flag auf true setzen muss. Aber ich sehe, du hast es schon getan(php-sql-keyword-matcher 0 php-sql-keyword-face t)
. Also habe ich Ihren Code in einer leeren Emacs-Konfiguration mit nur integriertem PHP-Modus kopiert, den Puffer ausgewertet und dann einen neuen Puffer mit dem ASCII-Text erstellt, den Sie sogar rekonstruiert haben! Trotz Ihrer ausführlichen, ausgezeichneten Erklärung sehe ich leider keinen kursiven oder anderen Text.php-sql-keyword-matcher
(ich habe sie hinzugefügt(interactive)
), wird außerdem eine Fehlermeldung angezeigt, sodass ich davon ausgehe, dass dies nicht für interaktive Anrufe vorgesehen ist. Nachdem ich Ihren Code ausgewertet und den ASCII-Text mit aktiviertem PHP-Modus in den Scratch-Puffer eingefügt habe, sehe ich keinen Unterschied zwischen SQL-Schlüsselwörtern und den restlichen Zeichenfolgen. Wenn Sie einen Screenshot mit Debugging-Informationen benötigen, würde ich gerne weitere Informationen hinzufügen, da mein Elisp-Wissen noch nicht ausreicht. Ich habe Ihre Hilfe in meinen Fällen sehr geschätzt und übrigens die besten Wünsche für 2016.jit-ock
ein Fehler aufgegeben wird.jit-lock
löst keine Fehler aus, sondern deaktiviert den Handler, der den Fehler verursacht, und fährt mit seiner Arbeit fort. Trotzdem hinterlässt es eine Fehlermeldung im Nachrichtenpuffer. Starten Sie also einen neuen Emacs, probieren Sie Ihre Sachen aus und beobachten Sie den Nachrichtenpuffer sehr genau. AFAIK Sie können diese Art von Fehlern nicht über den Debugger abfangen. Das Anhaltenjit-lock
bei einem Fehler kann verdrahtete Konsequenzen haben, wie z. B. Dead Lock. Ich gehe davon aus, dass es wieder eine fehlende Funktion gibt. Ich werde es noch einmal versuchen mit-Q
. Übrigens auch die besten Wünsche an Sie.emacs -Q
hier bei mir mit X11-Schnittstelle einwandfrei funktioniert. Ich werde es im Konsolenmodus erneut versuchen ...M-x php-mode
in der leeren Emacs-Konfiguration. Deshalb bin ich mit einer leeren Konfiguration weiter in den PHP-Modus eingestiegen.