Skip to content

Latest commit

 

History

History
189 lines (142 loc) · 7.65 KB

1409111108.owdriver.org

File metadata and controls

189 lines (142 loc) · 7.65 KB

owdriver.el : 3分割以上でも大丈夫!other-window系のコマンドを蹴っ飛ばせ!ウィンドウを切り替えなしに操作するッ!!

[includeme file=”inc-package-table.php” name=”owdriver” where=”melpa”]

概要

<2015-02-21 Sat> win-switch.elも仲間に入れてください。

これは便利!

通常の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系コマンドは用済み になってしまいます。

それくらいやばい破壊力を持っています!!

switch-windowも併用するとなおよし

[includeme file=”inc-package-install.php” name=”owdriver” where=”melpa”]

概要

<2015-02-21 Sat> win-switch.elも仲間に入れてください。

これは便利!

通常の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系コマンドは用済み になってしまいます。

それくらいやばい破壊力を持っています!!

switch-windowも併用するとなおよし

(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))

を実行するように定義されます。 [includeme file=”inc-package-relate.php” name=”owdriver”]