GNU bug report logs -
#71727
Deleting TAGS buffer will cause `etags-regen--update-file` doesn't work
Previous Next
Reported by: Siyuan Chen <chansey97 <at> gmail.com>
Date: Sat, 22 Jun 2024 23:57:02 UTC
Severity: normal
Done: Dmitry Gutov <dmitry <at> gutov.dev>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 71727 in the body.
You can then email your comments to 71727 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#71727
; Package
emacs
.
(Sat, 22 Jun 2024 23:57:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Siyuan Chen <chansey97 <at> gmail.com>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Sat, 22 Jun 2024 23:57:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Reproduce steps:
1. init.el
```
(setq etags-regen-program "C:/green/emacs/emacs-29.3/bin/etags.exe")
(require 'etags-regen)
```
2. Open test.c with the following code
```
#define APPLICATION_WINDOW_WIDTH 320
```
3. M-x etags-regen-mode
4. Move the cursor to APPLICATION_WINDOW_WIDTH and M-x
xref-find-definitions. Then the TAGS file is created and the
APPLICATION_WINDOW_WIDTH line is highlighted (good).
5. M-x kill-buffer TAGS
6. Add `#define APPLICATION_WINDOW_HEIGHT 320` to test.c and M-x save-buffer
7. Move the cursor to APPLICATION_WINDOW_HEIGHT and M-x
xref-find-definitions.
The expected behavior: The TAGS file is updated and the
APPLICATION_WINDOW_HEIGHT line is highlighted.
The actual behavior: The echo area reports: "No definition found for:
APPLICATION_WINDOW_HEIGHT"
Note that if I don't do step-5 then everything is OK.
Emacs 29.3 has no this feature, I make it available via copy & paste
etags-regen.el to load-path. I think this issue has nothing to do with the
Emacs version though.
Thanks.
Best regards,
Siyuan Chen
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#71727
; Package
emacs
.
(Thu, 27 Jun 2024 08:50:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 71727 <at> debbugs.gnu.org (full text, mbox):
> From: Siyuan Chen <chansey97 <at> gmail.com>
> Date: Sun, 23 Jun 2024 07:55:49 +0800
>
> Reproduce steps:
>
> 1. init.el
> ```
> (setq etags-regen-program "C:/green/emacs/emacs-29.3/bin/etags.exe")
> (require 'etags-regen)
> ```
>
> 2. Open test.c with the following code
> ```
> #define APPLICATION_WINDOW_WIDTH 320
> ```
>
> 3. M-x etags-regen-mode
>
> 4. Move the cursor to APPLICATION_WINDOW_WIDTH and M-x xref-find-definitions. Then the TAGS file is
> created and the APPLICATION_WINDOW_WIDTH line is highlighted (good).
>
> 5. M-x kill-buffer TAGS
>
> 6. Add `#define APPLICATION_WINDOW_HEIGHT 320` to test.c and M-x save-buffer
>
> 7. Move the cursor to APPLICATION_WINDOW_HEIGHT and M-x xref-find-definitions.
>
> The expected behavior: The TAGS file is updated and the APPLICATION_WINDOW_HEIGHT line is
> highlighted.
>
> The actual behavior: The echo area reports: "No definition found for: APPLICATION_WINDOW_HEIGHT"
>
> Note that if I don't do step-5 then everything is OK.
>
> Emacs 29.3 has no this feature, I make it available via copy & paste etags-regen.el to load-path. I think this
> issue has nothing to do with the Emacs version though.
Thanks.
Dmitry, could you please look into this?
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#71727
; Package
emacs
.
(Fri, 28 Jun 2024 05:52:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 71727 <at> debbugs.gnu.org (full text, mbox):
Hi!
Thanks for the report.
On 23/06/2024 02:55, Siyuan Chen wrote:
> 5. M-x kill-buffer TAGS
>
> 6. Add `#define APPLICATION_WINDOW_HEIGHT 320` to test.c and M-x save-buffer
>
> 7. Move the cursor to APPLICATION_WINDOW_HEIGHT and M-x
> xref-find-definitions.
What happens here, is etags-regen--update-file (added to
after-save-hook) fails the check
(get-file-buffer etags-regen--tags-file)
and so the buffer and the file are not updated.
Note that if after step 7 you make an edit to the same file and then try
navigating again it will work because at step 7 the tags file is visited
again. So this doesn't seem an urgent problem, but it would be nice to
fix nevertheless.
I think we couldn't re-visit the tags file inside after-save-hook (it
might not be fast enough, for one thing), but the second alternative
mentioned inside the TODO at the top of etags-regen--update-file should
be fix this as well.
Is there are particular reason you killed the TAGS buffer? Perhaps a
quicker fix would be to visit the tags file in a hidden buffer, rather
than use the name that's so easy to find and kill or do something else
by accident.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#71727
; Package
emacs
.
(Sat, 29 Jun 2024 11:51:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 71727 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
> Is there are particular reason you killed the TAGS buffer?
No. I found this bug is just because I tried to view the TAGS content while
editing a .c file and then closed it (I am using tab-line-mode with
tab-line-close-tab-function set to kill-buffer). Since then, I have stopped
closing the TAGS buffer.
Another option is to temporarily add documentation advising users not to
close the TAGS buffer, because closing it accidentally can result in the
odd behavior.
Best regards,
Siyuan Chen
On Fri, Jun 28, 2024 at 9:23 AM Dmitry Gutov <dmitry <at> gutov.dev> wrote:
> Hi!
>
> Thanks for the report.
>
> On 23/06/2024 02:55, Siyuan Chen wrote:
> > 5. M-x kill-buffer TAGS
> >
> > 6. Add `#define APPLICATION_WINDOW_HEIGHT 320` to test.c and M-x
> save-buffer
> >
> > 7. Move the cursor to APPLICATION_WINDOW_HEIGHT and M-x
> > xref-find-definitions.
>
> What happens here, is etags-regen--update-file (added to
> after-save-hook) fails the check
>
> (get-file-buffer etags-regen--tags-file)
>
> and so the buffer and the file are not updated.
>
> Note that if after step 7 you make an edit to the same file and then try
> navigating again it will work because at step 7 the tags file is visited
> again. So this doesn't seem an urgent problem, but it would be nice to
> fix nevertheless.
>
> I think we couldn't re-visit the tags file inside after-save-hook (it
> might not be fast enough, for one thing), but the second alternative
> mentioned inside the TODO at the top of etags-regen--update-file should
> be fix this as well.
>
> Is there are particular reason you killed the TAGS buffer? Perhaps a
> quicker fix would be to visit the tags file in a hidden buffer, rather
> than use the name that's so easy to find and kill or do something else
> by accident.
>
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#71727
; Package
emacs
.
(Tue, 09 Jul 2024 02:51:01 GMT)
Full text and
rfc822 format available.
Message #17 received at 71727 <at> debbugs.gnu.org (full text, mbox):
Hi again!
On 29/06/2024 14:49, Siyuan Chen wrote:
> > Is there are particular reason you killed the TAGS buffer?
>
> No. I found this bug is just because I tried to view the TAGS content
> while editing a .c file and then closed it (I am using tab-line-mode
> with tab-line-close-tab-function set to kill-buffer). Since then, I have
> stopped closing the TAGS buffer.
Thanks for the clarification.
> Another option is to temporarily add documentation advising users not to
> close the TAGS buffer, because closing it accidentally can result in the
> odd behavior.
I think actually a simpler approach can suffice: using kill-buffer-hook
in the TAGS buffer. Like this:
diff --git a/lisp/progmodes/etags-regen.el b/lisp/progmodes/etags-regen.el
index dc778b14061..21ea9bfb8b3 100644
--- a/lisp/progmodes/etags-regen.el
+++ b/lisp/progmodes/etags-regen.el
@@ -294,7 +294,9 @@ etags-regen--visit-table
(add-hook 'before-save-hook #'etags-regen--mark-as-new)
(setq etags-regen--tags-file tags-file
etags-regen--tags-root root)
- (visit-tags-table etags-regen--tags-file))
+ (visit-tags-table etags-regen--tags-file)
+ (with-current-buffer (get-file-buffer tags-file)
+ (add-hook 'kill-buffer-hook #'etags-regen--tags-cleanup nil t)))
(defun etags-regen--ctags-p ()
(string-search "Ctags"
@@ -390,7 +392,8 @@ etags-regen--mark-as-new
(defun etags-regen--tags-cleanup ()
(when etags-regen--tags-file
- (let ((buffer (get-file-buffer etags-regen--tags-file)))
+ (let ((buffer (get-file-buffer etags-regen--tags-file))
+ kill-buffer-hook)
(and buffer
(kill-buffer buffer)))
(tags-reset-tags-tables)
Reply sent
to
Dmitry Gutov <dmitry <at> gutov.dev>
:
You have taken responsibility.
(Thu, 11 Jul 2024 00:51:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Siyuan Chen <chansey97 <at> gmail.com>
:
bug acknowledged by developer.
(Thu, 11 Jul 2024 00:51:02 GMT)
Full text and
rfc822 format available.
Message #22 received at 71727-done <at> debbugs.gnu.org (full text, mbox):
Now pushed to emacs-30, please report any further problems.
On 09/07/2024 05:50, Dmitry Gutov wrote:
> On 29/06/2024 14:49, Siyuan Chen wrote:
>> > Is there are particular reason you killed the TAGS buffer?
>>
>> No. I found this bug is just because I tried to view the TAGS content
>> while editing a .c file and then closed it (I am using tab-line-mode
>> with tab-line-close-tab-function set to kill-buffer). Since then, I
>> have stopped closing the TAGS buffer.
>
> Thanks for the clarification.
>
>> Another option is to temporarily add documentation advising users not
>> to close the TAGS buffer, because closing it accidentally can result
>> in the odd behavior.
>
> I think actually a simpler approach can suffice: using kill-buffer-hook
> in the TAGS buffer. Like this:
>
> diff --git a/lisp/progmodes/etags-regen.el b/lisp/progmodes/etags-regen.el
> index dc778b14061..21ea9bfb8b3 100644
> --- a/lisp/progmodes/etags-regen.el
> +++ b/lisp/progmodes/etags-regen.el
> @@ -294,7 +294,9 @@ etags-regen--visit-table
> (add-hook 'before-save-hook #'etags-regen--mark-as-new)
> (setq etags-regen--tags-file tags-file
> etags-regen--tags-root root)
> - (visit-tags-table etags-regen--tags-file))
> + (visit-tags-table etags-regen--tags-file)
> + (with-current-buffer (get-file-buffer tags-file)
> + (add-hook 'kill-buffer-hook #'etags-regen--tags-cleanup nil t)))
>
> (defun etags-regen--ctags-p ()
> (string-search "Ctags"
> @@ -390,7 +392,8 @@ etags-regen--mark-as-new
>
> (defun etags-regen--tags-cleanup ()
> (when etags-regen--tags-file
> - (let ((buffer (get-file-buffer etags-regen--tags-file)))
> + (let ((buffer (get-file-buffer etags-regen--tags-file))
> + kill-buffer-hook)
> (and buffer
> (kill-buffer buffer)))
> (tags-reset-tags-tables)
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Thu, 08 Aug 2024 11:24:08 GMT)
Full text and
rfc822 format available.
This bug report was last modified 217 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.