यहां एक फ़ंक्शन है जो घुलनशील कैफ़ल को सिंगल कैपिटल में बदल देगा। मैंने मूल रूप से इसे जोड़ने का सुझाव दिया था post-self-insert-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
, जो मैच डेटा को बिल्कुल भी सेट नहीं करता है (यह ठीक है क्योंकि आपको इसकी आवश्यकता नहीं है या इसका उपयोग यहां नहीं किया गया है)।