gtags.el でライブラリも検索


global-5.7.6 + gtags.el-2.5で動作確認済み。


init-gtags.el

(require 'gtags)

(defvar gtags-libpath nil
  "Library directory of language.")
(make-variable-buffer-local 'gtags-libpath)

(defadvice gtags-goto-tag
  (before gtags-goto-tag-gtagslibpath activate)
  (setenv "GTAGSLIBPATH" gtags-libpath))

;; php-completion.el を使っている場合
(defadvice phpcmp-global-execute-command
  (before phpcmp-global-execute-command-gtagslibpath activate)
  (setenv "GTAGSLIBPATH" gtags-libpath))


.emacs.mine

(add-hook 'php-mode-hook
          (lambda ()
            (let ((file (buffer-file-name)))
              (cond
               ((string-match "/askeet/" file)
                (setq gtags-libpath (expand-file-name "~/local/lib/php/symfony-10/lib")))
               ((string-match "/jobeet/" file)
                (setq gtags-libpath (concat
                                     (expand-file-name "~/local/lib/php/zend/library")
                                     ":"
                                     (expand-file-name "~/local/lib/php/symfony-13/lib")
                                     )))
               (t nil)))))


global (~/.emacs.d/bin 等の優先的にパスを通してある場所に置く)

#!/bin/sh

PATH=/opt/local/bin:/usr/local/bin:/usr/bin

if [ "$1" != '-c' -a "$1" != '-cs' ]; then
    global -a "$@"
    exit $?
fi

_GTAGSPATHS=$(global -pr)

r=$?
[ $r -ne 0 ] && exit $r

[ -n "$GTAGSLIBPATH" ] && _GTAGSPATHS=$_GTAGSPATHS:$GTAGSLIBPATH

{
    IFS_SAV="$IFS"
    IFS=:

    for dir in `echo "$_GTAGSPATHS"   |
                sed -e 's/^:/.:/'     \
                    -e 's/::/:.:/g'   \
                    -e 's/:$/:./'`
    do
        GTAGSROOT=$dir global "$@"
    done

    IFS="$IFS_SAV"
} | LC_ALL=C sort -u