Ganti `show-trailing-whitespace` dalam` diff-mode`

9

Saya telah show-trailing-whitespacemenetapkan untuk tsecara global dalam .emacsfile saya , dan ini umumnya tidak menjadi masalah kecuali ketika saya sedang diff-modemelihat sebuah tambalan yang memiliki spasi putih wajib untuk baris konteks kosong.

Salah satu solusinya adalah dengan cukup mematikan show-trailing-whitespacedi diff-modebeberapa kait yang relevan, tetapi sebenarnya saya ingin agar ruang putih di garis perubahan tetap muncul. Sebagai contoh, jika saya secara tidak sengaja memperkenalkan spasi putih atau jika saya menghapusnya, tidak apa-apa, dan saya masih ingin itu muncul di trailing-whitespacewajah . Saya hanya tidak ingin garis konteks kosong diperlakukan sebagai ruang putih tertinggal karena mereka diperlukan untuk format diff itu sendiri.

Berikut adalah contoh perilaku saat ini yang saya dapatkan:

masukkan deskripsi gambar di sini

Dan inilah yang saya inginkan:

masukkan deskripsi gambar di sini

Berikut contoh lain, tetapi kali ini, dengan penambahan spasi putih aktual :

masukkan deskripsi gambar di sini

Namun jika saya menonaktifkan show-trailing-whitespacesepenuhnya diff-mode, maka saya tidak akan melihat warna merah gelap sama sekali. Sebaliknya, inilah yang saya inginkan:

masukkan deskripsi gambar di sini

Pada dasarnya, saya pikir ini melibatkan show-trailing-whitespacepenyadaran bahwa garis-garis yang berbeda hanya dengan satu ruang adalah spesial.

B4 tangan
sumber
3
Apakah Anda yakin hanya menonaktifkan ini sepenuhnya dalam mode-diff bukan yang Anda inginkan? Jika Anda menambahkan atau menghapus spasi spasi secara tidak sengaja, tidak akankah mode berbeda menyorotnya terlepas dari konfigurasi emacs Anda (berdasarkan fakta bahwa itu adalah perubahan dalam file)?
Malabarba
Saya ingin melihat spasi spasi di font spasi putih merah. Merasa bebas untuk memasukkan jawaban untuk menonaktifkan hanya dalam mode-diff karena itu mungkin bermanfaat bagi orang lain, tapi itu bukan apa yang saya cari.
b4hand
1
Apakah akan memuaskan jika wajah penyorotan diff-mode diatur ke sesuatu yang mirip dengan red-white-space-mode?
Malabarba

Jawaban:

1

Salah satu solusinya adalah mematikan Trailing whitespace mode dalam Diff mode, dan alih-alih menentukan aturan kunci font khusus Anda untuk trailing whitespace yang tidak ingin Anda lihat.

(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 'SANGAT berhenti menjadi jahat'
sumber
2

Nilai show-trailing-whitespacemenjadi buffer lokal saat disetel sehingga Anda bisa mengaturnya di kait yang relevan:

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

Untuk memeriksa dokumentasi untuk acara-trailing spasi: C-h v show-trailing-whitespace.

aerique
sumber
2
Tapi itu mematikan mode untuk seluruh buffer, yang tepatnya ingin dihindari b4hand.
Gilles 'SO- stop being evil'