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?

thedz
źródło
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.)

Trey Jackson
źródło
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]
jlf
źródło
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

Yoo
źródło
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))))
thedz
źródło
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”.

Karl Fogel
źródło
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