iflipb 20170205.200(in MELPA)
interactively flip between recently visited buffers

概要

iflipb.el は、ワンタッチで
バッファを切り替えるEmacs Lispです。

直前・直後のバッファに切り替えるのであれば、
Emacs24で導入された

  • M-x switch-to-next-buffer
  • M-x switch-to-prev-buffer

があります。

これらは単純に
buffer-listの順に切り替えているだけですが、

iflipbでは
Windows他GUIシステムのAlt+Tabのように
連続的に実行されたときの挙動を
エミュレートしています。

コマンドの対応関係は以下のようになります

  • M-x switch-to-next-bufferM-x iflipb-next-buffer
  • M-x switch-to-prev-bufferM-x iflipb-previous-buffer

iflipbコマンドにおいて、
一部のバッファは条件により無視されます。

  • C-uをつけないで実行したとき、*またはスペースから始まるバッファは無視される
  • C-uをつけて実行したとき、スペースから始まるバッファは無視される

switch-to-*-bufferと
iflipb-*-bufferの挙動の違いを示します。

以下の状況では共通しています。

                   切り替わるバッファ バッファリスト
------------------------------------------------------
初期状態:                             A B C D E
次のバッファ:      A [B] C D E        B A C D E
次のバッファ:      A B [C] D E        C A B D E
次のバッファ:      A B C [D] E        D A B C E

初期状態:                             A B C D E
次のバッファ:      A [B] C D E        B A C D E
次のバッファ:      A B [C] D E        C A B D E
前のバッファ:      A [B] C D E        B A C D E

ところが、ここから
両者の挙動が変わります。

switch-to-next-bufferを連続したとき、
ただ単にbuffer-listをたどるだけです。

                   切り替わるバッファ バッファリスト
------------------------------------------------------
初期状態:                             A B C D E
次のバッファ:      A [B] C D E        A B C D E
次のバッファ:      A B [C] D E        A B C D E
[Cで他の操作をする]:                  A B C D E
次のバッファ:      A B C [D] E        A B C D E

iflipb-next-bufferは以下の挙動になります。

iflipbユーザの意図はA→Cの切り替えで、
iflipb-next-bufferを2回連続で実行します。

そこでCで他の操作をした後に
Aに戻りたいときはそのまま
iflipb-next-bufferを実行できるようにします。

このことにより、ひとつのコマンドで
バッファの行き来ができます。

iflipb-previous-bufferは
行き過ぎたときに戻るために存在します。

                   切り替わるバッファ バッファリスト
------------------------------------------------------
初期状態:                             A B C D E
次のバッファ:      A [B] C D E        B A C D E
次のバッファ:      A B [C] D E        C A B D E
[Cで他の操作をする]:                  C A B D E
次のバッファ:      C [A] B D E        A C B D E

両者の違いは以下のコードで検証できます

以下のコードを実行する際、
ファイルを保存後に
全バッファが削除されますので
注意してください。

(save-some-buffers)
(defun make-buffer-list ()
  (dolist (b (cdr (buffer-list)))
    (ignore-errors (kill-buffer b)))
  (dolist (b '("B" "C" "D" "E"))
    (ignore-errors (kill-buffer b))
    (get-buffer-create b))
  (prog1 (buffer-list)
    (when (get-buffer "*scratch*")
      (switch-to-buffer "*scratch*")
      (rename-buffer "A"))))
(keydef "C-z" (message "%S" (make-buffer-list)))
(keydef "C-q" (message "%S" (buffer-list)))
(global-set-key (kbd "M-o") 'switch-to-next-buffer)
(global-set-key (kbd "M-O") 'switch-to-prev-buffer)
(global-set-key (kbd "M-h") 'iflipb-next-buffer)
(global-set-key (kbd "M-H") 'iflipb-previous-buffer)
(make-buffer-list)

バッファ切り替えは微差で
操作性は大きく変わります。

気に入ったならばぜひとも導入してみてください。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.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/")))

初めてiflipbを使う方は
以下のコマンドを実行します。

M-x package-install iflipb

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name iflipb

設定 170212090019.iflipb.el(以下のコードと同一)

(global-set-key (kbd "M-o") 'iflipb-next-buffer)
(global-set-key (kbd "M-O") 'iflipb-previous-buffer)

実行方法

$ wget http://rubikitch.com/f/170212090019.iflipb.el
$ emacs -Q -f package-initialize -l 170212090019.iflipb.el

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。