znak opisujący twarz nie znajduje się / jest nieosiągalny przez kursor

15

Lubię używać kombinacji describe-facei customize-facedo dostosowywania wyglądu mojego środowiska pracy. Czasami ten przepływ pracy kończy się niepowodzeniem, gdy chcę zmienić oblicze lokalizacji, do której nie mogę dotrzeć kursorem; mode-line, header-line, magit-blame headers itp. Przez większość czasu mogę prześledzić drogę i znaleźć sposób na rozwiązanie problemu, ale czasami utknąłem (na przykład nie wiedziałem, że nagłówek istnieje do wczoraj) .

Czy istnieje wygodny sposób na opisanie powierzchni lokalizacji w ramce, do której kursor nie jest dostępny? Na przykład za pomocą myszy.

remvee
źródło

Odpowiedzi:

7

Nie wiem, jak korzystać z myszy, ale często uważam, że najłatwiej jest mi uruchomić, list-faces-displaya następnie po prostu wyszukać to, co najprawdopodobniej nazywa się twarz, lub wizualnie wyszukać tekst, który wygląda tak samo.

Jordon Biondo
źródło
1
Oto odpowiedź, IMHO. Wyświetlany jest WYSIWYG i daje bezpośredni dostęp do bufora Dostosuj dla danej twarzy i bezpośredni dostęp do pełnego opisu.
Drew
Zgadzam się i zmieniłem status. Drugie rozwiązanie jest fajne, ale nie wygodne.
remvee
9

Istnieją 4 regiony, w których tekst może być wyświetlany w Emacsie, oto co możesz zrobić, aby sprawdzić każdy z nich.

  • Linia trybu : patrz wartość mode-line-format.
  • Nagłówek : Zobacz wartość header-line-format.
  • Bufor : jeśli twarz znajduje się w obszarze bufora, do którego nie można dotrzeć, zobacz wartość (buffer-string).
  • Minibufor : Jeśli punkt znajduje się obecnie w minibuforze, możesz to zrobić M-: (buffer-string), a to opisuje zawartość minibufora. Być może będziesz musiał (setq enable-recursive-minibuffers to t)najpierw.
  • Frędzle lub margines : Brak, o którym wiem.

Te metody dadzą ci całą zawartość tych regionów, więc może trochę potrwać, aby znaleźć twarz, której szukasz, ale na pewno tam będzie. Co najważniejsze, opisuje nawet regiony, do których nie można dotrzeć.
Powiedzmy na przykład, że chcę wiedzieć, która twarz jest używana w find-filewierszu polecenia.

  1. Wywołaj plik find za pomocą C-x C-f.
  2. Opisz minibufor za pomocą M-: (buffer-string)

To da coś w rodzaju następującego wyniku, a na końcu jest twarz, której szukałem.

#("Find file: ~/" 0 11 (front-sticky t rear-nonsticky t field t read-only t point-entered minibuffer-avoid-prompt face minibuffer-prompt))
Malabarba
źródło
Ciekawy! Nie wiedziałem (buffer-string). Ale jak mogę je wywołać, gdy jestem w minibuforze, nie ujawniając polecenia „Próbowano użyć minibufora podczas przebywania w minibuforze”?
remvee
@remvee Ah, ustaw zmienną enable-recursive-
minibuffers
Co z grzywką?
Tikhon Jelvis
@TikhonJelvis oh, dobry punkt. Tego nie wiem.
Malabarba
Myślę, że to także pozostawia marginesy?
Sigma
3

Okazuje się, że rzeczywiście możesz użyć myszy (myślę, że może to być dokładnie to, czego szukałeś):

  ;; based on: /emacs//a/19585/13444
  (defun brds/describe-char-at-mouse-click (click-event)
    "`describe-char' at CLICK-EVENT's position.
CLICK-EVENT should be a mouse-click event."
    (interactive "e")
    (run-hooks 'mouse-leave-buffer-hook)
    (let ((pos (cadr (event-start click-event))))
      (describe-char pos)))

  ;; <d>escribe
  (global-set-key (kbd "C-c d <down-mouse-1>")
                  #'brds/describe-char-at-mouse-click)
braham-snyder
źródło
Wydaje się, że to nie działa w przypadku modeliny. Czy to działa dla Ciebie w miejscach wymienionych w pytaniu?
zck
Działa dla mnie w magit-blamenagłówkach, a także, co najmniej, kandydatów do ukończenia minibufora, monitu bufora i wyskakujących okienek firmy. To powiedziawszy, nie działa dla mnie, gdy wywołuję to w trybie lub linii nagłówka: te dają mi (wrong-type-argument number-or-marker-p header-line)(lub [...] mode-lineodpowiednio). Myślę, że mogą to być szczególnie szczególne przypadki (wraz z marginesem i marginesem).
braham-snyder