นี่คือฟังก์ชั่นที่จะแปลง DOuble CApitals เป็น Single Capitals ฉันแนะนำให้เพิ่มลงไปpost-self-insert-hook
แต่ด้านล่างเป็นตัวเลือกสำหรับโหมดรองที่ได้รับการยกย่องเพื่อให้คุณเพิ่มลงใน hook นั้นเมื่อคุณต้องการจริงๆ:
(defun dcaps-to-scaps ()
"Convert word in DOuble CApitals to Single Capitals."
(interactive)
(and (= ?w (char-syntax (char-before)))
(save-excursion
(and (if (called-interactively-p)
(skip-syntax-backward "w")
(= -3 (skip-syntax-backward "w")))
(let (case-fold-search)
(looking-at "\\b[[:upper:]]\\{2\\}[[:lower:]]"))
(capitalize-word 1)))))
(add-hook 'post-self-insert-hook #'dcaps-to-scaps nil 'local)
และคำจำกัดความของโหมดรอง:
(define-minor-mode dubcaps-mode
"Toggle `dubcaps-mode'. Converts words in DOuble CApitals to
Single Capitals as you type."
:init-value nil
:lighter (" DC")
(if dubcaps-mode
(add-hook 'post-self-insert-hook #'dcaps-to-scaps nil 'local)
(remove-hook 'post-self-insert-hook #'dcaps-to-scaps 'local)))
สำหรับสิ่งที่มีค่าใช้เวอร์ชันนี้:
- ง่าย: เพียงเปิด / ปิดด้วยตนเองหรือในโหมดเบ็ด
- ไม่จำเป็นต้องเปลี่ยนแปลงการเชื่อมโยงคีย์ดังนั้นคุณจะไม่สูญเสียฟังก์ชันการทำงานอื่น ๆ
แม้ว่าคุณจะเพิ่มลงpost-self-insert-hook
ในค่าใช้จ่ายที่เกือบจะไม่มีอยู่อย่างน้อยตามมาตรฐานการเปรียบเทียบง่าย ๆ บนเครื่องของฉันนี่คือสิ่งที่ฉันได้รับจากการทำซ้ำ 10,000 รายการแต่ละรูปแบบเรียบง่ายอย่างน่าหัวเราะและdcaps-to-scaps
ฟังก์ชั่น:
(benchmark-run-compiled 10000 (+ 1 1)) ; => .001 to .003 -ish
(benchmark-run-compiled 10000 (dcaps-to-scaps)) ; => .003 to .006 -ish
ดังนั้นใช่มันช้ากว่าการเพิ่ม 1 + 1 แต่ในแง่สมบูรณ์คุณจะไม่สังเกตเห็น
looking-at-p
ซึ่งไม่ได้ตั้งค่าข้อมูลการแข่งขันเลย (ไม่เป็นไรเพราะคุณไม่ต้องการหรือใช้ที่นี่)