Ich habe einen Puffer, der Dokumentation für Ansible-Module zeigt. Dieser Puffer verfügt über einen eigenen Hauptmodus, der alle Standardfunktionen bereitstellt. Insbesondere wird der Puffer mit einer Schriftart versehen, um Inline-Markups, Optionen, Abschnitte usw. hervorzuheben. Insgesamt ist er ziemlich ähnlich M-x man
.
Am Ende der Dokumentation befinden sich normalerweise einige Codebeispiele in YAML. Ich möchte diese auch fontifizieren. Ich könnte natürlich meine eigenen Schlüsselwörter für die Schriftsperre für YAML hinzufügen, aber ich würde es vorziehen, die Schriftart des YAML-Modus wiederzuverwenden.
Wie kann ich das machen? Wie kann ich einen anderen Hauptmodus verwenden, um einen bestimmten Bereich eines Puffers zu fontifizieren?
Beachten Sie, dass YAML - Modus muss nicht sein aktiv in dieser Region. Der gesamte Puffer ist nur ein passiver Anzeigepuffer und nicht zum Bearbeiten vorgesehen. Ich brauche wirklich nur die Schrift, die erzeugt wird, als ob der YAML-Modus in dieser Region aktiv wäre.
Ich nehme an, ich könnte den Bereich des Puffers in einen temporären Puffer kopieren, den YAML-Modus aktivieren, den Puffer fontifizieren und alle Texteigenschaften kopieren. Funktioniert das? Wenn ja, wie kopiere ich Texteigenschaften und welche relevanten Eigenschaften müssen kopiert werden? Oder gibt es einen besseren Ansatz?
Antworten:
Ich bin vor kurzem auf ein ähnliches Problem gestoßen, ich wollte im Grunde Codeausschnitte in der Dokumentation, die ich aus einer anderen Quelle erhielt, fontifizieren. Ich bin dem Ansatz gefolgt, der gegen Ende Ihrer Antwort erwähnt wurde, und es hat für mich gut funktioniert. Die Funktion endete mit etwas wie der folgenden
Wie @Malabarba in Kommentaren hervorhob, funktioniert der oben beschriebene einfache Ansatz nicht, wenn der Zielpuffer den Schriftsperrmodus verwendet. Allerdings können wir font-Lock-Modus in dem Glauben verleiten , dass die Zeichenfolge bereits Schriftart , indem Sie die Texteigenschaft gesperrt sind
font-lock-face
zu demface
, (wir bekommenface
Objekt, wenn wir die Funktion oben verwenden) und Einstellung Text-Eigenschaftfontified
auft
. Die folgende Funktion verwendet eine Zeichenfolge, die von der obigen Funktion zurückgegeben wird, und führt die erforderliche Verarbeitung durch, damit die Zeichenfolge in Schrift eingefügt wird (dies stammt aus derorg-src-font-lock-fontify-block
Funktion von org-modeJetzt können Sie es wie folgt verwenden
quelle
sx.el
, aber es ist wichtig zu beachten, dass sie nur funktioniert, wenn der Zielpuffer den Font-Lock-Modus nicht verwendet.Library Narrow Indirect (
narrow-indirect
) kann hier Abhilfe schaffen - siehe Kopfkommentar. Es beruht auf:Beachten Sie, dass die Verengung standardmäßig deaktiviert ist, da sie als anfängerunfreundlich eingestuft wird (die Standardbindung lautet
C-x n n
). Sie können es aktivieren, indem Sie Folgendes in Ihre Init-Datei einfügen:Sie können sich auch meine Handarbeit
myfn-narrow-indirect
in meinem Conf ansehen .quelle
disabled
Eigenschaft nicht aus einem Befehl entfernen , um sie in Emacs Lisp aufzurufen. Dies betrifft nur die interaktive Verwendung.Ich würde vorschlagen, sich den org-src-font-lock-fontify-Block anzuschauen, der diese Funktionalität für org-mode-Quellblöcke bietet. Es scheint nur die relevanten Teile in einen anderen Puffer zu kopieren, den Hauptmodus dort zu aktivieren und dann den geschriebenen Text zurück zu kopieren. Hackish, aber es scheint zu funktionieren.
quelle