popup-kill-ring.el / Emacs の貼り付け機能を popup.el、pos-tip.el を利用して拡張する。

browse-kill-ring みたいなのを popup.el と pos-tip.el でやりたいなあと思って作ってみました。
貼り付けたい内容を pos-tip.el の pos-tip-show で詳細な内容を表示しながら、popup.el の popup-menu* で選択します。


必要物

前提として、popup.el と pos-tip.el が必要です。

popup-kill-ring.el 自体は、EmacsWiki に置いたので、そこからダウンロードして下さい。

設定

popup.el と pos-tip.el と popup-kill-ring.el を `load-path' の通ったディレクトリに置いて、以下のような内容を .emacs に足せば終わりです。

(require 'popup)
(require 'pos-tip)
(require 'popup-kill-ring)

(global-set-key "\M-y" 'popup-kill-ring)

popup-kill-ring へ割り当てるキーは好みに応じて変更して下さい。

機能

以下のスクリーンショットのように、popup-menu* を利用してメニューを表示し、pos-tip-show を利用して tooltip で選択した kill-ring の内容の詳細を表示しています。
最初の1項目については、pos-tip-show による詳細表示は表示されません。C-n や C-p で選択すると、pos-tip-show で詳細が表示されます。
選択して貼り付けたい内容が決まったらエンターなり、C-m なりで内容物がカレントバッファに貼り付けられます。

また、popup-menu* を使っているので、以下のように C-s キーで絞り込み検索を行う事もできます。
# 0.2.0 より isearch は、デフォルトで有効となっており、C-s でトグルする必要はありません。

browse-kill-ring と比較しての利点については、popup.el と pos-tip.el を利用する事で目線移動が少くなっている事、でしょうか。


なお、スクリーンショットは少し古いです。0.2.0 では、インデックスの数値は、左端に表示はされておらず、右端に(1)のような形で表示するようになっています。

カスタマイズ

0.1.0 より、以下のように `popup-kill-ring-interactive-insert' を t に設定する事で、選択項目を自動的に insert します。
ただし、isearch 後の最初の1つ(1番上の項目)については一度、C-n や C-p をしない限り insert されません。

(setq popup-kill-ring-interactive-insert t)

なお、C-g を押して popup-kill-ring のメニュー表示から quit しても挿入された文字列は消えないので、適宜 undo して下さい。
0.2.7 より、C-g を押した場合、挿入のキャンセルができるように、自動で挿入された文字列を消すようにしました。挿入の確定には C-m や enter を使って下さい。


0.2.0 より、`kill-ring' 内で3文字以下の文字列は候補として加えないようにしてあります。
これは、以下のように、変数 `popup-kill-ring-item-min-width' で制御できます。

(setq popup-kill-ring-item-min-width 15) ; 15 文字以下は切り捨て。


0.2.1 より、`kill-ring' 内で指定した文字列長以上の項目は、指定した文字列長までに切り捨てるという処理を指定できるようにしました。
`kill-ring' を大きく、項目にソースファイルなどの非常に巨大なものがいくつもある場合は、指定するといいやもしれません。
# 巨大な文字列がいくつも kill-ring にあると表示や項目の選択に時間がかかるようになってしまう。
デフォルトでは、`nil' となっており、切り捨てはいっさいしません。

(setq popup-kill-ring-item-size-max 2000) ; サイズが 2000 以上の項目については、2000 までに切り捨てる。


まあ、よければどうぞ、という感じで。

変更履歴

0.2.11

EmacsWiki で行われてた変更の取り込みや、defvarをdefcustomにするような、細かい点での変更をした。

0.2.10

(eq window-system 'x) の代わりに、(display-graphic-p)を使うようにした。

0.2.9

cl の代わりに cl-lib を使うようにした。

0.2.8
  • 変数 `popup-kill-ring-last-used-move-first'を 追加した。この変数が t だと、最後に選択したアイテムが `kill-ring' の最初に来るようになる。デフォルトは、t となる。
0.2.7
  • `popup-kill-ring-interactive-insert' が `t' のとき、C-g で quit すると自動で挿入されていた文字列を消去するようにした。
0.2.6
  • `popup-kill-ring' の実行が終わったら、`pos-tip-hide' を必ず実行するようにし、確実に tooltip を消すようにした。
0.2.5
  • ポイントがミニバッファにあった場合、通常の yank コマンドとして実行されるようにした。
0.2.4
  • `popup-kill-ring-interactive-insert' が `t' のときに文字列の挿入の度に実行する recenter の実行するタイミングを修正した。
0.2.3
  • `popup-kill-ring-interactive-insert-face' を追加。
    • `popup-kill-ring-interactive-insert' が `t' のとき、この face で挿入部分がハイライトされるようにした。
0.2.1
  • `popup-kill-ring-item-size-max' を追加。
    • この変数に数値を指定する事で、表示する kill-ring の各項目の長さをこの大きさまでに切り詰める。
0.2.0
  • `popup-menu*' の左端のマージンを設定する変数 `popup-kill-ring-popup-margin-left' を追加。
  • `popup-menu*' で最初から isearch を有効とするかを制御する変数 `popup-kill-ring-isearch' を追加。
  • 変数 `popup-kill-ring-item-min-width' を追加。
    • kill-ring 内の文字列において、この変数に設定されている数値より文字列長が短い文字列は、候補として表示しない。
  • `popup-kill-ring-interactive-insert' が t の場合、isearch した直後の文字列で決定した場合、選択された文字列と現在挿入されている文字列が違った場合でも、選択された文字列は挿入されなかったが、選択された文字列が挿入されるものとした。
  • `popup-menu*' に渡すリスト内の各文字列に summary プロパティを追加。右端に index の数値をつける事と変更した。
0.1.0
  • 自動的に選択項目を挿入する `popup-kill-ring-interactive-insert' 変数を追加。
  • pos-tip-show の色を設定できる `popup-kill-ring-pos-tip-color' を追加。
0.0.8
  • キーマップの記述を修正。(Thanks @iRi_E さん)
0.0.7
  • C-f (or →)で pos-tip-show による tooltip を表示するコマンドを割り当て。
  • C-b (or ←)で表示している tooltip を消すコマンドを割り当て。
0.0.6
  • 上下キーで pos-tip-show による詳細表示がなされていなかった点を修正。

更新時刻

  • 2010/04/26/02:10
  • 2010/04/26/02:57
  • 2010/04/26/22:01
  • 2010/04/28/01:41
  • 2010/04/29/03:34
  • 2010/04/30/00:23
  • 2010/05/01/17:14
  • 2010/05/05/04/14