カーソル前の単語を次々に大文字(小文字・capitalize)にする
Ctrl+中指か薬指を使うキー操作が多いEmacsで指の負担を軽くする方法 - http://rubikitch.com/に移転しましたにて大文字の入力の話題が出てきた。
clmemo@aka: 大文字連続入力 |Emacs|はupcase-backward-wordを定義している。これを進化させて、連続して実行したら後ろの単語を次々とupcase|downcase|capitalizeするようにしてみた。
ついでに upcase-word 等を直接使うことがまったくといっていいほどないので electric-*-backward-word 系に置き換えておいた。
無変換をAltに割り当てることで親指Altを実現しているから、マーク→upcase-region等よりも指の負担を抑えられる。
;; http://www.emacswiki.org/emacs/DoubleKeyBinding (defvar seq-store-times 0) (defvar seq-start-point 0 "Stores location of pointer when sequence of calls of the same function was started. This variable is updated by `seq-times'") (defun seq-times (name &optional max) "Returns number of times command `name' was executed. If `max' is specified the counter will wrap around at the value of `max' never reaching it. It also updates `seq-start-point'." (if (eq last-command name) (if (= (setq seq-store-times (1+ seq-store-times)) max) (setq seq-store-times 0) seq-store-times) (setq seq-start-point (point) seq-store-times 0))) (defun electric-upcase-backward-word () (interactive) (upcase-word (- (1+ (seq-times 'electric-upcase-backward-word 10000))))) (defun electric-capitalize-backward-word () (interactive) (capitalize-word (- (1+ (seq-times 'electric-capitalize-backward-word 10000))))) (defun electric-downcase-backward-word () (interactive) (downcase-word (- (1+ (seq-times 'electric-downcase-backward-word 10000))))) (define-key esc-map "u" 'electric-upcase-backward-word) (define-key esc-map "c" 'electric-capitalize-backward-word) (define-key esc-map "l" 'electric-downcase-backward-word)