- easy-repeat 20150516.148(in MELPA)
- Repeat easily
概要
たとえば、複数のウィンドウに分割されている状態で
C-x oを連続してウィンドウを選択するのは面倒です。
この問題に対処するために
ace-window.el(レビュー) とか
switch-window.el(レビュー) とか
もっと強力なwin-switch.el(レビュー) などがあります。
smartrep.elやhydra.el(比較レビュー) を使えば
プレフィクスキーを省略できるようになり、
C-x o o ...と操作できるようになります。
この easy-repeat.el は、smartrep/hydraよりもシンプルで、
指定されたコマンドの最後のキーで繰り返せるようにしています。
C-x oの後にoを押せば other-window を繰り返せます。
smartrep/hydraではo以外にも他のキーでも
プレフィクスキーを省略できるようになります。
機能的には縮小版ですが、コードはわずか40行です!
そのうち中核をなす部分は10行少々です。
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。
(package-initialize) (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "http://melpa.org/packages/") ("org" . "http://orgmode.org/elpa/")))
初めてeasy-repeatを使う方は
以下のコマンドを実行します。
M-x package-install easy-repeat
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name easy-repeat
メカニズム
(defun easy-repeat--repeat (orig-fun &rest args) (apply orig-fun args) (when (called-interactively-p 'interactive) (set-transient-map (let ((map (make-sparse-keymap))) (define-key map (vector last-command-event) #'repeat) map)))) (defun easy-repeat--add () (dolist (command easy-repeat-command-list) (advice-add command :around #'easy-repeat--repeat))) (defun easy-repeat--remove () (dolist (command easy-repeat-command-list) (advice-remove command #'easy-repeat--repeat)))
これらの部分を読んでみればわかるように
easy-repeat-command-list でリピート対象のコマンド各々に対して
Emacs 24.4で追加されたnadvice.el によるアドバイスがかけられています。
で、 set-transient-map 関数で一度きりのキーマップにて
repeat コマンド(C-x z)を指定しています。
この関数は set-temporary-overlay-map という名前でEmacs 24.3で導入され、
Emacs 24.4でset-transient-mapという名前に変更された新機能です。
この関数を使うことでrepeatや C-x C-i(indent-rigidly) や
C-x e(kmacro-end-or-call-macro) や
C-x C--(text-scale-adjust) などが
smartrep風味にプレフィクスキーを省略できるようになっています。
実におもしろい新機能ですね。
本サイト内の関連パッケージ
- win-switch - fast, dynamic bindings for window-switching/resizing
- hydra - Make bindings that stick around.
- ace-window - Quickly switch windows.
- window-numbering - Numbered window shortcuts
- switch-window - A *visual* way to choose a window to switch to
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。