Обновите файл gtag в emacs для одного файла один раз при сохранении
Моя конфигурация скопирована с http://www.emacswiki.org/emacs/GnuGlobal. Цель состоит в том, чтобы обновить существующий файл тегов после сохранения исходного файла. Но результат такой же, как и ожидалось.
Полная конфигурация:
(gtags-mode 1)
(defun gtags-root-dir ()
"Returns GTAGS root directory or nil if doesn't exist."
(with-temp-buffer
(if (zerop (call-process "global" nil t nil "-pr"))
(buffer-substring (point-min) (1- (point-max)))
nil)))
(defun gtags-update-single(filename)
"Update Gtags database for changes in a single file"
(interactive)
(start-process "update-gtags" "update-gtags" "bash" "-c" (concat "cd " (gtags-root-dir) " ; gtags --single-update " filename )))
(defun gtags-update-current-file()
(interactive)
(defvar filename)
(setq filename (replace-regexp-in-string (gtags-root-dir) "." (buffer-file-name (current-buffer))))
(gtags-update-single filename)
(message "Gtags updated for %s" filename))
(defun gtags-update-hook()
"Update GTAGS file (insert )ncrementally upon saving a file"
(when gtags-mode ;;It is copy past error..
(when (gtags-root-dir)
(gtags-update-current-file))))
(add-hook 'after-save-hook 'gtags-update-hook)
Обновить
Насколько я понимаю, теги будут обновляться через команду
(gtags-update-single filename)
(message "Gtags updated for %s" filename))
как только файл в буфере сохранен. Это означает, что новая добавленная или переименованная или удаленная функция будет обновлена в файле тегов. В моем тесте я вижу выводимое сообщение (теги находятся в каталоге ededemo):
Wrote /other/projectbase/cplusproject/ededemo/src/main.cpp
Gtags updated for ./src/main.cpp
каждая функция времени переименовывается или добавляется после cx cs. Но Mx gtags-find-tag не смог найти мою новую добавленную функцию. Есть ли что-то неправильное в понимании?
1 ответ
Эта строка явно ответственна / не работает:
(when gtags-;-*- mode: ${1:mode} -*-
Глядя на вики-страницу, я не могу понять, как вам это удалось.
Комментарий строки документа также поврежден. Просто скопируйте всю функцию снова.