browse-kill-ring.el の導入と使い方

GNU Emacs の便利な機能として yank, yank-pop があります。 この yank-pop は便利である反面ちょっと使い難いところもあるのですが、 browse-kill-ring を導入すればその不満を解消できることでしょう。

※ この page は ver.1.1 の browse-kill-ring.el を対象にしたものです。

目次

  1. browse-kill-ring.el って何?
  2. browse-kill-ring.el の導入
  3. browse-kill-ring.el の使い方
  4. browse-kill-ring.el の便利な使い方
  5. browse-kill-ring.el の私的設定

browse-kill-ring.el って何?

browse-kill-ring.el を使えば、視覚的に kill-ring の履歴を確認でき、 更にその中を行き来したり I-search して、その内容を yank することが出来ます。 つまり、 Mule2 時代にあった browse-yank.el に近いもので、 kill-summary.elyank-pop-summary.el と同様な存在と考えられます。

browse-yank.el は最近の Emacsen では不具合が…。

browse-kill-ring.el の導入

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 作業は終わりです。

browse-kill-ring.el の使い方

Emacs の起動中に \C-c k (または上記の \C-x \C-y のように独自に設定したもの) とすれば、 以下の様に kill-ring の内容が表示されます。 …もっと地味かもしれませんが。

※ 表示すべき内容がない場合、それなりの表示になります。 :-)

browse-kill-ring.png

この状態で h を入力すると、利用に関する簡単な説明が表示されます。 とりあえず、最低でも以下は覚えておきましょう。

RET: browse-kill-ring-insert-and-quit
カーソル位置の文字列を yank して browse-kill-ring を閉じる。
y, i: browse-kill-ring-insert
カーソル位置の文字列を yank する。
q: browse-kill-ring-quit
browse-kill-ring を閉じる。
n: browse-kill-ring-forward
1 つ前の履歴へカーソル移動する。
p: browse-kill-ring-previous
1 つ後の履歴へカーソル移動する。

browse-kill-ring.el の便利な使い方

browse-kill-ring.el には複数の variable や function が用意されています。 これらを活用してより快適な環境を構築しましょう。

browse-kill-ring-search-forward, browse-kill-ring-search-backward

browse-kill-ring を呼び出しているとき、 sr で kill-ring 内を isearch 出来ます。

browse-kill-ring-undo-other-window

browse-kill-ring を呼び出しているとき、U で元々の window に関して undo できます。 自分の必要としない item を yank した直後に利用すると良いでしょう。

browse-kill-ring-display-style

この variable を適切に set することにより、browse-kill-ring での item の表示方法を変更することが出来ます。

(setq browse-kill-ring-display-style 'one-line)

上の様に ~/.emacs に書いておくと、全ての item がそれぞれ 1 行で表示されるようになります。

browse-kill-ring-default-keybindings

これを利用すると、yank 直後でない時の \M-ybrowse-kill-ring を呼び出せるようになります。

(require 'browse-kill-ring)
(browse-kill-ring-default-keybindings)

上の様に ~/.emacs に書いておくと良いでしょう。

browse-kill-ring.el の私的設定

僕は以下を ~/.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 を適用したものを利用しています。 この場合、io, u を押すと…。 :-)

index.html