Substitua `show-trailing-whitespace` no` diff-mode`

9

Eu show-trailing-whitespaceconfigurei tglobalmente no meu .emacsarquivo, e isso geralmente não é um problema, exceto quando estou diff-modeolhando para um patch que possui espaço em branco à direita obrigatório para linhas de contexto em branco.

Uma solução seria simplesmente desligar show-trailing-whitespaceem diff-modealgum gancho relevante, mas na verdade eu gostaria que o espaço em branco à direita nas linhas de mudança ainda aparecesse. Por exemplo, se eu introduzi acidentalmente o espaço em branco à direita ou se o estou removendo, tudo bem e ainda quero que isso apareça na trailing-whitespacecara . Eu só não quero que as linhas de contexto em branco sejam tratadas como espaço em branco à direita, pois são necessárias para o próprio formato diff.

Aqui está um exemplo do comportamento atual que recebo:

insira a descrição da imagem aqui

E é isso que eu gostaria:

insira a descrição da imagem aqui

Aqui está outro exemplo, mas desta vez, com a adição de espaço em branco real :

insira a descrição da imagem aqui

No entanto, se eu desativar show-trailing-whitespacetotalmente diff-mode, não vejo vermelho escuro. Em vez disso, é isso que estou querendo:

insira a descrição da imagem aqui

Basicamente, acho que isso envolve show-trailing-whitespaceconscientizar que as linhas de diferenças com apenas um espaço são especiais.

b4hand
fonte
3
Você tem certeza de que apenas desativar isso totalmente no modo diff não é o que você deseja? Se você adicionou ou removeu espaço em branco acidentalmente, o modo diff não destacará isso independentemente da configuração do emacs (em virtude do fato de ser uma alteração no arquivo)?
Malabarba 25/09
Quero ver o espaço em branco à direita na fonte em branco do espaço em vermelho. Sinta-se à vontade para incluir uma resposta para desativar apenas no modo diff, pois isso pode ser útil para outras pessoas, mas não é exatamente isso que eu estava procurando.
precisa saber é
11
Seria satisfatório se o rosto de destaque do modo diff fosse definido como algo semelhante ao vermelho do modo espaço em branco?
Malabarba 25/09

Respostas:

1

Uma solução é desativar o modo de espaço em branco à direita no modo Dif. Em vez disso, defina suas próprias regras de bloqueio de fonte personalizadas para o espaço em branco à direita que você não deseja ver.

(defvar diff-trailing-whitespace-keywords
  '(("^[+-<>]\\(.*\\S \\)?\\(\\s +\\)$" (2 'trailing-whitespace t))))
(defun diff-mode-font-lock-add-trailing-whitespace ()
  (setq diff-font-lock-keywords-and-whitespace
    (append diff-font-lock-keywords
        diff-trailing-whitespace-keywords))
  (setcar diff-font-lock-defaults 'diff-font-lock-keywords-and-whitespace))
(defun turn-off-trailing-whitespace ()
  (setq show-trailing-whitespace nil))
(add-hook 'diff-mode-hook 'turn-off-trailing-whitespace)
(eval-after-load "diff-mode" '(diff-mode-font-lock-add-trailing-whitespace))
Gilles 'SO- parar de ser mau'
fonte
2

O valor de show-trailing-whitespacetorna-se buffer local quando definido, para que você possa configurá-lo apenas no gancho relevante:

(add-hook 'diff-mode-hook (lambda () (setq show-trailing-whitespace nil)))

Para verificar a documentação para-arrastando show-branco: C-h v show-trailing-whitespace.

aerique
fonte
2
Mas isso desativa o modo de todo o buffer, que é precisamente o que o b4hand deseja evitar.
Gilles 'SO- stop be evil'