Projectile and Global in Emacs

Today I started using my Mac at work for java programming. When moving from windows to mac I also wanted to ditch IntelliJ and start using Emacs for java programming. This will definitely require a bunch of custom Emacs helpers in order to help navigate large projects.


One of the first things I needed to find was a project manager that allowed me to search only files in a certain project. I want to be able to grep from the project root and open files from the project root. It looks like projectile solves both problems!


Along with projectile comes GNU Global support! Getting this just involved installing ctags and global:

brew install ctags
brew install global --with-exuberant-ctags

Then I added the ggtags project to emacs (via Cask as normal), and added ggtags-mode to my java config:

(add-hook 'java-mode-hook (lambda ()
                            (ggtags-mode 1)
                            (setq c-basic-offset 4
                                  tab-width 4
                                  indent-tabs-mode t)))

Now when I visit a java file I can generate (or regenerate) my tag file with C-c p R. Once that is done I can navigate tags via normal tags commands in Emacs as well as special ggtags commands that make use of global’s extra features!