GNU Emacs の便利な機能として yank
, yank-pop
があります。
この yank-pop
は便利である反面ちょっと使い難いところもあるのですが、
browse-kill-ring
を導入すればその不満を解消できることでしょう。
※ この page は ver.1.1 の browse-kill-ring.el を対象にしたものです。
browse-kill-ring.el を使えば、視覚的に kill-ring の履歴を確認でき、
更にその中を行き来したり I-search して、その内容を yank
することが出来ます。
つまり、 Mule2 時代にあった
browse-yank.el に近いもので、
kill-summary.el や
yank-pop-summary.el と同様な存在と考えられます。
※ browse-yank.el は最近の Emacsen では不具合が…。
www.todesschaf.org から browse-kill-ring.el を入手して下さい。
これを byte-compile して load-path の通った場所 (site-lisp 以下など) に置き、 以下を ~/.emacs に書き加えて下さい。
(require 'browse-kill-ring) (global-set-key (kbd "C-c k") 'browse-kill-ring)
(野鳥の prefix で \C-c を使っている場合など) 上記の設定では不具合が出る場合、 以下のように key bind を自分好みに変えて下さい。
(require 'browse-kill-ring) (define-key ctl-x-map "\C-y" 'browse-kill-ring)
以上で install 作業は終わりです。
Emacs の起動中に \C-c k (または上記の \C-x \C-y のように独自に設定したもの) とすれば、 以下の様に kill-ring の内容が表示されます。 …もっと地味かもしれませんが。
※ 表示すべき内容がない場合、それなりの表示になります。 :-)
この状態で h を入力すると、利用に関する簡単な説明が表示されます。 とりあえず、最低でも以下は覚えておきましょう。
browse-kill-ring-insert-and-quit
browse-kill-ring
を閉じる。browse-kill-ring-insert
yank
する。browse-kill-ring-quit
browse-kill-ring-forward
browse-kill-ring-previous
browse-kill-ring.el には複数の variable や function が用意されています。 これらを活用してより快適な環境を構築しましょう。
browse-kill-ring
を呼び出しているとき、
s や r で kill-ring 内を isearch 出来ます。
browse-kill-ring
を呼び出しているとき、U で元々の window に関して undo
できます。
自分の必要としない item を yank
した直後に利用すると良いでしょう。
この variable を適切に set することにより、browse-kill-ring
での item の表示方法を変更することが出来ます。
(setq browse-kill-ring-display-style 'one-line)
上の様に ~/.emacs に書いておくと、全ての item がそれぞれ 1 行で表示されるようになります。
これを利用すると、yank
直後でない時の \M-y で browse-kill-ring
を呼び出せるようになります。
(require 'browse-kill-ring) (browse-kill-ring-default-keybindings)
上の様に ~/.emacs に書いておくと良いでしょう。
僕は以下を ~/.emacs.el に書いておきました。
この設定の場合、先程の画像のような見た目になります。
また、browse-kill-ring-default-keybindings
を呼び出さずにそれと同様な動作を提供し、
terminal 上では item をそれぞれ 1 行で表示するようになります。
;;; kill ring に関する設定 (setq kill-ring-max 100) ;;; browse-kill-ring に関する設定 (when (locate-library "browse-kill-ring") ;; elisp の呼び出しと key-bind (autoload 'browse-kill-ring "browse-kill-ring" "interactively insert items from kill-ring" t) (define-key ctl-x-map "\C-y" 'browse-kill-ring) (defadvice yank-pop (around kill-ring-browse-maybe (arg)) "If last action was not a yank, run `browse-kill-ring' instead." (interactive "p") (if (not (eq last-command 'yank)) (browse-kill-ring) (barf-if-buffer-read-only) ad-do-it)) (ad-activate 'yank-pop) ;; 各種動作 (setq browse-kill-ring-quit-action 'kill-and-delete-window) ;; 見た目の調整 (if (not window-system) (setq browse-kill-ring-display-style 'one-line browse-kill-ring-resize-window nil) (defface separator '((t (:foreground "slate gray" :bold t))) nil) (setq browse-kill-ring-separator "\n--separator------------------------------" browse-kill-ring-separator-face 'separator browse-kill-ring-highlight-current-entry t browse-kill-ring-highlight-inserted-item t browse-kill-ring-resize-window (cons (- (frame-height) (window-height) 1) window-min-height))))
僕は ver.1.2 に こんなヨワヨワ patch を適用したものを利用しています。 この場合、i や o, u を押すと…。 :-)