#+TITLE: Cscope layer

#+TAGS: layer|tag

[[file:img/cscope.jpg]]

* Table of Contents                     :TOC_5_gh:noexport:
- [[#description][Description]]
  - [[#features][Features:]]
- [[#install][Install]]
  - [[#layer][Layer]]
  - [[#cscope][Cscope]]
  - [[#pycscope][PyCscope]]
- [[#usage][Usage]]
- [[#key-bindings][Key bindings]]

* Description
This layer provides bindings for using [[http://cscope.sourceforge.net][Cscope]] and [[https://github.com/portante/pycscope][PyCscope]] in Spacemacs.

See [[https://github.com/OpenGrok/OpenGrok/wiki/Comparison-with-Similar-Tools][here]] for a comparison between =Cscope= and other similar tools (such as gtags).

** Features:
- Tag indexing and searching for C-C++ via [[http://cscope.sourceforge.net][Cscope]]
- Tag indexing and searching for python via [[https://github.com/portante/pycscope][PyCscope]]

* Install
** Layer
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =cscope= to the existing =dotspacemacs-configuration-layers= list in this
file.

** Cscope
Enable =c-c++= layer in your =~/.spacemacs= file. Install =Cscope= through your
package manager, or download it from the [[http://cscope.sourceforge.net/#downloads][website]] and build it from source.

From package manager (for example, Ubuntu):

#+BEGIN_SRC sh
  sudo apt-get install cscope
#+END_SRC

From source:

#+BEGIN_SRC sh
  tar xvf cscope-15.8b
  cd cscope-15.8b
  ./configure
  make
  sudo make install
#+END_SRC

** PyCscope
Enable =python= layer in your =~/.spacemacs= file. Install PyCscope through pip:

#+BEGIN_SRC sh
  pip install pycscope
#+END_SRC

* Usage
Before using any helm-cscope commands, remember to create a Cscope index file.
Do it by running the command =cscope-index-files= for C and C++ projects, or the
command =cscope/run-pycscope= for Python projects, bound to ~SPC m g i~.

* Key bindings

| Key binding | Description                                   |
|-------------+-----------------------------------------------|
| ~SPC m g =~ | Find assignments to a symbol                  |
| ~SPC m g c~ | find which functions are called by a function |
| ~SPC m g C~ | find where a function is called               |
| ~SPC m g d~ | find global definition of a symbol            |
| ~SPC m g e~ | search regular expression                     |
| ~SPC m g f~ | find a file                                   |
| ~SPC m g F~ | find which files include a file               |
| ~SPC m g i~ | create Cscope index                           |
| ~SPC m g r~ | find references of a symbol                   |
| ~SPC m g x~ | search text                                   |
