এখানে একটি ফাংশন যা ডিওবল ক্যাপিটালগুলিকে একক রাজধানীতে রূপান্তর করবে। আমি মূলত এটিতে যুক্ত করার পরামর্শ দিয়েছি 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
, যা ম্যাচের ডেটা একেবারেই সেট করে না (এটি আপনার প্রয়োজন হয় না বা এটি এখানে ব্যবহার না করার কারণে এটি ঠিক আছে)।