символ описательного лица не находится под / недоступен курсором

15

Мне нравится использовать комбинацию describe-faceи customize-faceнастраивать внешний вид моей рабочей среды. Иногда этот рабочий процесс завершается сбоем, когда я хочу изменить лицо местоположения, которого я не могу достичь с помощью курсора; line-line, header-line, заголовки magit-blame и т. д. Большую часть времени я могу проследить и ошибочно найти путь к решению, но иногда я застреваю (например, я не знал, что строка заголовка существовала до вчерашнего дня) ,

Есть ли удобный способ описать лицо местоположения в кадре, которое недоступно курсору? Например, с помощью мыши.

remvee
источник

Ответы:

7

Я не знаю, как пользоваться мышью, но я часто находил, что мне проще всего запустить, list-faces-displayа затем просто я ищу то, что, вероятно, называется лицом, или визуально сканировать текст, который выглядит так же.

Джордон Биондо
источник
1
Это ответ, ИМХО. Дисплей WYSIWYG, и он дает вам прямой доступ к буферу настройки для данного лица и прямой доступ к полному описанию.
Дрю
Я согласен и изменил статус. Другое решение круто, но не удобно.
Remvee
9

Есть 4 региона, где текст может отображаться в Emacs, вот что вы можете сделать, чтобы проверить каждый из них.

  • Строка режима : см. Значение mode-line-format.
  • Строка заголовка : см. Значение header-line-format.
  • Буфер : если грань находится в области буфера, которую вы не можете найти, посмотрите значение (buffer-string).
  • Минибуфер : Если точка в данный момент находится в минибуфере, вы можете это сделать M-: (buffer-string), и это будет описывать содержимое минибуфера. Возможно, вам придется (setq enable-recursive-minibuffers to t)сначала.
  • Бахрома или Маржа : ни о чем я не знаю.

Эти методы предоставят вам все содержимое этих областей, поэтому может потребоваться некоторое чтение, чтобы действительно найти лицо, которое вы ищете, но оно, безусловно, будет там. Самое главное, он будет описывать даже те области, которые вы не можете достичь.
Например, скажем, я хочу знать, какое лицо используется в find-fileприглашении.

  1. Вызвать find-файл с помощью C-x C-f.
  2. Опишите минибуфер с M-: (buffer-string)

Это даст что-то вроде следующего результата, и прямо в конце будет лицо, которое я искал.

#("Find file: ~/" 0 11 (front-sticky t rear-nonsticky t field t read-only t point-entered minibuffer-avoid-prompt face minibuffer-prompt))
Malabarba
источник
Интересный! Я не знал (buffer-string). Но как мне вызвать его, пока я нахожусь в минибуфере, не выдавая «Команда попыталась использовать минибуфер, находясь в минибуфере»?
Remvee
@remvee Ах, установите переменную enable-recursive-минибуферы в t
Малабарба,
Как насчет края?
Тихон Джелвис
@TikhonJelvis о, хорошая мысль. Это я не знаю.
Малабарба
Я думаю, что также оставляет на полях?
Сигма
3

Оказывается, вы действительно можете использовать мышь (думаю, это именно то, что вы искали):

  ;; 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)
Брэм-Снайдер
источник
Кажется, это не работает для меня на моделине. Это работает для вас в любых местах, упомянутых в вопросе?
zck
У меня работает над magit-blameзаголовками, а также, как минимум, кандидатами на завершение минибуфера, приглашением минибуфера и всплывающими окнами компании. Тем не менее, это не работает для меня, когда я вызываю его в режиме или в строке заголовка: те дают мне (wrong-type-argument number-or-marker-p header-line)(или [...] mode-line, соответственно). Я думаю, что это могут быть особые случаи (наряду с краем и краем).
Брахам-Снайдер