Project-oriented Emacs
Emacs Lisp
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


The natural unit of software development today is the project, not
the file. Emacs excels within the file, and lately it has acquired
some IDE-like capabilities for languages that require them. But
there is still need for a simple, fast, and pervasive mechanism for
discovering and navigating projects. Such a mechanism should be
scalable to large projects, mostly free of dependencies, and
integrated with the rest of Emacs.

This is what Projector is for. Projector detects projects and
maintains tags tables for them, automatically and in the
background. Using this data, it provides interactive (Ido-powered)
navigation between buffers, files, and definitions within projects,
as well as navigation between them.

In addition, for many commands, Projector defines a version that
works on the entire project as if it were a single file. For
example, M-x `edit-project' brings up the project in a single Dired
buffer, and M-x `occur-in-project' does what it says.
(Incidentally, `occur-in-project' with `occur-edit-mode' is

To browse a list of all Projector commands, try M-x

The only key sequences Projector explicitly binds are for finding
tags. The default bindings are incompatible with how Projector
handles tags files.

Projector is written from the point of view that a project is not
just a set of files, but a mental context. Once you have opened a
project, you want to keep that project in front of you until you
explictly set it aside.

The algorithm that Emacs uses to replace killed buffers violates
this principle. Thus, when you kill a buffer, Projector arranges
for another buffer in the same project to replace the killed one.
This ensures that the current project remains current as long as

(require 'projector)
(projector-mode 1)

Try M-x `apropos-projector' for a list of commands. The variable
`projector-map' holds an example keymap you might find useful.

(global-set-key (kbd "C-z") projector-map)

Note that Projector depends heavily on lexical binding. It will not
work in versions of Emacs earlier than 24.

Projector depends on GNU find. If it is not in the path, you should
set `projector-find-program' to point to it.