複数候補を選択して補完できる動的略語展開 dabbrev-expand-multiple
これは, 動的略語展開の候補を複数表示して, その中から補完できるようにするものです.
とりあえず, 目的としていた機能の主要な部分の実装は終わりました.
まだまだ, バグを含んでいると思われ, 誤動作する可能性があると思います.
使ってみようという場合には, そこらへん了承の上お願いします.
# まだまだ大丈夫か不安・・・.
動作
関数の動作としては, 以下のようなものになります.
- ある語について, dabbrev-expand-multiple を起動すると, まず, 通常の dabbrev-expand と同様に動作.
- dabbrev-expand-multiple を起動したキー, もしくは, M-/ を押すと, 複数の補完候補があれば, それを表示する.
- その後, M-/, SPC もしくは, dabbrev-expand-multiple を起動したキーを押すと, 次の補完候補(あれば)を表示する.
- x もしくは, Backspace を押すと, 1つ前の補完候補を表示する.
- それ以外のキーを押すと, 実行が終了する.
複数候補の表示は, tooltip とインライン表示の2つの方法で行われます.
デフォルトでは, tooltip での表示となります.
また, ミニバッファ上でこの関数を実行した場合, ミニバッファ全体に補完候補を表示します.
一度に表示される補完候補の数は, デフォルトで 3 つです.
現在分かっている問題点として, tooltip 使用時にあまりに速く, x や SPC を押して,
候補をサイクルさせると tooltip が表示されなくなるということがあります.
特に x で前の候補を見るときに問題が起きやすいみたいです. なんでだろう・・・.
設定例
このエントリ下部にある, コードを直接 .emacs に貼り付けて下さい.
# 300行越えてるから, provide 書いて, パッケージにした方が良かったかなあ・・・.
このエントリ下部, ソース項目にあるリンクより, dabbrev-expand-multiple.el パッケージをダウンロードして下さい.
あとは, 下に記述してあるように,
(require 'dabbrev-expand-multiple) として, 読み込み,
そして, 起動させたいキーに dabbrev-expand-multiple を割り当てれば, OK です.
既存の dabbrev-expand を潰してしまってもいいならば, 以下のようなになります.
(require 'dabbrev-expand-multiple) (global-set-key "\M-/" 'dabbrev-expand-multiple)
細かな設定は, 以下のようになります.
;; 補完候補を一度に5つにする. (setq dabbrev-expand-multiple-select-keys '("a" "s" "d" "f" "g")) ;; 複数候補表示に移るキーに m を足す. (add-to-list 'dabbrev-expand-multiple-multi-selection-keys "m") ;; 複数候補表示時に次の候補表示に使用するキーに n を足す. (add-to-list 'dabbrev-expand-multiple-next-keys "n") ;; 複数候補表示時に前の候補表示に使用するキーに p を足す. (add-to-list 'dabbrev-expand-multiple-previous-keys "p") ;; ツールチップを表示する秒数. (setq dabbrev-expand-multiple-tooltip-timeout 2000) ;; 10秒で消えるように設定する. (setq dabbrev-expand-multiple-tooltip-timeout 10) ;; ツールチップの見た目の設定 M-x list-colors-display を参考に設定する. (setq dabbrev-expand-multiple-tooltip-params '((foreground-color . "grey75") (background-color . "navy blue") (border-color . "black"))) ;; 最初に展開した文字列に highlight をかける. (setq dabbrev-expand-multiple-highlight-face 'highlight) ;; インライン表示のときに使用するフェイス. (setq dabbrev-expand-multiple-inline-show-face 'underline) ;; インライン表示の見た目の変更 (アンダーラインをなしにする) (setq dabbrev-expand-multiple-inline-show-face nil) ;; ツールチップを使用しない(インライン表示をする) (setq dabbrev-expand-multiple-use-tooltip nil)
timeout は, ツールチップを表示する秒数です.
inline 表示にタイムアウトはありません.
dabbrev-expand-multiple-multi-selection-keys や dabbrev-expand-multiple-next-keys,
dabbrev-expand-multiple-previous-keys を nil に設定すると, キー設定が消えてしまうので注意して下さい.
やりたい事
設定できる変数を defvar から, defcustom にする.(*完了しました*)このページ( http://namazu.org/~tsuchiya/elisp/dabbrev-ja.el ) の設定を移植し, 日本語を含む文でも使い易くする.(*完了しました*)
あとは, dabbrev-highlight のように, 補完元を強調できれば面白いと思いますが, 実装するとしてもずっと先になりそうです.
また, パッケージ化したので, 頭の説明も書かないと. こっちが先かな.(*ほぼ完了しました*)
ソース
以下の URL よりダウンロードして下さい.
- http://www.oti-orz.mydns.jp/~khiker/file/20071009/dabbrev-expand-multiple.el (最新版)
- http://www.oti-orz.mydns.jp/~khiker/file/20070827/dabbrev-expand-multiple.el
- http://www.oti-orz.mydns.jp/~khiker/file/20070820/dabbrev-expand-multiple.el
- http://www.oti-orz.mydns.jp/~khiker/file/20070819-2/dabbrev-expand-multiple.el
- http://www.oti-orz.mydns.jp/~khiker/file/20070819/dabbrev-expand-multiple.el
このソースの作成にあたって, 特に SKK を参考にさせて頂き, 一部の関数をほぼそのまま持ってこさせてもらいました.
また, dabbrev-ja.el の dabbrev-expand へのアドバイスも, dabbrev-expand-multiple へのアドバイスとしたのみで,
そのまま持ってこさせて頂きました.
これら, SKK は, SKK の dabbrev-ja.el は, dabbrev-ja.el の作者さんに当然ですが, copyright があります.
コメント
変更点
バージョン 1.0.0 から, バージョン 1.0.1 での主な変更点
- plus さんによるパッチを適用
- キー設定で, "\M-/" のような文字列での設定だけでなく, ?\M-/, (meta /), [(meta /)] のようなイベント, リスト, ベクタでも設定できるようになった.
- 上記の結果, Hyperキー Superキーを設定することも可能となっている.
バージョン番号なしから, バージョン 1.0.0 での主な変更点
- plus さんによるパッチでの変更点
- 変数名の変更, dabbrev-expand-multiple-select-key から dabbrev-expand-multiple-select-keys へ.
- 変数名の変更, dabbrev-expand-multiple-to-multi-key から dabbrev-expand-multiple-multi-selection-keys へ.
- 変数名の変更, dabbrev-expand-multiple-next-key から dabbrev-expand-multiple-next-keys へ.
- 変数名の変更, dabbrev-expand-multiple-previous-key から dabbrev-expand-multiple-previous-keys へ.
- 変数名の変更, dabbrev-expand-multiple-timeout から dabbrev-expand-multiple-tooltip-timeout へ.
- 1つの略語の展開から, 複数候補選択を表示するのに, SPC も使えていたが, これを削除.
- 新規略語を取得できなかったとき次候補を選択しても, 関数の実行が終了しなくなった.
- khiker による変更点.
- バージョン番号の付与. 1.0.0 とした.
- ライブラリヘッダに説明文を付与した.
- 一部コメントを下手な英語に翻訳した.
以前のエントリ
更新時刻
- 1かいめ 2007年, 8月18日, 4:03
- 2かいめ 2007年, 8月19日, 5:00
- 3かいめ 2007年, 8月19日, 14:09
- 4かいめ 2007年, 8月20日, 16:00