ループ

 偶々見たxyzzyに元々付いているのlispとか、拡張したlispのsourceを見たら、*post-command*にadd-hookするのばかりだったので、そういうものかと気にもせずに使っていたけど。
さっき見た
nazonoDiary - 特定の動作時以外に解除されるモードのようなもの
http://d.hatena.ne.jp/nazoking/20040305/1078421068
の使い方みたいに普通にループしてもいいらしい。というかloopっていうものの存在をまず知らなかったわけだけど。whileでやればいいかとか思っていたりした。

(defun dabbrev-popup-loop ()
  "連続して dabbrev-popup を実行する。"
  (interactive) ; おまじない
  (let (c) ; 変数 c を使います
    (loop  ; 永久ループ
      (dabbrev-popup)  ; dabbrev-popup を実行
      (setq c (read-char ed:*keyboard*)) ;キーボードから一文字読み取る
      (unless (and (eq (lookup-key-command c) 'self-insert-command)
         ; もし、そのキーに割り当てられたコマンドが 'self-insert-command で
                   (or (syntax-word-p c)       ; word 文字か
                       (syntax-symbol-p c)))   ; symbol 文字でなかったら
	(unread-char c) ; キーボードを読んでないことにして
	(return)) ;dabbrev-popup-loop を終了
      ;それ以外の場合は
      (insert c) ; c をインサートして
      (refresh-screen)))) ; 画面を再描写してループに戻る

こんな使い方とかできるなら、そんなに連続する必要がないなら、loopでいいじゃないかとか、前に書いたのとかを書き直そうとか色々思ってみたり。