Holen Sie sich Schriftart unter den Cursor in Emacs


96

Ich habe mein eigenes benutzerdefiniertes Farbthema entwickelt, und es wäre sehr nützlich, wenn ich eine Liste von Schriftarten erhalten könnte, die sich auf den Text unter dem Cursor auswirken.

So etwas wie der Befehl show current scope von Textmate.

Das würde mir die Mühe ersparen, Mx-Anpassungen vorzunehmen und die verfügbaren Optionen zu durchsuchen und zu erraten, welche davon das aktuelle Wort beeinflusst, auf dem ich mich befinde.

Irgendwelche Ideen?


Wenn Sie mit dem Mauszeiger nach der gleichen Funktionalität suchen (wenn Sie beispielsweise nicht pointauf den betreffenden Text zugreifen können
Braham Snyder

Antworten:


42

Sie können what-facemit diesem Code definieren :

(defun what-face (pos)
  (interactive "d")
  (let ((face (or (get-char-property (pos) 'read-face-name)
                  (get-char-property (pos) 'face))))
    (if face (message "Face: %s" face) (message "No face at %d" pos))))

Nachdem,

M-x what-face

druckt das am aktuellen Punkt gefundene Gesicht.

(Danke an thedz für den Hinweis, dass what-facedas nicht eingebaut wurde.)


3
Dies ignoriert Gesichter, die als Texteigenschaften festgelegt wurden. Wenn diese Option aktiviert ist hl-line-mode, werden nur hl-linedie Gesichter angezeigt, nicht die anderen Gesichter. Betrachten Sie gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c
Wilfred Hughes

2
Karl Fogel wies in einer separaten Antwort auf einen Fehler in diesem Code hin : Die Ausgabemeldung besagt, dass das Gesicht am posParameter beschrieben wird, aber das Lesen des Gesichts erfolgt tatsächlich um (point)und nicht um pos.
Rory O'Kane

Dies funktioniert nicht, Sie können stattdessen "Mx description-face" verwenden.
Luochen 1990

1
posist keine Funktion; machen , um das Snippet Arbeit, Sie ersetzen sollte (pos)mit posauf den Linien 3 und 4
cebola

172

what-cursor-position mit einem Präfixargument wird unter anderem das Gesicht unter Punkt angezeigt.

Die Tastenkombination lautet Cu Cx =

Beispielausgabe (die Eigenschaft face wird im letzten Absatz angezeigt):

             position: 5356 of 25376 (21%), column: 4
            character: r (displayed as r) (codepoint 114, #o162, #x72)
    preferred charset: ascii (ASCII (ISO646 IRV))
code point in charset: 0x72
               syntax: w    which means: word
             category: .:Base, L:Left-to-right (strong), a:ASCII, l:Latin, r:Roman
          buffer code: #x72
            file code: #x72 (encoded by coding system undecided-unix)
              display: by this font (glyph code)
    nil:-apple-Monaco-medium-normal-normal-*-12-*-*-*-m-0-iso10646-1 (#x55)

Character code properties: customize what to show
  name: LATIN SMALL LETTER R
  general-category: Ll (Letter, Lowercase)
  decomposition: (114) ('r')

There are text properties here:
  face                 org-level-2
  fontified            t

[back]

11
Welches ruft auf what-cursor-position.
viam0Zah

hmmm, manchmal wird die Cursorposition aufgerufen, manchmal wird eine Liste der Puffereigenschaften (einschließlich Schriftart) angezeigt. Wenn ich das erstere Verhalten bekomme, bringt das Bewegen des Cursors und das Wiederholen das letztere hervor.
DavidA

2
Ich bin so froh, dass ich dies gefunden habe. Mit einigen unbekannten Kombinationen der Befehle und Tastenanschläge konnte ich emacsanzeigen, wie es mir gefallen hat und wie ich es bei meinem nächsten Neustart nicht zurückbekommen konnte
Miserable Variable

2
Es zeigt den Schriftnamen auf der Emacs-Benutzeroberfläche. Auf dem Terminal ist Emacs nicht für das Festlegen der Schriftart verantwortlich. Daher sind solche Informationen nicht verfügbar, wenn dies C-u C-x =in Emacs auf dem Terminal der Fall ist emacs -nw file.txt.
Fernando Basso

67

Mx beschreibe-Gesicht


5
Dies beinhaltet auch den netten Link, der es ermöglicht, das Gesicht unter dem Cursor sofort
anzupassen

2
Dies funktioniert die meiste Zeit gut, aber manchmal aus Gründen, die ich nicht herausfinden kann, deutet es manchmal nicht auf das Gesicht hin, das ich suche. Zum Beispiel in eshell, wenn es Ansi-Farbe gibt, heißt es nur "Standard".
Samuel Edwin Ward

2
Dies zeigt mir eine Eingabeaufforderung, wo ich etwas eingeben kann. Was muss ich eingeben, um die Schriftart unter dem Cursor zu beschreiben?
Zelphir Kaltstahl

1
Dies funktionierte für mich, um Codeblock-Schriftarten im Organisationsmodus anzupassen. @Zelphir, der Text vor der Eingabeaufforderung zeigte das Gesicht, zumindest in meinem Fall. Sie könnten nur schlagen return. Zum Beispiel mein Ergebnis gelesen Describe face (default ‘org-block-background’): .
Mallory-Erik

8

Treys Gesicht ist auf dem richtigen Weg. Es führte mich zu einer E-Mail auf einer Mailingliste, die Folgendes enthielt:

(defun what-face (pos)
    (interactive "d")
        (let ((face (or (get-char-property (point) 'read-face-name)
            (get-char-property (point) 'face))))
    (if face (message "Face: %s" face) (message "No face at %d" pos))))

Duh, ich habe vergessen, dass es nicht mit Emacs gebündelt war. Darf ich die Quelle in meine Antwort mit Zuschreibung aufnehmen? :)
Trey Jackson

2

Es gibt einen Fehler im "Was-Gesicht" -Code: Die Funktion verwendet "pos" als Argument, verwendet es dann aber nicht, wenn sie das Gesicht erhält - stattdessen verwendet sie "(Punkt)", obwohl die Nachricht später pos behauptet im Fall "Kein Gesicht bei% d".


2
Dies wäre besser als Kommentar zu dieser Antwort.
Adam Spires

1
Noch besser, wenn es eine Lösung gab ... +1 für das Erkennen
rath
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.