Efficient Multi-Project Hacking in Emacs

News

  • I got a new keyboard!

Working with multiple project in Emacs

Today I want to try and come up with a workflow for efficiently hacking in multiple projects at the same time in Emacs.

  • Running project commands, both with project-compile and project(-async)-shell-command
  • Finding files and directories in the project
  • Searching across the project with grep/rg
  • Looking at open project buffers with ibuffer (project-list-buffers)
  • Possibly using direnv or dir-local configurations

… and more!

What is the ideal workflow for multiple projects

  • No need for multiple tabs or frames
  • Really easy to jump between projects, especially to specific files
  • Easy to switch between buffers for the same project

Customizations

(defun my/project-compilation-buffer-name-function (name-of-mode)
  (format "*compilation: %s*" (project-name (project-current))))

;; Customize compilation buffer names using the project name
(setq project-compilation-buffer-name-function #'my/project-compilation-buffer-name-function)

(defun my/project-switch-to-buffer (&optional all-buffers)
  (interactive "P")
  (if (or (not (project-current))
          all-buffers)
      (call-interactively #'switch-to-buffer)
    (call-interactively #'project-switch-to-buffer)))

;; Use our custom buffer switching function
(keymap-global-set "C-x b" #'my/project-switch-to-buffer)

;; Allow all keymap keys to be used when switching project
(setq project-switch-use-entire-map t)

To automatically index all projects under a folder path:

(project-remember-projects-under "~/Projects/Code" t)

The default keymap for project.el

Key Binding

c-x p C-b project-list-buffers C-x p ! project-shell-command C-x p & project-async-shell-command C-x p D project-dired C-x p F project-or-external-find-file C-x p G project-or-external-find-regexp C-x p b project-switch-to-buffer C-x p c project-compile C-x p d project-find-dir C-x p e project-eshell C-x p f project-find-file C-x p g project-find-regexp C-x p k project-kill-buffers C-x p o project-any-command C-x p p project-switch-project C-x p r project-query-replace-regexp C-x p s project-shell C-x p v project-vc-dir C-x p x project-execute-extended-command

Other Packages

Enjoyed this stream? Explore our hands-on courses for deeper, structured learning on Guile Scheme and more.

Get the System Crafters Newsletter
Updates on open source tools, tutorials, and community projects. We'll also occasionally let you know about new courses and resources.
Name (optional)
Email Address