A pretty simple (but, at least for me, effective) backend for Emacs 25 xref library using GNU Global. ## Overview Emacs 25 introduces a new (and experimental) `xref' package. The package aims to provide a standardized access to cross-referencing operations, while allowing the implementation of different back-ends which implement that cross-referencing using different mechanisms. The gxref package implements an xref backend using the GNU Global tool. ## Prerequisites: * GNU Global. * Emacs version >= 25.1 ## Installation Gxref is now available on MELPA. Once you get [MELPA](https://melpa.org/#/getting-started) set up, you can install gxref by typing ``` M-x package-install RET gxref RET ``` See [here][Installation] if you prefer to install manually. ## Setting up. Add something like the following to your init.el file: ```elisp (add-to-list 'xref-backend-functions 'gxref-xref-backend) ``` This will add gxref as a backend for xref functions. The backend will be used whenever a GNU Global project is detected. That is, whenever a GTAGS database file exists in the current directory or above it, or an explicit project [was set](#setting_project). ## Usage ### Using gxref to locate tags After [setup](#setup), invoking any of the xref functions will use GNU Global whenever a GTAGS file can be located. By default, xref functions are bound as follows: | Function | Binding | |:---------------------:|:--------:| | xref-find-definitions | M-. | | xref-find-references | M-? | | xref-find-apropos | C-M-. | | xref-pop-marker-stack | M-, | If a GTAGS file can't be located for the current buffer, xref will fall back to whatever other backends it's configured to try. ### Project root directory. By default, gxref searches for the root directory of the project, and the GTAGS database file, by looking in the current directory, and then upwards through parent directories until the database is located. If you prefer, you can explicitly set the project directory. This can be done either interactively, by typing `M-x gxref-set-project-dir RET`, or by setting the variable `gxref-gtags-root-dir` to the GTAGS directory. You can also set up `gxref-gtags-root-dir` as a file-local or a dir-local variable. ### Configuring gxref gxref can be customized in several ways. use `M-x customize-group RET gxref RET` to start. Additionally, the following variables can be used to affect the execution of GNU Global. You can set them either globally, or as file-local or dir-local variables: - gxref-gtags-conf The GTAGS/GLOBAL configuration file to use. - gxref-gtags-label GTAGS/GLOBAL Configuration label - gxref-gtags-lib-path the library path. Passed to GNU Global using the GTAGSLIBPATH environment variable. ## Bug reports If you find any bugs, please tell me about it at the [gxref home page][Repository] ## Disclaimers: Because the xref API in Emacs 25.1 is experimental, it's likely to change in ways that will break this package. I will try to keep up with API changes. ## Source and License Package source can be found in the github repository [here][Repository]. It is released under version 3 of the GPL, which you can find [here][License] [Repository]: https://github.com/dedi/gxref [Installation]: https://github.com/dedi/gxref/wiki/Installing-and-setting-up-gxref [License]: https://www.gnu.org/licenses/gpl-3.0.en.html