Pobierz krój czcionki pod kursorem w Emacsie


96

Opracowywałem własny, niestandardowy motyw kolorów i byłoby naprawdę przydatne, gdybym mógł uzyskać listę czcionek wpływających na tekst pod kursorem.

Coś w rodzaju polecenia show current scope z Textmate.

Oszczędziłoby mi to kłopotów związanych z dostosowywaniem twarzy Mx i przeglądaniem dostępnych opcji, zgadywaniem, która z nich wpływa na bieżące słowo, na którym jestem.

Jakieś pomysły?


Jeśli szukasz tej samej funkcji za pomocą kursora myszy (jeśli np. Nie możesz uzyskać dostępu dopoint danego tekstu), zobacz: emacs.stackexchange.com/a/35449/13444
Braham Snyder

Odpowiedzi:


42

Za what-facepomocą tego kodu możesz zdefiniować :

(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))))

Po tym,

M-x what-face

wydrukuje twarz znalezioną w bieżącym miejscu.

(Dzięki thedz za wskazanie, że what-facenie jest wbudowany.)


3
To ignoruje twarze ustawione jako właściwości tekstu. Jeśli włączysz hl-line-mode, zobaczysz tylko hl-linetwarz, a nie inne twarze. Rozważ gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c
Wilfred Hughes

2
Karl Fogel wskazał błąd w tym kodzie w osobnej odpowiedzi : komunikat wyjściowy mówi, że opisuje twarz przy posparametrze, ale odczyt twarzy jest faktycznie wykonywany (point)raczej na niż na pos.
Rory O'Kane

1
To nie działa, możesz zamiast tego użyć „Mx opisz-twarz”.
luochen1990

2
posnie jest funkcją; aby uczynić pracę fragment, należy wymienić (pos)z posna liniach 3 i 4
Cebola

173

what-cursor-position z argumentem przedrostkowym pokazuje między innymi twarz pod punktem.

Skrót klawiaturowy to Cu Cx =

Przykładowe dane wyjściowe (właściwość face jest pokazana w ostatnim akapicie):

             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
Który wywołuje what-cursor-position.
viam0Zah

hmmm, czasami wywołuje jaka-pozycja-kursora, czasami wyświetla listę właściwości bufora (łącznie z czcionką). Jeśli dostaję pierwsze zachowanie, przesuwanie kursora i powtarzanie wywołuje drugie.
davidA

2
Jestem bardzo szczęśliwy, że to znalazłem, z kilkoma nieznanymi kombinacjami poleceń i naciśnięć klawiszy, pokazałem, emacsjak mi się podobało i nie udało mi się to odzyskać podczas następnego restartu
Miserable Variable

2
Pokazuje nazwę czcionki w graficznym interfejsie użytkownika Emacsa. Na terminalu Emacs nie jest odpowiedzialny za ustawienie czcionki i dlatego takie informacje nie są dostępne, gdy robi się to C-u C-x =w Emacsie uruchomionym na terminalu, np emacs -nw file.txt.
Fernando Basso

68

Mx opisać twarz


5
Obejmuje to również fajny link umożliwiający natychmiastowe dostosowanie twarzy pod kursorem
dolzenko

2
To działa dobrze przez większość czasu, ale czasami z powodów, których nie mogę zrozumieć, czasami nie sugeruje twarzy, której szukam. Na przykład w eshellu, gdy występuje kolor ansi, mówi po prostu „domyślny”.
Samuel Edwin Ward

2
To pokazuje mi monit, w którym mogę coś wprowadzić. Co musiałbym wpisać, aby opisać czcionkę pod kursorem?
Zelphir Kaltstahl

1
Pomogło mi to w dostosowaniu czcionek blokowych kodu w trybie organizacji. @Zelphir, tekst przed podpowiedzią pokazywał twarz, przynajmniej w moim przypadku. Możesz po prostu uderzyć return. Na przykład mój wynik przeczytał Describe face (default ‘org-block-background’): .
Mallory-Erik

8

Trey jest tym, jaka twarz jest na dobrej drodze. Doprowadziło mnie to do e-maila na liście mailingowej, który zawierał:

(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, zapomniałem, że nie było w pakiecie z Emacsem. Czy mogę podać źródło w mojej odpowiedzi z podaniem źródła? :)
Trey Jackson

2

W kodzie „what-face” jest błąd: funkcja przyjmuje „pos” jako argument, ale potem nie używa go przy pobieraniu twarzy - zamiast tego używa „(point)”, mimo że wiadomość później podaje poz w przypadku „Brak twarzy w% d”.


2
Byłoby to lepiej umieszczone jako komentarz do tej odpowiedzi.
Adam Spiers

1
Nawet lepiej, gdyby miał poprawkę ... +1 za wykrycie go i tak
rath
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.