anything-gtags復活
id:shive:20090806:1249528810
以前NTEmacs23に移行したらanything-gtagsのgtags-select-modeの横取りが動かなくなった件を書きましたが、何とか対応できました。
--- anything-gtags.el.orig +++ anything-gtags.el @@ -184,8 +184,10 @@ (declare (special save buffer)) (let* ((anything-candidate-number-limit 9999) (pwd (with-current-buffer buffer (expand-file-name default-directory))) - (basename (substring (with-current-buffer save buffer-file-name) - (length pwd))) + (basename (if (buffer-file-name save) + (substring (with-current-buffer save buffer-file-name) + (length pwd)) + (buffer-name save))) (lineno (with-current-buffer save (save-restriction (widen) @@ -199,13 +201,15 @@ (aggs-set-anything-current-position) (anything-candidate-buffer buffer))) ,@aggs-base-source))))) + (if (get-buffer aggs-buffer) + (kill-buffer aggs-buffer)) (with-current-buffer (get-buffer-create aggs-buffer) (set (make-local-variable 'buffer) buffer) - (set (make-local-variable 'pwd) pwd)) + (set (make-local-variable 'pwd) pwd) (anything sources nil nil nil (format "\\(\\(%d\\) +%s\\)" lineno (regexp-quote basename)) - aggs-buffer))) + aggs-buffer)))) (defun aggs-candidate-buffer-by-filename (filename) (get-buffer-create (concat "*anything gtags*" filename)))
これで何で動くのかは正直ちゃんと理解できていないのですが、要点は2つ。
- 最後のanythingを呼び出すときにカレントバッファがaggs-bufferになっていないといけない。
- aggs-bufferに中身が残ってるとうまく動かない。
これの対処を入れたら動くようになりました。ちなみにbasenameに細工しているのは、diredや*scratch*などのファイルパスが入っていないバッファに居るときにエラーになってしまっていたので、適当にバッファ名を入れて動かすようにしてみました。これは地味に便利。