- owdriver 20170401.612(in MELPA)
- Quickly perform various actions on other windows
概要
これは便利!
通常のEmacsでは3分割以上ウィンドウを分割していると、
一気に操作性が悪くなっていました。
というのは、 scroll-other-window などのother-window系コマンドは
すぐ隣のウィンドウを操作するものでしかないからです。
3分割されているとき、隣の隣のウィンドウを直接操作するコマンドはありません。
この問題は owdriver.el (Other Window Driver) が解決してくれます。
そのうち紹介しますが、連続するプレフィクスキーを
省略できる smartrep.el のうまい活用例です。
2分割であってもわざわざ C-x o (other-window) で操作するウィンドウを
選択する必要がないので、導入する価値は十分にあります。
プレフィクスキー( owdriver-prefix-key )をうまく設定しておけば、
other-window系コマンドは用済み になってしまいます。
それくらいやばい破壊力を持っています!!
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.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/")))
初めてowdriverを使う方は
以下のコマンドを実行します。
M-x package-install owdriver
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name owdriver
設定 140911110001.owdriver.el(以下のコードと同一)
(require 'owdriver) (global-unset-key (kbd "M-o")) (setq owdriver-prefix-key "M-o") (owdriver-config-default) ;;; これを入れておくことでM-o M-oで対象ウィンドウを選択できる (owdriver-add-keymap owdriver-prefix-key 'owdriver-next-window) (owdriver-mode 1)
実行方法
$ wget http://rubikitch.com/f/140911110001.owdriver.el $ emacs -Q -f package-initialize -l 140911110001.owdriver.el
M-oをsmartrepのプレフィクスキーにしておけば、
M-oを押した後は隣のウィンドウをあたかも
選択したかのように操作できます。
たとえばM-oの後にC-vやM-vでスクロールできるし、
C-f/C-b/C-n/C-pでカーソル移動などもできます。
3分割以上のときにM-oをたて続けに押せば、
対象ウィンドウを切り替えられます。
他ウィンドウの操作を終わるにはC-gかC-qです。
操作しているウィンドウを選択して終了するにはC-RETです。
コマンドを追加する
現時点での owdriver-config-default の定義はこうなっています。
(defun owdriver-config-default () "Do the recommended configuration." ;; Own command (owdriver-add-keymap "C-o" 'owdriver-next-window) (owdriver-add-keymap "C-S-o" 'owdriver-previous-window) (owdriver-add-keymap "<C-return>" 'owdriver-focus-window) (owdriver-add-keymap "C-q" 'owdriver-quit) ;; Basic command (owdriver-define-command scroll-up t) (owdriver-define-command scroll-up-command t) (owdriver-define-command scroll-down t) (owdriver-define-command scroll-down-command t) (owdriver-define-command scroll-left t (scroll-left 10 t)) (owdriver-define-command scroll-right t (scroll-right 10 t)) (owdriver-define-command next-line t) (owdriver-define-command previous-line t) (owdriver-define-command forward-char t) (owdriver-define-command forward-word t) (owdriver-define-command backward-char t) (owdriver-define-command backward-word t) (owdriver-define-command move-beginning-of-line t) (owdriver-define-command move-end-of-line t) (owdriver-define-command beginning-of-buffer t) (owdriver-define-command end-of-buffer t) (owdriver-define-command isearch-forward t (isearch-forward)) (owdriver-define-command isearch-backward t (isearch-backward)) (owdriver-define-command set-mark-command t) (owdriver-define-command kill-ring-save t (call-interactively 'kill-ring-save) (deactivate-mark)) ;; Third party command (owdriver-define-command pophint:do t (pophint:do :not-switch-window t)) (owdriver-define-command inertias-up t) (owdriver-define-command inertias-down t) )
owdriver-add-keymap でowdriverコマンドを追加します。
owdriver-define-command でowdriver用コマンドを定義します。
owdriver-define-command は、 owdriver-add-keymap の機能を含んでいます。
たとえば、
(owdriver-define-command scroll-up-command t)
は、scroll-up-command (C-v) のowdriver版
(owdriver-do-scroll-up-command) を定義しています。
第2引数にtを指定していることでキーマップに追加し、
M-o C-vと操作できるようになります。
ときたまowdriver版コマンドは、
元のコマンドを実行するだけではすまされないこともあります。
そのときのために、第3引数以降に任意のフォームを記述できるようになっています。
(owdriver-define-command kill-ring-save t (call-interactively 'kill-ring-save) (deactivate-mark))
は、owdriver版では
(progn (call-interactively 'kill-ring-save) (deactivate-mark))
を実行するように定義されます。
本サイト内の関連パッケージ
- win-switch - fast, dynamic bindings for window-switching/resizing
- switch-window - A *visual* way to choose a window to switch to
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。