diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-03 17:58:42 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-03 17:58:42 -0500 |
| commit | dbce94b38f3267e59b015880d34ff31104126e47 (patch) | |
| tree | 83129465a65f221aca882cdffe36384fd1ff1aa3 /modules/dev-fkeys.el | |
| parent | 2a60405ac28c12ec63fac2032b8f87599ebfc6b6 (diff) | |
| download | dotemacs-dbce94b38f3267e59b015880d34ff31104126e47.tar.gz dotemacs-dbce94b38f3267e59b015880d34ff31104126e47.zip | |
feat(dev-fkeys): propagate prefix-arg to projectile through F4 / F6
I had four call sites passing literal nil to `projectile-compile-project' / `projectile-run-project' / `projectile-test-project'. The literal nil ignored whatever prefix arg the user gave. So `C-u F4 → Compile' or `C-u F6 → All tests' didn't actually force projectile's re-prompt — the prefix arg got swallowed at our wrapper layer.
Switched all four to `current-prefix-arg':
- `cj/--f4-dispatch' — `compile-only' and `run-only' actions.
- `cj/f4-compile-only' — the C-F4 fast path's compiled-project branch.
- `cj/f6-test-runner' — the "All tests" menu entry.
Use case: when projectile's cached cmd is wrong (typo, stale, or whatever), `C-u' on any of these forces projectile to re-prompt instead of replaying the bad cmd silently. The compile-and-run and clean-rebuild paths still pass nil to their chained projectile calls because those run inside an async `compilation-finish-functions' hook, where `current-prefix-arg' has already reverted to nil. Refining those would need to capture the prefix at entry and thread it through; left for later.
TDD: 4 new tests (one per call site) bind `current-prefix-arg' to t and verify projectile receives t. Each test failed against the literal-nil version and passes against `current-prefix-arg'.
Diffstat (limited to 'modules/dev-fkeys.el')
| -rw-r--r-- | modules/dev-fkeys.el | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/modules/dev-fkeys.el b/modules/dev-fkeys.el index 9c695674..a6f41adf 100644 --- a/modules/dev-fkeys.el +++ b/modules/dev-fkeys.el @@ -113,8 +113,8 @@ Installs a one-shot `compilation-finish-functions' hook to chain the run." "Route ACTION (a symbol from `cj/--f4-candidates') to its handler. Signals `user-error' on an unrecognized symbol or nil." (pcase action - ('compile-only (projectile-compile-project nil)) - ('run-only (projectile-run-project nil)) + ('compile-only (projectile-compile-project current-prefix-arg)) + ('run-only (projectile-run-project current-prefix-arg)) ('compile-and-run (cj/--f4-compile-and-run-impl)) ('clean-rebuild (cj/--f4-clean-rebuild-impl (cj/--f4-project-root))) ('compile-plain (call-interactively #'compile)) @@ -329,7 +329,7 @@ get a no-op message. Outside any project, falls back to interactive (let* ((root (cj/--f4-project-root)) (project-type (cj/--detect-project-type root))) (pcase project-type - ('compiled (projectile-compile-project nil)) + ('compiled (projectile-compile-project current-prefix-arg)) ('interpreted (message "C-F4: not a compiled language")) (_ (call-interactively #'compile))))) @@ -342,7 +342,7 @@ Prompts via `completing-read' between \"All tests\" (delegates to (let* ((candidates '("All tests" "Current file's tests")) (label (completing-read "F6: " candidates nil t nil nil (car candidates)))) (pcase label - ("All tests" (projectile-test-project nil)) + ("All tests" (projectile-test-project current-prefix-arg)) ("Current file's tests" (cj/--f6-current-file-tests-impl (buffer-file-name) (cj/--f4-project-root)))))) |
