GNU bug report logs - #71727
Deleting TAGS buffer will cause `etags-regen--update-file` doesn't work

Previous Next

Package: emacs;

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.

View this report as an mbox folder, status mbox, maintainer mbox


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):

From: Siyuan Chen <chansey97 <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: Deleting TAGS buffer will cause `etags-regen--update-file` doesn't
 work
Date: Sun, 23 Jun 2024 07:55:49 +0800
[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: Eli Zaretskii <eliz <at> gnu.org>
To: Siyuan Chen <chansey97 <at> gmail.com>, Dmitry Gutov <dmitry <at> gutov.dev>
Cc: 71727 <at> debbugs.gnu.org
Subject: Re: bug#71727: Deleting TAGS buffer will cause
 `etags-regen--update-file` doesn't work
Date: Thu, 27 Jun 2024 11:49:46 +0300
> 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):

From: Dmitry Gutov <dmitry <at> gutov.dev>
To: Siyuan Chen <chansey97 <at> gmail.com>, 71727 <at> debbugs.gnu.org
Subject: Re: bug#71727: Deleting TAGS buffer will cause
 `etags-regen--update-file` doesn't work
Date: Fri, 28 Jun 2024 04:23:32 +0300
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):

From: Siyuan Chen <chansey97 <at> gmail.com>
To: Dmitry Gutov <dmitry <at> gutov.dev>
Cc: 71727 <at> debbugs.gnu.org
Subject: Re: bug#71727: Deleting TAGS buffer will cause
 `etags-regen--update-file` doesn't work
Date: Sat, 29 Jun 2024 19:49:50 +0800
[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):

From: Dmitry Gutov <dmitry <at> gutov.dev>
To: Siyuan Chen <chansey97 <at> gmail.com>
Cc: 71727 <at> debbugs.gnu.org
Subject: Re: bug#71727: Deleting TAGS buffer will cause
 `etags-regen--update-file` doesn't work
Date: Tue, 9 Jul 2024 05:50:12 +0300
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):

From: Dmitry Gutov <dmitry <at> gutov.dev>
To: Siyuan Chen <chansey97 <at> gmail.com>
Cc: 71727-done <at> debbugs.gnu.org
Subject: Re: bug#71727: Deleting TAGS buffer will cause
 `etags-regen--update-file` doesn't work
Date: Thu, 11 Jul 2024 03:50:15 +0300
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 70 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.