続・Emacs でタブキーで補完。

昨日の続き37toさんにSBSで、教えてもらった、Emacs のあらゆるモードで有効なキーバインドの設定方法を試してみる (KR4MBの人の記事ですね。お世話になりまくり)。

(setq my-keyjack-mode-map (make-sparse-keymap))
(mapcar (lambda (x)
          (define-key my-keyjack-mode-map (car x) (cdr x))
          (global-set-key (car x) (cdr x)))
        '(("\t". dabbrev-expand)
	  ("\C-c\t" . indent-relative)
	  ))

(easy-mmode-define-minor-mode my-keyjack-mode "Grab keys"
			      t " Keyjack" my-keyjack-mode-map)

試しに、この様にしてみると、ミニバッファでも dabbrev-expand の補完が有効になってしまいました。ファイルパスが補完されないので、これは理想的ではありません。
特定のメジャーモードの時に、一緒にこのキーマップを変更してくれるマイナーモードをオンにしてくれる方法がわかれば、色々と都合がよさそうです。ですが、さっと調べてみたところ、僕には分からなかったので、とりあえずコメントアウトして放置しておきます。だめだめですね。

(add-hook 'cperl-mode-hook
          (lambda ()
	    (local-set-key "\t" 'dabbrev-expand-multiple) ;dabbrev による補完
	    (local-set-key "\C-c\t" 'indent-relativ) ;インデント
            (define-key cperl-mode-map "\M-\t" 'perlplus-complete-symbol))) ;関数名などの補完

結局、今のところはこんな感じでタブキー辺りの動作を定義しておきました。
dabbrev-expand-multipledabbrev-expand の補完候補を複数表示にしてくれるナイスlispです。
perlplus-complete-symbol はPerl標準の関数や既に利用した変数などを補完してくれますが、dabbrev の補完は、他のバッファも補完候補の対象にしてくれるので、両方ある方が便利なのです。
翌日に解決しました。