ac-slime.el 導入メモ

どもです。
腰が痛い。痛いが,だいぶましになってきた。
姿勢を正せば椅子に座れる感じ。ちょっと痛いけど。


そうそう,auto-complete-etags で,タグ名が,SomeClass::func といった
場合に,ドキュメントが表示されかったり,複数のドキュメントを1つ見つけた後,
2つ目を探しに行ってエラーになったら,全部エラーになったりといったバグを修正したっす。
これで,QObject::connect とかのシグニチャを表示できるようになったっす。
なったが,関数の引数リスト内で,#ifdef とか使われているから,表示がぐっちゃになるっす。
こういう場合はどうしよっかなぁーとかっす。ifdef とかあったら切り捨て御免にするっす?


そうなってくると,eldoc だっけ? がプリプロセッサを走らせてからシグニチャを表示する,
というのに納得がいくっす。ん? プリプロセッサに通したファイルからタグファイルを作成して,
補完とかかっす? いや,ダメだ。たぶんぐちゃぐちゃになるっす。うーん。悩ましいっす。

ac-slime.el を導入したけど,少しハマッタのでメモ。

基本的に,
http://modern-cl.blogspot.com/2011/04/3-slime.html
に書いてあるとおりでオッケー牧場なはず。
なんか前も書いた記憶があるぞ。


でも,なぜか ac-souce-slime-simple から補完されない。
そもそも,ac-source-slime-simple-candidates が呼ばれてない。
その後色々ためしてみたところ,ac-sources の先頭に ac-source-slime-simple
がある場合には,補完が効く。そうでない場合は,ac-source-slime-simple から
補完されないということが解った。
原因はわからん。


ついでなので,設定を晒しておきます。
環境は,Windows XP SP3, Cygwin, NTEmacs 23.2.1 どえす。

(defun my-lisp-mode-hook-func ()
  (interactive)
  (define-key lisp-mode-map "`" 'self-insert-command)
  (define-key lisp-mode-map "\C-c\C-i" 'auto-complete)
  (slime-mode t)
  (show-paren-mode 1)
  (when (require 'auto-complete nil t)
    (require 'ac-slime nil t)
    (setq ac-sources '(ac-source-slime-simple ac-source-words-in-same-mode-buffers))
    (auto-complete-mode t)))

(add-hook 'lisp-mode-hook 'my-lisp-mode-hook-func)

(require 'slime)
(define-key slime-mode-map "\C-c\C-i" 'auto-complete)
(require 'ac-slime)
(add-hook 'slime-mode-hook 'set-up-slime-ac)
(add-hook 'slime-repl-mode-hook 'set-up-slime-ac)
(slime-setup '(slime-repl))

(setq common-lisp-hyperspec-root
      "file:///cygdrive/e/cygwin/home/whitypig/doc/hyperspec/Hyperspec/"
      common-lisp-hyperspec-symbol-table
      "file:///cygdrive/e/cygwin/home/whitypig/doc/hyperspec/Hyperspec/Data/Map_Sym.txt")

;; (ad-deactivate 'common-lisp-hyperspec)
;; (ad-remove-advice 'common-lisp-hyperspec 'around 'hyperspec-lookup-w3m)
;; 以下は,どっかのサイトにあったのをコピーしてきたもの。
;; 感謝感謝です。
(setq browse-url-browser-function #'w3m-browse-url)
(defadvice common-lisp-hyperspec
  (around hyperspec-lookup-w3m () activate)
  (let* ((window-configuration (current-window-configuration))
         (w3m-pop-up-windows nil)
         (browse-url-browser-function
          (lambda (url new-window)
            (other-window 1)
            (w3m-browse-url url nil)
            (let ((hs-map (copy-keymap w3m-mode-map)))
              (define-key hs-map (kbd "q")
                `(lambda ()
                  (interactive)
                  (kill-buffer nil)
                  (set-window-configuration ,window-configuration)))
              (use-local-map hs-map)))))
    ad-do-it))