uzumaki 20150119.1706(in MELPA)
A simple buffer cycler

本設定ではido-vertical-modeも使うのでも入れておきます。

M-x package-install ido-vertical-mode

概要

uzumaki.el は、同一メジャーモードのバッファを
ido インターフェースで即選択できるようにします。

他にもidoを使わずに直前直後のバッファに切り替えたり、
特定のバッファのみ・全バッファを切り替え対象にしたりも
できますが、それについては他のパッケージがやってくれます。

uzumaki-minor-mode を有効にすると、
uzumaki関連の他のコマンドがいくつか登録されますが、
あまり必要性を感じませんでした。

idoとくれば、やはりido-vertical-mode(レビュー)
ido-enable-flex-matching (あいまいマッチ)は
有効にしておかないと損です。

C-,に M-x uzumaki-ido-buffers-cycle-by-mode を割り当て、
さらにC-,を押すと次のバッファをidoで選択できるようになっています。

不具合こそありますが、設定で修正しているので
同じ言語の複数のソースコードを扱うときには
かなり便利に使えます。

インストール

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

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

M-x package-install uzumaki

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

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

不具合修正

現時点において、以下の不具合や不可解な仕様があったので
本設定ではアドバイスで修正しています。

  1. idoで選択しようとするとカレントバッファが選択されている
  2. なぜかバッファの選択順がアルファベット順になる

バッファの並び順は最近使ったバッファで並べられるべきであり、
それでこそ使いやすいものです。

それをなぜわざわざソートしているのか、僕には理解できません。

この修正にはnadvice.el(レビュー) を使っているので
Emacs24.4以降を使ってください。

設定 150122224053.uzumaki.1.el(以下のコードと同一)

;;; このときidoが使うwindowの高さは大きくした方がいい
(setq ido-max-window-height 0.75)
;;; あいまいマッチは入れておこう
(setq ido-enable-flex-matching t)
;; (ido-mode 'buffers)
(ido-vertical-mode 1)
(setq ido-vertical-define-keys 'C-n-and-C-p-only)

(require 'uzumaki)  ;minor-modeを使わないなら必要
;;; uzumaki-idoの表示をido-vertical-modeに合わせる
(setq uzumaki-ido-decorations ido-vertical-decorations)

;;; 不具合修正#1
(defun uzumaki-buffers-ordered-by-current--remove-current (&rest them)
  "なぜかカレントバッファが入っているので削除する"
  (cl-destructuring-bind (cur . rest) (apply them)
    (if (string= cur (buffer-name)) rest (cons cur rest))))
(advice-add 'uzumaki-buffers-ordered-by-current :around
            'uzumaki-buffers-ordered-by-current--remove-current)

;;; 不具合修正#2
(defun uzumaki-buffers--nosort (&rest them)
  "ってかさぁ、なんでわざわざbuffer-listをsortする必要あるわけ?"
  ;; sort関数を一時的に潰す
  (cl-letf (((symbol-function 'sort) (lambda (it ignore) it)))
    (apply them)))
(advice-add 'uzumaki-buffers :around 'uzumaki-buffers--nosort)

;;; C-, を何度か叩けば同じメジャーモードのバッファを選択できる
(global-set-key (kbd "C-,") 'uzumaki-ido-buffers-cycle-by-mode)
(defun ido-setup-hook--uzumaki ()
  (define-key ido-common-completion-map (kbd "C-,") 'ido-next-match)
  ;; 行きすぎたらC-M-,で戻る
  (define-key ido-common-completion-map (kbd "C-M-,") 'ido-prev-match))
(add-hook 'ido-setup-hook 'ido-setup-hook--uzumaki)

実行方法

$ wget http://rubikitch.com/f/150122224053.uzumaki.1.el
$ emacs -Q -f package-initialize -l 150122224053.uzumaki.1.el

20150122224819.png
Fig1: org anything helm subrの順に並んでる場合

20150122224833.png
Fig2: C-,でanythingを選択

20150122224840.png
Fig3: さらにC-,でhelmを選択 (この状態からC-M-,でanythingを選択)

20150122224856.png
Fig4: srとクエリ(あいまいマッチ)を入力するとidoで絞り込めて

20150122224907.png
Fig5: RETでバッファを選択!

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


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