<feed xmlns='http://www.w3.org/2005/Atom'>
<title>projectile.git/projectile.el, branch dirconfig-refactor</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/'/>
<entry>
<title>Soft-deprecate prefix-less dirconfig entries</title>
<updated>2026-04-25T22:06:17+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T22:06:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=6be2d06216a74b09b96315c6878fad8f3923d7e1'/>
<id>6be2d06216a74b09b96315c6878fad8f3923d7e1</id>
<content type='text'>
The implicit "any unprefixed line is an ignore pattern" rule is the
last source of subtle parser surprises — it's the reason why a
single leading space silently changes a +-keep into a literal ignore
pattern, and it makes typo'd comments slip through as ignores.

Mark these lines as :legacy-ignore in the classifier, record them
in a new prefixless-ignore slot on the dirconfig struct, and emit a
one-time warning per project listing the offending entries. The
behavior is unchanged — the lines still go into the ignore list —
but users now get a nudge to write them as -entry. The warning can
be silenced via projectile-warn-on-prefixless-dirconfig-lines.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The implicit "any unprefixed line is an ignore pattern" rule is the
last source of subtle parser surprises — it's the reason why a
single leading space silently changes a +-keep into a literal ignore
pattern, and it makes typo'd comments slip through as ignores.

Mark these lines as :legacy-ignore in the classifier, record them
in a new prefixless-ignore slot on the dirconfig struct, and emit a
one-time warning per project listing the offending entries. The
behavior is unchanged — the lines still go into the ignore list —
but users now get a nudge to write them as -entry. The warning can
be silenced via projectile-warn-on-prefixless-dirconfig-lines.
</pre>
</div>
</content>
</entry>
<entry>
<title>Split the dirconfig parser into a pure line classifier</title>
<updated>2026-04-25T22:02:52+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T22:02:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=2b49c82126c12180bbabbd929698dc35192b1a75'/>
<id>2b49c82126c12180bbabbd929698dc35192b1a75</id>
<content type='text'>
The old parser walked a temp buffer with point and pcase'd on
char-after, mixing IO, prefix dispatch, and bucket bookkeeping into
one function. Pull the dispatch out into projectile--dirconfig-classify-line,
which takes a string and returns a (BUCKET . VALUE) tag. The pure
function is unit-testable without buffer plumbing, the IO wrapper
shrinks to a one-shot read + dispatch, and the awkward
(pcase ((pred (lambda ...)) ...)) for the comment-prefix check
becomes a straightforward cond.

No behavior change.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The old parser walked a temp buffer with point and pcase'd on
char-after, mixing IO, prefix dispatch, and bucket bookkeeping into
one function. Pull the dispatch out into projectile--dirconfig-classify-line,
which takes a string and returns a (BUCKET . VALUE) tag. The pure
function is unit-testable without buffer plumbing, the IO wrapper
shrinks to a one-shot read + dispatch, and the awkward
(pcase ((pred (lambda ...)) ...)) for the comment-prefix check
becomes a straightforward cond.

No behavior change.
</pre>
</div>
</content>
</entry>
<entry>
<title>Return a projectile-dirconfig struct from the parser</title>
<updated>2026-04-25T22:01:11+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T22:01:11+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=4928cbf3306b4699f6c4a7b63f934b647d545c00'/>
<id>4928cbf3306b4699f6c4a7b63f934b647d545c00</id>
<content type='text'>
Replace the positional (KEEP IGNORE ENSURE) triple with a
cl-defstruct. Every internal call site used car/cadr/caddr to pull
out a slot, which is unreadable and error-prone — slot accessors
make the intent explicit and let cl-defstruct grow a fourth field
later without touching every consumer.

Existing callers that compared against the raw triple (a couple of
internal helper tests) are updated to construct the struct with
make-projectile-dirconfig.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Replace the positional (KEEP IGNORE ENSURE) triple with a
cl-defstruct. Every internal call site used car/cadr/caddr to pull
out a slot, which is unreadable and error-prone — slot accessors
make the intent explicit and let cl-defstruct grow a fourth field
later without touching every consumer.

Existing callers that compared against the raw triple (a couple of
internal helper tests) are updated to construct the struct with
make-projectile-dirconfig.
</pre>
</div>
</content>
</entry>
<entry>
<title>Warn when a + keep entry contains glob metacharacters</title>
<updated>2026-04-25T21:50:36+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T21:50:36+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=a8a90311044f240f9b1d4789a32d5144f8d955ec'/>
<id>a8a90311044f240f9b1d4789a32d5144f8d955ec</id>
<content type='text'>
The parser silently turns every keep entry into a directory via
file-name-as-directory, which means a user-typed +*.json or +/foo.txt
becomes "*.json/" or "foo.txt/" and quietly never matches anything.
Spot the obvious misuses (anything containing *, ?, or [) at parse
time and emit a warning so the user can correct the file or move the
pattern to an ignore/ensure rule.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The parser silently turns every keep entry into a directory via
file-name-as-directory, which means a user-typed +*.json or +/foo.txt
becomes "*.json/" or "foo.txt/" and quietly never matches anything.
Spot the obvious misuses (anything containing *, ?, or [) at parse
time and emit a warning so the user can correct the file or move the
pattern to an ignore/ensure rule.
</pre>
</div>
</content>
</entry>
<entry>
<title>Warn when alien indexing bypasses a populated .projectile</title>
<updated>2026-04-25T18:00:09+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T18:00:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=5e4471b10dc59274e7608489b28897a69c585cc8'/>
<id>5e4471b10dc59274e7608489b28897a69c585cc8</id>
<content type='text'>
Under alien indexing the dirconfig file is silently ignored, which
is the most common confusion in the issue tracker (#1322, #1075,
#1534, #1941). Show a one-shot display-warning the first time we
index a project where alien mode meets a non-empty .projectile.

The new projectile-warn-when-dirconfig-is-ignored option lets users
who already understand the trade-off silence the warning.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Under alien indexing the dirconfig file is silently ignored, which
is the most common confusion in the issue tracker (#1322, #1075,
#1534, #1941). Show a one-shot display-warning the first time we
index a project where alien mode meets a non-empty .projectile.

The new projectile-warn-when-dirconfig-is-ignored option lets users
who already understand the trade-off silence the warning.
</pre>
</div>
</content>
</entry>
<entry>
<title>Document the dirconfig format more precisely</title>
<updated>2026-04-25T17:56:57+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T17:56:57+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=54387baa2e2bd7af9866abd27f5454da71cdbd22'/>
<id>54387baa2e2bd7af9866abd27f5454da71cdbd22</id>
<content type='text'>
The parser docstring only described + and - prefixes even though the
function returns a 3-tuple including the ! ensure bucket. Fill that
in, and pull the path-vs-glob distinction out of the prose in
projects.adoc into a subsection of its own — that ambiguity is at
the root of recurring confusion (#740, #1109, #680, #1941).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The parser docstring only described + and - prefixes even though the
function returns a 3-tuple including the ! ensure bucket. Fill that
in, and pull the path-vs-glob distinction out of the prose in
projects.adoc into a subsection of its own — that ambiguity is at
the root of recurring confusion (#740, #1109, #680, #1941).
</pre>
</div>
</content>
</entry>
<entry>
<title>Skip leading whitespace in dirconfig prefix dispatch</title>
<updated>2026-04-25T17:55:30+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@toptal.com</email>
</author>
<published>2026-04-25T17:55:30+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=930564202e350d5d6c73d6fc765b1cc29cb48f38'/>
<id>930564202e350d5d6c73d6fc765b1cc29cb48f38</id>
<content type='text'>
A user accidentally typing " -path/" or "  # comment" in .projectile
would have the line silently routed to the ignore bucket with the
prefix character left intact, because the parser dispatched on the
first character of the line without trimming. Skip leading spaces and
tabs before the pcase so the +/-/! and comment-prefix markers are
matched regardless of indentation. Reported in #1508.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A user accidentally typing " -path/" or "  # comment" in .projectile
would have the line silently routed to the ignore bucket with the
prefix character left intact, because the parser dispatched on the
first character of the line without trimming. Skip leading spaces and
tabs before the pcase so the +/-/! and comment-prefix markers are
matched regardless of indentation. Reported in #1508.
</pre>
</div>
</content>
</entry>
<entry>
<title>Disambiguate process buffer names for same-named projects</title>
<updated>2026-03-10T08:58:58+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@batsov.dev</email>
</author>
<published>2026-02-15T15:07:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=f8be23b266aec7108fb4b80410623cd50ba8ded9'/>
<id>f8be23b266aec7108fb4b80410623cd50ba8ded9</id>
<content type='text'>
Fixes #1815
Fixes #1715

When two projects share the same name (e.g. both named "src"),
projectile-generate-process-name now detects the collision and
falls back to using the abbreviated project path in the buffer
name instead of just the project name.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #1815
Fixes #1715

When two projects share the same name (e.g. both named "src"),
projectile-generate-process-name now detects the collision and
falls back to using the abbreviated project path in the buffer
name instead of just the project name.
</pre>
</div>
</content>
</entry>
<entry>
<title>Check globally-ignored-file-suffixes in native indexing</title>
<updated>2026-03-10T08:57:24+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@batsov.dev</email>
</author>
<published>2026-02-15T15:09:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=659eda8ee7159f70ceef278060e9acd52ed01c6a'/>
<id>659eda8ee7159f70ceef278060e9acd52ed01c6a</id>
<content type='text'>
Fixes #1959

projectile-ignored-file-p now checks projectile-globally-ignored-file-suffixes
in addition to projectile-globally-ignored-files and file patterns.
Previously the suffix check only happened in projectile-remove-ignored
which is used by hybrid indexing but not native indexing.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #1959

projectile-ignored-file-p now checks projectile-globally-ignored-file-suffixes
in addition to projectile-globally-ignored-files and file patterns.
Previously the suffix check only happened in projectile-remove-ignored
which is used by hybrid indexing but not native indexing.
</pre>
</div>
</content>
</entry>
<entry>
<title>Allow projectile-dired commands to prompt for a project</title>
<updated>2026-03-10T08:56:36+00:00</updated>
<author>
<name>Bozhidar Batsov</name>
<email>bozhidar@batsov.dev</email>
</author>
<published>2026-02-15T16:22:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.tews.dev/cgit/projectile.git/commit/?id=947bb9eada4ed8c57777dd7027d1d0b373b3b0db'/>
<id>947bb9eada4ed8c57777dd7027d1d0b373b3b0db</id>
<content type='text'>
Closes #1684

With a prefix argument, projectile-dired, projectile-dired-other-window,
and projectile-dired-other-frame now prompt for a known project to open
in dired, rather than always using the current project.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Closes #1684

With a prefix argument, projectile-dired, projectile-dired-other-window,
and projectile-dired-other-frame now prompt for a known project to open
in dired, rather than always using the current project.
</pre>
</div>
</content>
</entry>
</feed>
