แทนที่ `show-trailing-whitespace` ใน` diff-mode '


9

ฉันได้show-trailing-whitespaceตั้งค่าไปtทั่วโลกใน.emacsไฟล์ของฉันและโดยทั่วไปจะไม่มีปัญหายกเว้นเมื่อฉันกำลังdiff-modeดูแพทช์ที่มีช่องว่างต่อท้ายสีขาวบังคับสำหรับบรรทัดบริบทว่าง

วิธีแก้ปัญหาอย่างหนึ่งก็คือการปิดshow-trailing-whitespaceในdiff-modeเบ็ดบางอันที่เกี่ยวข้อง แต่ที่จริงแล้วฉันต้องการลากพื้นที่สีขาวในบรรทัดการเปลี่ยนแปลงเพื่อยังคงปรากฏขึ้น ตัวอย่างเช่นถ้าผมเคยแนะนำตั้งใจลากพื้นที่สีขาวหรือถ้าฉันถอดมันออกมาว่าไม่เป็นไรและฉันยังคงต้องการที่จะแสดงขึ้นในtrailing-whitespaceใบหน้า ฉันไม่ต้องการให้บรรทัดบริบทว่างเปล่าถูกมองว่าเป็นพื้นที่สีขาวต่อท้ายเนื่องจากมันจำเป็นสำหรับรูปแบบ diff เอง

นี่คือตัวอย่างของพฤติกรรมปัจจุบันที่ฉันได้รับ:

ป้อนคำอธิบายรูปภาพที่นี่

และนี่คือสิ่งที่ฉันต้องการ:

ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นอีกตัวอย่างหนึ่ง แต่คราวนี้ด้วยการเพิ่มช่องว่างจริง :

ป้อนคำอธิบายรูปภาพที่นี่

อย่างไรก็ตามหากฉันปิดการใช้งานshow-trailing-whitespaceทั้งหมดdiff-modeฉันจะไม่เห็นสีแดงเข้มใด ๆ เลย นี่คือสิ่งที่ฉันต้องการ:

ป้อนคำอธิบายรูปภาพที่นี่

โดยพื้นฐานแล้วฉันคิดว่าสิ่งนี้เกี่ยวข้องกับการทำให้show-trailing-whitespaceทราบว่าเส้นที่แตกต่างด้วยพื้นที่เพียงอันเดียวนั้นพิเศษ


3
คุณแน่ใจหรือไม่ว่าการปิดใช้งานสิ่งนี้อย่างสิ้นเชิงในโหมด diff ไม่ใช่สิ่งที่คุณต้องการ? หากคุณเพิ่มหรือลบช่องว่างต่อท้ายโดยไม่ตั้งใจจะไม่ไฮไลต์โหมด diff ที่ไม่คำนึงถึงการกำหนดค่า emacs ของคุณ (เนื่องจากข้อเท็จจริงที่ว่ามันเป็นการเปลี่ยนแปลงในไฟล์)?
Malabarba

ฉันต้องการที่จะเห็นช่องว่างต่อท้ายในตัวอักษรสีขาวพื้นที่สีแดง อย่าลังเลที่จะใส่คำตอบสำหรับการปิดการใช้งานในโหมดต่าง ๆ ซึ่งอาจเป็นประโยชน์สำหรับคนอื่น ๆ แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ
b4hand

1
มันจะเป็นที่น่าพอใจหรือไม่หากใบหน้าที่ไฮไลต์ของ diff-mode ตั้งค่าเป็นสิ่งที่คล้ายกับสีแดงของ white-space-mode
Malabarba

คำตอบ:


1

ทางออกหนึ่งคือปิดโหมด Trailing whitespace ในโหมด Diff และแทนที่จะกำหนดกฎการล็อคแบบอักษรที่กำหนดเองของคุณเองสำหรับช่องว่างต่อท้ายที่คุณไม่ต้องการเห็น

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

C-h v show-trailing-whitespaceในการตรวจสอบเอกสารสำหรับแสดงต่อท้ายช่องว่าง:


2
แต่นั่นจะเป็นการปิดโหมดสำหรับบัฟเฟอร์ทั้งหมดซึ่งเป็นสิ่งที่ b4hand ต้องการหลีกเลี่ยงอย่างแน่นอน
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.