On Mon, Nov 3, 2025 at 4:06 AM Arash Esbati <[email protected]> wrote:
>
> Hongyi Zhao <[email protected]> writes:
>
> > First, I'd like to express my immense appreciation for your incredible
> > work on AUCTeX. It is an indispensable tool.
>
> Thanks for your kind words.
>
> > **The Problem:**
> > In my setup, the standard automatic completion chain
> > (`completion-at-point-functions`) is unreliable for file paths inside
> > commands like `\include{./}` or `\addbibresource{./}`.
>
> What is in this case unreliable?
>
> > My extensive debugging suggests this is due to a "short-circuiting" effect:
> > 1. Higher-priority completion backends (like `lsp-mode` or
> > `cape-dabbrev`) are triggered first.
> > 2. Even if they find no relevant candidates for a prefix like `./`,
> > they seem to return a "successful but empty" result.
> > 3. This "successful" result prevents the completion chain from
> > proceeding to lower-priority, more specialized backends like
> > `completion-file-name-table`. The file completion backend is never
> > given a chance to run.
>
> You should try to assemble a minimal recipe how to reproduce this,
> starting with "emacs -Q", and then report that as a bug to the relevant
> developers.
>
> > **My Questions:**
> >
> > While my solution is effective, I am keen to know if it is the optimal
> > or most idiomatic approach.
> >
> > 1. Is my analysis of the "short-circuit" problem in the automatic
> > completion chain correct?
>
> How can others tell without knowing your setup? Again, the only way to
> track this down is a reproduceable recipe, starting with "emacs -Q".
>
> > 2. Is this manual, key-bound command the recommended way to solve
> > this problem within the AUCTeX ecosystem?
> > 3. Does AUCTeX perhaps have a built-in command, variable, or
> > mechanism to handle this exact scenario, which I may have missed in
> > the documentation?
>
> No, AUCTeX simply adds 2 functions to `completion-at-point-functions',
> so you're basically free to add or remove any function from it.
>
> > 4. Is there a more elegant way to configure
> > `completion-at-point-functions` itself to grant file completion higher
> > priority in these specific command-argument contexts?
>
> This is my setup for the cape package:
>
> (use-package cape
> :defer t
> :init
> (add-hook 'completion-at-point-functions #'cape-file 95)
>
> :custom
> (cape-file-prefix '("file:" "./" "../" "~/"))
Finally, I realized that this was the magic I had omitted in the cape
package configuration, aka, I should have added `"./" "../" "~/"` to
my cape package's cape-file-prefix setting, which will solve the
problem discussed here.
Thanks again, Arash :-)
> :bind (:map corfu-map
> ("C-c p f" . cape-file)))
>
> Not sure if it is an elegant way, but it works for me.
>
> Best, Arash
Regards,
Zhao