Skip to content

Latest commit

 

History

History
119 lines (97 loc) · 4.05 KB

README.md

File metadata and controls

119 lines (97 loc) · 4.05 KB

Csope

C source code browser. Fork of Cscope version 15.9, with various improvements.

Because cscope is good and shall not be forgotten. While the original's maintenance seems abandoned and as far as I can tell you need a PhD in autoconf to compile the latest version, Csope is alive and well.

Demo

demo

Before/After

After

after

Before

after

Features

Search for

  • symbol
  • global definition
  • assignments to specified symbol
  • functions called by specified function
  • functions calling specified function
  • text string
  • egrep pattern
  • file
  • files #including specified file

...and open with your editor.

Batch change search results interactively.

Save/load/pipe results.

It fully supports:

  • C
  • Lex
  • Yacc

Partially supports

  • C++
  • Java

Interface

            <-- Tab -->
  +--Version-----------------Case--+           +--------------------------------+
A |+--------------+---------------+|           |+------------------------------+|
| || Input Window | Result window ||           ||                              ||
| |+--------------+               ||     ?     ||                              ||
  || Mode  Window |               ||   ---->   ||            Help              ||
% ||              |               ||   <----   ||                              ||
  ||              |               ||    ...    ||                              ||
| ||              |               ||           ||                              ||
| ||              |               ||           ||                              ||
V |+--------------+---------------+|           |+------------------------------+|
  +---------------------Tool Tips--+           +--------------------------------+

Usacases

Csope shines at exploring stranger and obscure code bases due to its TUI. It sometimes gets mislabelled as a code navigation tool, but the original documentation describes it best as a "code browsing tool". Many tools can jump you to a definition or grep for patterns, but Csope is unique in that it allows for those and many other functionalities while providing you with a very comprehensible list of all results, ready to fire up your editor at just the spot. An example of its excellence is this project. The Cscope code-base used to be a total mess, fixing it would have been a lost cause, if not for Cscope itself. Well, Csope now.

Improvements/Changes

User side

  • Renamed the program, because "cscope" is annoying to type
  • Improved tui
  • GNU Readline/History integration

To the code

  • Nuked autoconf, replaced with single Makefile
  • Reorganized the control flow
  • Encapsulated changes to the TUI into display.c
  • Encapsulated searching into find.c
  • Removed "scanner.l" which seems to be an ancient version (and redundant copy) of "fscanner.l" forgotten by all
  • Removed macro hell put in place to allow compiling on a dead badger
  • Use stdbool instead of YES/NO macros
  • Saved kilobytes by stripping trailing whitespace
  • ...and much more

Installation

You will have to compile from source.

After you made sure you have the following installed:

ncurses
GNU Readline
GNU History (should come with Readline)
Lex (or GNU Flex)
Yacc (or GNU Bison)

Just run:

make

This will yield the executable "csope", which you are free to do whatever with.

Hint:

cp csope /usr/bin/

Quick start

Start browsing your project by running csope over it's source dir.

csope -s source/

Configuration

Readline

The readline integration should be complete -please let us know if not-, except for your prompt being used, which could easily break the TUIs display.

The rl_readline_name variable will be set to "Csope", so you may have conditional configurations in your .inputrc with the following format:

$if Csope
	# <whatever>
$endif

Colors

All can be configured sucklessly under "config/colors.h". Hopefully the comments are self evident.

Future features / contributor wishlist

  • providing support for other languages by integrating new lexers (e.g. ctag's)