[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: |
Lars Ingebrigtsen |
Subject: |
bug#24585: 25.1; avoid hack in ggtags.el to run compilation-auto-jump timer |
Date: |
Fri, 04 Sep 2020 14:47:03 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
Leo Liu <sdl.web@gmail.com> writes:
> On 2016-10-07 14:10 -0400, Stefan Monnier wrote:
>> Hmm... calling compilation--ensure-parse *should* help.
>> More specifically, if you call compilation--ensure-parse up to point-max
>> from compilation-finish-functions, I can't think of any reason why
>> compilation-error-properties should be called afterwards. If you can
>> get a backtrace of when that happens, it would help.
>>
>> E.g. set a buffer-local var from compilation-finish-functions after
>> calling compilation--ensure-parse, and then add an assert in
>> compilation-error-properties to check that that var is not set yes.
>
> To the best of my knowledge that seems to work with change like this to
> compile.el:
[...]
This was the final message in this bug report, but looking at the patch
that supposedly fixes the problem, I don't understand how it makes a
difference: Putting (match-beginning) in a buffer-local variable
instead of passing it in directly seems like a no-op?
Checking whether the buffer is alive in compilation-auto-jump seems like
a good idea, though (any async function that switches to a buffer should
check whether it's alive first).
> -(defun compilation-auto-jump (buffer pos)
> - (with-current-buffer buffer
> - (goto-char pos)
> - (let ((win (get-buffer-window buffer 0)))
> - (if win (set-window-point win pos)))
> - (if compilation-auto-jump-to-first-error
> - (compile-goto-error))))
> +(defvar-local compilation-pending-auto-jump nil)
> +
> +(defun compilation-auto-jump (buffer)
> + (when (buffer-live-p buffer)
> + (with-current-buffer buffer
> + (when compilation-pending-auto-jump
> + (goto-char compilation-pending-auto-jump)
> + (let ((win (get-buffer-window buffer 0)))
> + (if win (set-window-point win compilation-pending-auto-jump)))
> + (setq compilation-pending-auto-jump nil)
> + (if compilation-auto-jump-to-first-error
> + (compile-goto-error))))))
>
> ;; This function is the central driver, called when font-locking to gather
> ;; all information needed to later jump to corresponding source code.
> @@ -1126,8 +1131,8 @@ POS and RES.")
> (when (and compilation-auto-jump-to-next
> (>= type compilation-skip-threshold))
> (kill-local-variable 'compilation-auto-jump-to-next)
> - (run-with-timer 0 nil 'compilation-auto-jump
> - (current-buffer) (match-beginning 0)))
> + (setq compilation-pending-auto-jump (match-beginning 0))
> + (run-with-timer 0 nil 'compilation-auto-jump (current-buffer)))
>
> (compilation-internal-error-properties
> file line end-line col end-col type fmt)))
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
- bug#24585: 25.1; avoid hack in ggtags.el to run compilation-auto-jump timer,
Lars Ingebrigtsen <=