[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#24585: 25.1; avoid hack in ggtags.el to run compilation-auto-jump ti

From: Leo Liu
Subject: bug#24585: 25.1; avoid hack in ggtags.el to run compilation-auto-jump timer
Date: Sun, 02 Oct 2016 12:56:40 +0800

,----[ Stefan Monnier ]
| > +      ;; Manually run the `compilation-auto-jump' timer. Hackish but
| > +      ;; everything else seems unreliable. See:
| > +      ;;
| > +      ;; - http://debbugs.gnu.org/13829
| > +      ;; - http://debbugs.gnu.org/23987
| > +      ;; - https://github.com/leoliu/ggtags/issues/89
| > +      ;;
| > +      (pcase (cl-find 'compilation-auto-jump timer-list :key 
| > +        (`nil )
| > +        (timer (timer-event-handler timer)))
| I think this deserves a bug report, where we try to figure out how to
| make it possible for ggtags.el to work properly without resorting to such
| a hideous and brittle hack.
| A hack will probably have to stay for compatibility with older Emacsen,
| but we should come up with a better solution for the future.

The hack is due to difficulty in making sure one timer is run before
another that run nearly at the same time. And it's made harder because
timer.el prepends a timer to existing timers running at the same time,
which looks like a mistake.

I think the hack in ggtags.el may be removed by the following patch to
correct the said mistake:

diff --git a/lisp/emacs-lisp/timer.el b/lisp/emacs-lisp/timer.el
index c01ea497..337e1049 100644
--- a/lisp/emacs-lisp/timer.el
+++ b/lisp/emacs-lisp/timer.el
@@ -130,9 +130,9 @@ floating point number."
        (setq delta (time-add delta (list 0 0 (or usecs 0) (or psecs 0)))))
     (time-add time delta)))
-(defun timer--time-less-p (t1 t2)
+(defun timer--time-less-or-equal-p (t1 t2)
   "Say whether time value T1 is less than time value T2."
-  (time-less-p (timer--time t1) (timer--time t2)))
+  (not (time-less-p (timer--time t2) (timer--time t1))))
 (defun timer-inc-time (timer secs &optional usecs psecs)
   "Increment the time set in TIMER by SECS seconds, USECS microseconds,
@@ -172,7 +172,7 @@ fire repeatedly that many seconds apart."
       (let ((timers (if idle timer-idle-list timer-list))
        ;; Skip all timers to trigger before the new one.
-       (while (and timers (timer--time-less-p (car timers) timer))
+       (while (and timers (timer--time-less-or-equal-p (car timers) timer))
          (setq last timers
                timers (cdr timers)))
        (if reuse-cell

reply via email to

[Prev in Thread] Current Thread [Next in Thread]