In order to make `project-recompile' symmetric to `recompile' it should be autoloaded and it should run in the project root. This makes it possible to call `project-recompile' directly without calling `compile' first. ;;;###autoload (defun project-recompile (&optional edit-command) "Run `recompile' with appropriate buffer." (declare (interactive-only recompile)) (interactive "P") (let ((default-directory (project-root (project-current t))) (compilation-buffer-name-function (or project-compilation-buffer-name-function compilation-buffer-name-function))) (recompile edit-command))) This change also resolves the comment in project-recompile: ;; Should we error instead? When there's no ;; project-specific naming, there is no point in using ;; this command.