Ghi đè `show-trailing-whitespace` trong` diff-mode`


9

Tôi đã show-trailing-whitespacethiết lập ttoàn cầu trong .emacstệp của mình và điều này thường không phải là vấn đề ngoại trừ khi tôi đang diff-modexem một bản vá có khoảng trắng bắt buộc cho các dòng ngữ cảnh trống.

Một giải pháp sẽ đơn giản là tắt show-trailing-whitespacetrong diff-modemột số hook có liên quan, nhưng thực sự tôi muốn cho khoảng trắng ở các dòng thay đổi vẫn hiển thị. Ví dụ: nếu tôi vô tình giới thiệu dấu vết trắng hoặc nếu tôi xóa nó, điều đó không sao và tôi vẫn muốn điều đó xuất hiện trên trailing-whitespacekhuôn mặt . Tôi chỉ không muốn các dòng ngữ cảnh trống được coi là khoảng trắng theo sau vì chúng cần thiết cho định dạng diff.

Đây là một ví dụ về hành vi hiện tại mà tôi nhận được:

nhập mô tả hình ảnh ở đây

Và đây là những gì tôi muốn:

nhập mô tả hình ảnh ở đây

Đây là một ví dụ khác, nhưng lần này, với sự bổ sung khoảng trắng thực tế :

nhập mô tả hình ảnh ở đây

Tuy nhiên, nếu tôi vô hiệu hóa show-trailing-whitespacehoàn toàn diff-mode, thì tôi sẽ không thấy bất kỳ màu đỏ sẫm nào cả. Thay vào đó, đây là những gì tôi muốn:

nhập mô tả hình ảnh ở đây

Về cơ bản, tôi nghĩ rằng điều này liên quan đến việc show-trailing-whitespacenhận thức được rằng các dòng khác nhau chỉ với một không gian duy nhất là đặc biệt.


3
Bạn có chắc chắn chỉ vô hiệu hóa điều này hoàn toàn trong chế độ khác không phải là điều bạn muốn? Nếu bạn vô tình thêm hoặc xóa khoảng trắng theo dõi, sẽ không làm nổi bật chế độ diff mà bất kể cấu hình emacs của bạn (thực tế là đó là một thay đổi trong tệp)?
Malabarba

Tôi muốn xem khoảng trắng ở cuối phông chữ màu trắng. Vui lòng bao gồm một câu trả lời cho việc vô hiệu hóa chỉ trong chế độ khác vì điều đó có thể hữu ích cho người khác, nhưng đó không chính xác là những gì tôi đang tìm kiếm.
b4hand

1
Sẽ là thỏa đáng nếu khuôn mặt nổi bật của chế độ khác được đặt thành màu tương tự như màu đỏ của chế độ không gian trắng?
Malabarba

Câu trả lời:


1

Một giải pháp là tắt chế độ Trailing khoảng trắng trong chế độ Diff và thay vào đó xác định quy tắc khóa phông chữ tùy chỉnh của riêng bạn cho khoảng trắng theo dõi mà bạn không muốn thấy.

(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

Giá trị show-trailing-whitespacetrở thành bộ đệm cục bộ khi được đặt để bạn chỉ có thể đặt nó trong hook liên quan:

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

Để kiểm tra tài liệu cho show-trailing-khoảng trắng : C-h v show-trailing-whitespace.


2
Nhưng điều đó sẽ tắt chế độ cho toàn bộ bộ đệm, đó chính xác là điều mà b4hand muốn tránh.
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.