# Changelog

## master (unreleased)

### New features

* [#1964](https://github.com/bbatsov/projectile/issues/1964): Implement `project-name` and `project-buffers` methods for the `project.el` integration, so that code using `project.el` APIs returns correct results for Projectile-managed projects.
* [#1837](https://github.com/bbatsov/projectile/issues/1837): Add `eat` project terminal commands with keybindings `x x` and `x 4 x`.
* Add keybinding `A` (in the projectile command map) and a menu entry for `projectile-add-known-project`.

### Bugs fixed

* Fix `projectile-files-via-ext-command` executing empty string as shell command for non-git VCS sub-projects.
* Fix `projectile-select-files` crashing on filenames with regexp metacharacters by using `string-search` instead of `string-match`.
* Fix `projectile-find-references` using internal `xref--show-xrefs` API whose signature changed across Emacs versions.
* Fix `projectile-determine-find-tag-fn` falling back to `find-tag` which was removed in Emacs 29; now falls back to `xref-find-definitions`.
* Fix `projectile-files-to-ensure` expanding wildcards relative to the current buffer instead of the project root.
* Fix `projectile-ignored-project-p` failing to match abbreviated paths against truename-resolved ignored projects list.
* Fix `projectile-edit-dir-locals` saving partial `.dir-locals.el` content when the user aborts skeleton insertion with `C-g`.
* Fix `projectile--other-extension-files` sort comparator ignoring its second argument, producing undefined ordering; replaced with a stable partition.
* Fix `projectile-toggle-project-read-only` operating on the wrong buffer after `add-dir-local-variable` by wrapping in `save-selected-window`.
* Fix `projectile-cache-current-file` calling `projectile-project-root` twice instead of reusing the already-resolved value.
* Fix `projectile-load-project-cache` storing nil in cache on corrupt/empty cache files, preventing future reload attempts.
* Fix `projectile--cmake-command-presets` using `mapcar` instead of `mapcan`, producing nested lists for included presets.
* Fix `projectile--eat` ignoring the `new-process` argument when generating buffer names.
* Fix `projectile-check-vcs-status` hanging indefinitely by adding a 30-second timeout to its busy-wait loop.
* Fix `projectile-sort-by-modification-time` and `projectile-sort-by-access-time` crashing on deleted files (nil `file-attributes`).
* Fix `projectile-recentf-files` failing to match files when the project root contains symlinks.
* Fix `projectile--run-project-cmd` passing nil to `compile` when no command is configured and `compilation-read-command` is nil — now signals a clear `user-error`.
* Fix `projectile--merge-related-files-fns` using destructive `nconc` which could corrupt shared data and silently drop values when the existing list was nil.
* Fix `projectile-configure-command` format call passing an unused `compile-dir` argument.
* Fix `projectile-update-project-type` resetting the project type cache with wrong hash table `:test` (used default `eql` instead of `equal` for string keys).
* Fix `projectile-find-file-hook-function` running `projectile-maybe-limit-project-file-buffers` on TRAMP buffers, causing potential hangs on slow connections.
* Use `expand-file-name` instead of `file-truename` in `projectile-compilation-dir` to avoid unnecessary symlink resolution (and TRAMP network round-trips).
* Use non-destructive `append` instead of `nconc` in `projectile-get-all-sub-projects` to avoid mutating caller data.
* Add `safe-local-variable` predicates for project settings variables (`projectile-project-test-suffix`, `projectile-project-compilation-cmd`, etc.) so they can be set in `.dir-locals.el` without prompting.
* [#1962](https://github.com/bbatsov/projectile/issues/1962): Fix `projectile-get-other-files` crashing when a candidate other-file lives in the project root directory.
* [#1816](https://github.com/bbatsov/projectile/issues/1816): Fix `projectile-expand-file-name-wildcard` failing when a parent directory is not readable (e.g. iCloud Drive, Termux).
...
...
