There are no repositories here to speak of. I use this project backend
when there is no associated vc backend with the file I'm visiting (i.e.,
project-vc fails). To make my example more concrete, consider the
following example of find-sibling-rules:
'(find-sibling-rules
(rx-let ((basename (group (1+ (not ?/)))))
;; Supplementary info.
`((,(rx "papers/" basename ".pdf" eos)
"papers/\\1_si_*.pdf" "papers/\\1_si.pdf")
(,(rx "papers/" basename "_si" (? "_" (+ num)) ".pdf" eos)
"papers/\\1.pdf"))))
With this rule in place, when I say M-x find-sibling-file when I'm
visiting ~/doc/.../papers/X.pdf, it visits ~/doc/.../papers/X_si.pdf for
me. With my sibling-file backend (see at end), I can say M-x
project-list-buffers, or C-x p b, or C-x p f to switch to related files
easily. I was thinking of writing a project-specific C-x <right>/<left>
commands to switch between project buffers easily.
I could use
find-sibling-file but using project.el comes with bonuses like
project-list-buffer, etc.
From where I'm standing, it might be more ergonomical to add a few
extra commands for the "siblings" search, and bind them to a
submap. But I'm probably missing something.
I think we have different notions of a "project." I see it as a list of
related files, but the current project backend is built upon a singular,
exact definition of a root directory inside which all files can be
found. For my use case, this root directory is a bit hard to define
since the sibling file need not be restricted to be under the same
directory (see an example of such a rule in the docstring of
find-sibling-rules). Perhaps, my idea of a project is most closest to
what the satchel package does.