Ich muss eine teilweise Antwort geben, weil dies zu kompliziert ist, um auf der Stelle zu verstehen, und ich schon blies mein Zeitbudget.
Face ist eine Rahmeneigenschaft. Ein Frame kann mehrere Puffer gleichzeitig anzeigen. Mode ist eine Puffereigenschaft. Sie fragen, wie Sie das Gesicht pro Modus variieren können. Kombiniert man all dies, scheint es, dass die Frage nicht eine einzige vollständig korrekte Antwort haben kann.
Sie können die gewünschte Antwort approximieren, wenn Sie annehmen, dass ein bestimmter Rahmen niemals mehr als einen Puffer anzeigen wird. Sie können dies tatsächlich mit etwas wie diesem erreichen, aber modifiziert, um spezielle Anzeige-Regexps und eine Reihe von Regexps zu verwenden, die mit Ihren Markdown-Modus-Puffer-Namen übereinstimmen.
(append special-display-buffer-names
'("*VC-log*"
"*Help*"
("*Completions*"
(height . 25)
(font . "8x13"))))
Dies ist jedoch wahrscheinlich nicht das, was Sie wollen. Ihre Frage scheint die Gesichtseigenschaften eines einzelnen Frames zu ändern.
Unter der Annahme, dass ein Frame nie mehr als einen Puffer gleichzeitig anzeigt, können Sie versuchen, Switch-to-Buffer zu informieren. Aber das könnte nicht ausreichend niedrig sein und es könnte zu langsam sein. (Ungetestet)
(defadvice switch-to-buffer (after switch-to-buffer activate compile)
"change the frame's default face after switch-to-buffer"
(doSomethingToChangePropertiesOfDefaultFace))
Und jetzt meine eigentliche (unvollständige) Antwort ...
Eine bessere, wenn auch komplizierter Ansatz würde Abschlags-Modus anweisen, für alle Regionen ein neues Gesicht zu verwenden, die nicht bereits eine der integrierten Flächen zugewiesen. Sie können ein neues Gesicht mit copy-face erstellen und ihm interessante Eigenschaften mit set-face- * geben.
Ändern Sie die font-lock-defaults von markdown-mode so, dass die standardmäßige font-lock-fontify-regio-Funktion überschrieben wird, wie im Kommentarblock in Zeile 946 von font-lock.el beschrieben, der mit "Fontification functions" beginnt.Sie können sich wahrscheinlich eine sehr leicht modifizierte font-lock-default-fontify-Region verwenden, die unmittelbar nur einen zusätzlichen Schritt tut, nachdem es tut:
(unless font-lock-keywords-only
(font-lock-fontify-syntactically-region beg end loudly))
Der zusätzliche Schritt analysiert die Region ähnlich dem, was font-lock-fontify- Die syntaktische Region macht die Region in "interessante" Subregionen auf. Aber dieses Mal finden Sie Subregionen mit der Standardfläche und die Put-Text-Eigenschaft diese Subregionen für die neue Fläche, die Sie zuvor erstellt haben.
In diesem Sinne fühlt es sich an, als sollte es nur ein paar Zeilen elisp in Ihrer .emacs-Datei sein, plus eine Kopie von font-lock-default-fontify-region, die nur ein kleines diff vom Original hat (call one neue Funktion), plus eine Kopie von font-lock-fartify-syntactic-region und modifiziere sie, um deine Gebote zu erfüllen (der schwierigste Teil).
Eigentlich, wenn Sie "nach" font-lock-fartify-syntactic-Region beraten dann müssen Sie wahrscheinlich nicht einmal font-lock-defaults oder font-lock-default-fontify-region ändern.
Wenn es eine Variable gibt, die die Standardgesichter steuert, können Sie sie für den aktuellen Puffer nur in einem Hook lokalisieren, der beim Öffnen einer Datei mit Markdown aufgerufen wird. – jfs
Die Frage wird allgemein gestellt, dann wird ein spezifisches Beispiel gemacht und Antworten drehen sich um dieses spezifische Beispiel. Wenn Sie wirklich "** Emacs defaut font face per-mode ** festlegen müssen", siehe [Verwenden einer anderen Schriftart für jeden Hauptmodus - Emacs Stack Exchange] (http://emacs.stackexchange.com/questions/3038/ using-a-different-font-für-jeden-Haupt-Modus/3042 # 3042) –