O caractere de descrição da face não está abaixo / inacessível pelo cursor

15

Gosto de usar uma combinação de describe-facee customize-faceajustar a aparência do meu ambiente de trabalho. Às vezes, esse fluxo de trabalho falha quando quero alterar a face de um local que não consigo alcançar com o cursor; modo-linha, cabeçalho-linha, cabeçalhos magit-culpos etc. Na maioria das vezes, posso rastrear e errar o caminho para uma solução, mas às vezes fico preso (não sabia que a linha de cabeçalho existia até ontem, por exemplo) .

Existe uma maneira conveniente de descrever a face de um local em um quadro que não pode ser acessado pelo cursor? Por meio de um mouse, por exemplo.

remvee
fonte

Respostas:

7

Não sei como usar o mouse, mas muitas vezes achei mais fácil executar list-faces-displaye apenas procurar o que o rosto provavelmente é chamado ou procurar visualmente o texto com a mesma aparência.

Jordon Biondo
fonte
1
Esta é a resposta, IMHO. A tela é WYSIWYG e fornece acesso direto ao buffer Personalizar para uma determinada face e acesso direto a uma descrição completa.
Desenhou
Eu concordo e mudei o status. A outra solução é legal, mas não é conveniente.
remvee
9

Existem 4 regiões em que o texto pode ser exibido no Emacs. Aqui está o que você pode fazer para inspecionar cada uma delas.

  • A linha de modo : veja o valor de mode-line-format.
  • A linha do cabeçalho : veja o valor de header-line-format.
  • Buffer : se o rosto estiver em uma região do buffer que você não pode alcançar, consulte o valor de (buffer-string).
  • Minibuffer : Se o ponto estiver atualmente no minibuffer, você pode fazê-lo M-: (buffer-string), e isso descreverá o conteúdo do minibuffer. Você pode precisar (setq enable-recursive-minibuffers to t)primeiro.
  • Franja ou margem : nada que eu saiba.

Esses métodos fornecerão todo o conteúdo dessas regiões; portanto, pode demorar algumas leituras para realmente encontrar o rosto que você está procurando, mas certamente estará lá. Mais importante ainda, descreverá até regiões que você não pode alcançar.
Por exemplo, digamos que eu queira saber qual rosto é usado no find-fileprompt.

  1. Invoque o arquivo de localização com C-x C-f.
  2. Descreva o minibuffer com M-: (buffer-string)

Isso dará algo como a seguinte saída, e bem ali no final está o rosto que eu estava procurando.

#("Find file: ~/" 0 11 (front-sticky t rear-nonsticky t field t read-only t point-entered minibuffer-avoid-prompt face minibuffer-prompt))
Malabarba
fonte
Interessante! Eu não sabia (buffer-string). Mas como invocá-lo enquanto estou no minibuffer, sem render "Comando tentou usar o minibuffer enquanto estava no minibuffer"?
Remvee
@remvee Ah, defina a variável enable-recursive-minibuffers como t
Malabarba
E a franja?
Tikhon Jelvis 26/09
@TikhonJelvis oh, bom ponto. Isso eu não sei.
Malabarba 26/09
Eu acho que isso também sai das margens?
Sigma
3

Acontece que você pode realmente usar o mouse (acho que isso pode ser exatamente o que você estava procurando):

  ;; 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
fonte
Isso não parece funcionar para mim na modelagem. Isso funciona para você em qualquer lugar mencionado na pergunta?
zck 12/09
Funciona para mim em magit-blamecabeçalhos, bem como, no mínimo, em candidatos de conclusão do minibuffer, no prompt do minibuffer e em pop-ups da empresa. Dito isto, também não está funcionando para mim quando eu chamo na linha de modo ou de cabeçalho: elas me dão (wrong-type-argument number-or-marker-p header-line)(ou [...] mode-line, respectivamente). Eu acho que esses podem ser casos particularmente especiais (junto com a margem e a margem).
braham-snyder 12/09