ขอขอบคุณที่ @MadhavanKumar defface
ผมมุ่งเน้นไปที่การแก้ปัญหาทั้งปวงที่อยู่บนพื้นฐานของ
ฉันรู้ว่าฉันไม่สามารถลบล้างสิ่งที่มีอยู่ได้defface
แต่ฉันสามารถสร้างสีพื้นหลังของตัวเองdefface
ได้ จากนั้นคำถามเดียวก็คือวิธีการใช้ defface ที่กำหนดเองของฉันแทนของเดิม
ฉันจะใช้ตัวอย่างเดียวกันของการเอาชนะstripe-hl-line
ใบหน้าเพื่อแก้ปัญหา stripe-buffer
ใบหน้านี้ถูกกำหนดไว้ในแพคเกจ
นี่คือขั้นตอน:
ขั้นตอน 1. กำหนดของคุณเอง defface
(defface my/stripe-hl-line
'((((background dark)) (:overline "gray" :underline "gray" :foreground "dodger blue"))
(t (:overline "gray" :underline "gray" :foreground "red")))
"Bold face for highlighting the current line in Hl-Line mode."
:group 'stripe-buffer)
ซึ่งจะทำให้สีพื้นหน้าของmy/stripe-hl-line
ใบหน้าเป็นสีฟ้าแก่สำหรับพื้นหลังสีเข้มและสีแดงสำหรับพื้นหลังสีอ่อน
ขั้นตอนที่ 2 สร้างฟังก์ชั่นเพื่อทำการแมปใบหน้าใหม่
face-remap-add-relative
ฟังก์ชั่นที่ใช้ในการแมปที่มีอยู่เพื่อใบหน้าใบหน้าใหม่ ในกรณีนี้ฉันทำการแมปstripe-hl-line
หน้าmy/stripe-hl-line
ใหม่อีกครั้ง
(defun my/stripe-hl-line-face-remap ()
(face-remap-add-relative 'stripe-hl-line 'my/stripe-hl-line))
ขั้นตอนที่ 3 ทำการแมปที่ตำแหน่งที่เหมาะสม
จากstripe-buffer
แหล่งที่มาฉันเห็นว่าhl-line
มีการแมปstripe-hl-line
ใบหน้าอีกครั้ง ดังนั้นเราต้องทำการแมปใหม่หลังจากการแมปใหม่นั้นเกิดขึ้น (ซึ่งอยู่ในstripe-listify-buffer
นิยามของฟังก์ชัน)
ดังนั้นเราจึงทำการแมปใหม่โดยการแนะนำให้stripe-listify-buffer
ใช้combinator:after
advice
(advice-add 'stripe-listify-buffer :after #'my/stripe-hl-line-face-remap)
ทำ!
ที่กล่าวมามันจะยอดเยี่ยมมากที่จะใช้บางอย่างเช่นset-face-attribute
ตั้งค่าใบหน้าโดยตรงตามความมืดของพื้นหลัง