Subject: Re: bug#67687: Feature request: automatic tags management

From: Eli Zaretskii <[email-masked]>
Date: Mon, 01 Jan 2024 21:25:35 +0200

> Date: Mon, 1 Jan 2024 20:48:37 +0200
> Cc: [email-masked], [email-masked], [email-masked],
>  [email-masked]
> From: Dmitry Gutov <[email-masked]>
> 
> On 01/01/2024 19:39, Eli Zaretskii wrote:
> >> Date: Mon, 1 Jan 2024 19:23:28 +0200
> >> Cc: [email-masked], [email-masked], [email-masked],
> >>   [email-masked]
> >> From: Dmitry Gutov <[email-masked]>
> >>
> >> On 01/01/2024 18:50, Eli Zaretskii wrote:
> >>>> +The exception is made when the user has already selected a tags
> >>>> +table manually (for example, using \\[visit-tags-table]).  Then
> >>>> +this mode doesn't do anything.  Reset the visited tags tables
> >>>> +using \\[tags-reset-tags-tables]."
> >>>
> >>> The above is only true for the project whose TAGS was manually
> >>> visited, right?  IOW, it's not that once the use invokes
> >>> visit-tags-table once, this mode will be effectively disabled for the
> >>> entire session, right?
> >>
> >> No, it's the latter. It's off for the whole session, just like a visited
> >> TAGS file is active for the whole session (not limited to any specific
> >> project).
> > 
> > OK, then please tweak my suggested text to explain the situation
> > correctly instead.
> 
> How about this?
> 
> If you select a tags table manually (for example, using
> \\[visit-tags-table]), then this mode will be effectively
> disabled for the entire session.  Use \\[tags-reset-tags-tables]
> to countermand the effect of a previous \\[visit-tags-table].

SGTM, thanks.

> (defun project-visit-tags ()
>    (let* ((pr (project-current))
>           (tags-file (and pr
>                           (expand-file-name "TAGS" (project-root pr)))))
>      (and tags-file
>           (file-exists-p tags-file)
>           (visit-tags-table tags-file t))))
> 
> (add-hook 'find-file-hook #'project-visit-tags)

This could work, but IMO it would be more elegant to avoid use of
find-file-hook, and instead have some data structure that maps
projects or directories to tags table files.