X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/cf250b3a948a846c31210540c8f1b76fdc22bb69..f10533854f4c7bb54247a11981191bf37b70cb36:/packages/ggtags/ggtags.el diff --git a/packages/ggtags/ggtags.el b/packages/ggtags/ggtags.el index 52b96cf26..aefe3afdf 100644 --- a/packages/ggtags/ggtags.el +++ b/packages/ggtags/ggtags.el @@ -3,7 +3,7 @@ ;; Copyright (C) 2013-2015 Free Software Foundation, Inc. ;; Author: Leo Liu -;; Version: 0.8.10 +;; Version: 0.8.11 ;; Keywords: tools, convenience ;; Created: 2013-01-29 ;; URL: https://github.com/leoliu/ggtags @@ -36,13 +36,11 @@ ;; ;; All commands are available from the `Ggtags' menu in `ggtags-mode'. -;;; NEWS 0.8.10 (2015-06-12): +;;; NEWS 0.8.11 (2015-12-15): -;; - Tags update on save is configurable by `ggtags-update-on-save'. -;; - New command `ggtags-explain-tags' to explain how each file is -;; indexed in current project. -;; - New user option `ggtags-sort-by-nearness' that sorts matched tags -;; by nearness to current directory. +;; - `ggtags-highlight-tag-delay' is renamed to `ggtags-highlight-tag' +;; - Tag highlighting can be disabled by setting +;; `ggtags-highlight-tag' to nil. ;; ;; See full NEWS on https://github.com/leoliu/ggtags#news @@ -331,13 +329,17 @@ Nil means using the value of `completing-read-function'." function) :group 'ggtags) -(defcustom ggtags-highlight-tag-delay 0.25 - "Time in seconds before highlighting tag at point." +(define-obsolete-variable-alias 'ggtags-highlight-tag-delay 'ggtags-highlight-tag + "0.8.11") + +(defcustom ggtags-highlight-tag 0.25 + "If non-nil time in seconds before highlighting tag at point. +Set to nil to disable tag highlighting." :set (lambda (sym value) - (when (bound-and-true-p ggtags-highlight-tag-timer) - (timer-set-idle-time ggtags-highlight-tag-timer value t)) + (when (fboundp 'ggtags-setup-highlight-tag-at-point) + (ggtags-setup-highlight-tag-at-point value)) (set-default sym value)) - :type 'number + :type '(choice (const :tag "Disable" nil) number) :group 'ggtags) (defcustom ggtags-bounds-of-tag-function (lambda () @@ -647,7 +649,7 @@ When called with a prefix \\[universal-argument], choose from past projects." (ggtags-ensure-localname (directory-file-name (ggtags-current-project-root))))) (process-environment - (append (let ((process-environment process-environment)) + (append (let ((process-environment (copy-sequence process-environment))) (and ,gtagsroot (setenv "GTAGSROOT" ,gtagsroot)) (mapcar #'substitute-env-vars ggtags-process-environment)) process-environment @@ -703,7 +705,7 @@ If file gtags.files exists in ROOT, it should be a list of source files to index, which can be used to speed gtags up in large source trees. See Info node `(global)gtags' for details." (interactive "DRoot directory: ") - (let ((process-environment process-environment)) + (let ((process-environment (copy-sequence process-environment))) (when (zerop (length root)) (error "No root directory provided")) (setenv "GTAGSROOT" (ggtags-ensure-localname (expand-file-name @@ -929,7 +931,8 @@ blocking emacs." (let* ((default-directory (or directory (ggtags-current-project-root))) (split-window-preferred-function ggtags-split-window-function) (env ggtags-process-environment)) - (unless (markerp ggtags-global-start-marker) + (unless (and (markerp ggtags-global-start-marker) + (marker-position ggtags-global-start-marker)) (setq ggtags-global-start-marker (point-marker))) ;; Record the file name for `ggtags-navigation-start-file'. (setq ggtags-global-start-file buffer-file-name) @@ -1622,19 +1625,23 @@ commands `next-error' and `previous-error'. ggtags-auto-jump-to-match-target)) (ggtags-forward-to-line ggtags-auto-jump-to-match-target) (setq-local ggtags-auto-jump-to-match-target nil) - ;; - ;; Can't call `compile-goto-error' here becuase + (ggtags-delay-finish-functions + (with-display-buffer-no-window + (condition-case nil + (let ((compilation-auto-jump-to-first-error t)) + (compilation-auto-jump (current-buffer) (point))) + (error (message "\ +ggtags: history match invalid, jump to first match instead") + (first-error))))) ;; `compilation-filter' restores point and as a result commands ;; dependent on point such as `ggtags-navigation-next-file' and ;; `ggtags-navigation-previous-file' fail to work. - (run-with-idle-timer 0 nil (lambda (buf pt) - (and (buffer-live-p buf) - (with-current-buffer buf - (ggtags-delay-finish-functions - (let ((compilation-auto-jump-to-first-error t)) - (with-display-buffer-no-window - (compilation-auto-jump buf pt))))))) - (current-buffer) (point))) + (run-with-idle-timer + 0 nil + (lambda (buf pt) + (and (buffer-live-p buf) + (with-current-buffer buf (goto-char pt)))) + (current-buffer) (point))) (make-local-variable 'ggtags-global-large-output) (when (> ggtags-global-output-lines ggtags-global-large-output) (cl-incf ggtags-global-large-output 500) @@ -2022,6 +2029,7 @@ When finished invoke CALLBACK in BUFFER with process exit status." (delay-mode-hooks (funcall mode)) (setq font-lock-mode t) (funcall font-lock-function font-lock-mode) + (setq jit-lock-mode nil) (current-buffer)))) (with-current-buffer (prepare-buffer) (let ((inhibit-read-only t)) @@ -2198,10 +2206,7 @@ to nil disables displaying this information.") ;;;###autoload (define-minor-mode ggtags-mode nil :lighter (:eval (if ggtags-navigation-mode "" " GG")) - (unless (timerp ggtags-highlight-tag-timer) - (setq ggtags-highlight-tag-timer - (run-with-idle-timer - ggtags-highlight-tag-delay t #'ggtags-highlight-tag-at-point))) + (ggtags-setup-highlight-tag-at-point ggtags-highlight-tag) (if ggtags-mode (progn (add-hook 'after-save-hook 'ggtags-after-save-function nil t) @@ -2224,9 +2229,7 @@ to nil disables displaying this information.") (remove-function (local 'eldoc-documentation-function) 'ggtags-eldoc-function) (setq mode-line-buffer-identification (delq 'ggtags-mode-line-project-name mode-line-buffer-identification)) - (and (overlayp ggtags-highlight-tag-overlay) - (delete-overlay ggtags-highlight-tag-overlay)) - (setq ggtags-highlight-tag-overlay nil))) + (ggtags-cancel-highlight-tag-at-point 'keep-timer))) (defvar ggtags-highlight-tag-map (let ((map (make-sparse-keymap))) @@ -2246,6 +2249,22 @@ to nil disables displaying this information.") (put 'ggtags-active-tag 'help-echo "S-mouse-1 for definitions\nS-mouse-3 for references") +(defun ggtags-setup-highlight-tag-at-point (flag) + (cond ((null flag) (ggtags-cancel-highlight-tag-at-point)) + ((not (timerp ggtags-highlight-tag-timer)) + (setq ggtags-highlight-tag-timer + (run-with-idle-timer flag t #'ggtags-highlight-tag-at-point))) + (t (timer-set-idle-time ggtags-highlight-tag-timer flag t)))) + +(defun ggtags-cancel-highlight-tag-at-point (&optional keep-timer) + (when (and (not keep-timer) + (timerp ggtags-highlight-tag-timer)) + (cancel-timer ggtags-highlight-tag-timer) + (setq ggtags-highlight-tag-timer nil)) + (when ggtags-highlight-tag-overlay + (delete-overlay ggtags-highlight-tag-overlay) + (setq ggtags-highlight-tag-overlay nil))) + (defun ggtags-highlight-tag-at-point () (when (and ggtags-mode ggtags-project-root (ggtags-find-project)) (unless (overlayp ggtags-highlight-tag-overlay)