- 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
不具合修正
現時点において、以下の不具合や不可解な仕様があったので
本設定ではアドバイスで修正しています。
- idoで選択しようとするとカレントバッファが選択されている
- なぜかバッファの選択順がアルファベット順になる
バッファの並び順は最近使ったバッファで並べられるべきであり、
それでこそ使いやすいものです。
それをなぜわざわざソートしているのか、僕には理解できません。
この修正には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
Fig1: org anything helm subrの順に並んでる場合
Fig2: C-,でanythingを選択
Fig3: さらにC-,でhelmを選択 (この状態からC-M-,でanythingを選択)
Fig4: srとクエリ(あいまいマッチ)を入力するとidoで絞り込めて
Fig5: RETでバッファを選択!
本サイト内の関連パッケージ
- ace-jump-buffer - fast buffer switching extension to `avy'
- ido-vertical-mode - Makes ido-mode display vertically.
- quick-buffer-switch - Quick switch to file or dir buffers.
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。