とりあえず, 471日目

skype

不安定だねー.
XP のパッチが原因だとか Skypeアルゴリズムが原因だとか色々噂が流れてるけど, 真相はどうなんだろうねえ.
うちのところは, そこそこ安定してきたけど,
それでもまだログアウトすると, ログインしづらい状況が続いてるね.
うちなんかはまだ, skype 使えなくてもそこまで問題はないけど,
会社で仕事に使ってる人とかどうすんのかねえ. たいへんだろうなあ.
こうゆうとき代替になるのって何だろう?メッセ?
なんにせよ, 速く安定してほしいなあ.

暑い


毎日書いてるけど, 暑い.
昼間は, 暑くて何もやる気がでないから(冷房つけてるけど), 最近は昼寝してる.
まあ, 最近といってもここ2日ぐらいのことやけど.

コミケ

初日終了か.
うちのまわりで誰か行った人いないのかな.
居たら面白いんやけど.
それにしてもこのクソ暑い中, 何時間も並ぶなんて・・・さすがにうちには出来ないなあ.
目的があれば別なんだろうか・・・. ふーむ・・・.
行ったら行ったでネタにはなりそうだけど・・・.

更新時刻

2007年, 8月18日, 4:03

複数候補を選択して補完できる動的略語展開 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 よりダウンロードして下さい.

このソースの作成にあたって, 特に SKK を参考にさせて頂き, 一部の関数をほぼそのまま持ってこさせてもらいました.
また, dabbrev-ja.el の dabbrev-expand へのアドバイスも, dabbrev-expand-multiple へのアドバイスとしたのみで,
そのまま持ってこさせて頂きました.
これら, SKK は, SKKdabbrev-ja.el は, dabbrev-ja.el の作者さんに当然ですが, copyright があります.

コメント


最新版では, plus さん提供のパッチがあてられ, ソースコードの最適化が行われています.
これに伴い, 変数や関数の名前に変更があります. 詳しくは, 下の変更点の項目に書いてあります.

変更点

バージョン 1.0.1 から, バージョン 1.1.0 での主な変更点
  • dabbrev-expand-multiple-main 関数内で再帰処理していたのをwhileループに変換した.
バージョン 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