Eproject.el is a simplistic project management tool. It doesn’t have much functionality, but what it does have is just what I want: a fast way to switch between files in a project. Eproject also comes with a few other utilities, like the ability to keep track of project metadata, or a utility that opens all files in a project. However, there are two main uses: project-specific hooks and ido-based switching on other project files.
Eproject doesn’t define project types for you; you have to do this yourself. For example, to define a java project you could have the following project definition:
(define-project-type java (generic) (look-for "build.xml") :relevant-files ("\\.java" ))
Whenever you open a java, this will first look for a build.xml somewhere up the source tree. All files above that in the source tree that match the relevant-files regexp. If the file you opened is in the project, eproject-minor-mode will turn on. You can also define projects to inherit from other projects to look for metadata; inheriting from (generic) will provide all metadata you need for a complete project. You can also define your own selector, using something other than look-for and a regex, although this solution is usually pretty good.
Eproject-minor-mode will bind two additional keys - C-x C-f, and C-x C-b. C-x C-f will call eproject-find-file, which will present an ido menu containing all the files in the project - quite handy if you need to switch to a file in a different directory. C-x C-b will open an ibuffer window containing only files in the current project - I haven’t yet used this, but it will allow you to do things like query-replace over your entire project.
How do you enable eproject? Well, after downloading it and adding it’s location to your load-path, just say:
(require 'eproject)
For more information on it, check out the github page at http://github.com/jrockway/eproject/tree/master. There’s also a lot of usage documentation in the top of eproject.el that you might want to read to get a better idea of how it works.