`diff-mode`で` show-trailing-whitespace`をオーバーライドする


9

私がしているshow-trailing-whitespaceに設定t私の中で、グローバル.emacsファイルと、これは私がしている時を除いて、一般的な問題ではないdiff-mode空白のコンテキスト行のための必須の末尾に空白があり、パッチを見ています。

1つの解決策は、関連するフックshow-trailing-whitespaceで単純にオフにdiff-modeすることですが、実際には、変更行の末尾の空白を引き続き表示したいのですが。たとえば、誤って末尾の空白を導入した場合や、それを削除する場合は問題ありませんが、それでもtrailing-whitespace顔に表示したいとします。空白のコンテキスト行は、diff形式自体に必要なため、末尾の空白として扱われたくないだけです。

これが私が得る現在の振る舞いの例です:

ここに画像の説明を入力してください

そして、これは私が望むものです:

ここに画像の説明を入力してください

次に別の例を示しますが、今回は実際に空白を追加しています。

ここに画像の説明を入力してください

ただし、でshow-trailing-whitespace完全に無効にするとdiff-mode、暗赤色はまったく表示されません。代わりに、これは私が望んでいるものです:

ここに画像の説明を入力してください

基本的に、これには、show-trailing-whitespaceスペースが1つしかないdiff行が特別であることを認識させる必要があると思います。


3
これをdiff-modeで完全に無効にするだけでは十分ではないのですか?末尾の空白を誤って追加または削除した場合、(ファイルの変更であるため)emacs構成に関係なく、diff-modeで強調表示されませんか?
マラバルバ2014

赤の空白フォントで末尾の空白を確認したい。他の人に役立つかもしれないので、差分モードで無効にするための回答を自由に含めてください。しかし、それは私が探していたものではありません。
b4hand 2014

1
diff-mode自体の強調表示面がwhite-space-modeの赤に似たものに設定されていれば十分でしょうか?
Malabarba 2014

回答:


1

1つの解決策は、差分モードで末尾の空白モードをオフにして、代わりに、表示したくない末尾の空白に対して独自のカスタムフォントロックルールを定義することです。

(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))

2

の値はshow-trailing-whitespace、設定時にローカルのバッファーになるため、関連するフックに設定するだけです。

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

ドキュメントでshow-trailing-whitespaceを確認するには:C-h v show-trailing-whitespace


2
しかし、それはバッファ全体のモードをオフにします。これは正確にb4handが避けたいことです。
Gilles 'SO-邪悪なことをやめなさい'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.