*CCTree.txt*	Plugin for C Call-Tree Explorer *CCTree*

Author: Hari Rangarajan (First.Last AT gmail DOT com)
Last Change: 20 May 2011

CCTree version 1.51

For Vim version 7.0 and above

==============================================================================

1. Overview                                     |CCTree-overview|
2. Downloads                                    |CCTree-download|
3. Installation                                 |CCTree-installation|
4. Configuration				|CCTree-configuration|
5. Features                                     |CCTree-features|
6. Limitations                                  |CCTree-limitations|
7. FAQ & TIPS                                   |CCTree-faq|
8. History                                      |CCTree-history|
9. Thanks                                       |CCTree-thanks|
 
==============================================================================
1. Overview~
                                                *CCTree-overview*

Plugin generates dependency-trees for symbols using a cscope database in Vim.
Basic cross-referencing includes functions and macros. Enhanced symbol
processing covers macros, typedefs, enums, and global variables.

Requires Cscope and works best with C code.

==============================================================================
2. Downloads~
                                                *CCTree-download*

You can download the latest release of the script from this url :
    http://www.vim.org/scripts/script.php?script_id=2368


Cscope packages can be found here:
    http://cscope.sourceforge.net/
    http://code.google.com/p/cscope-win32/
    

==============================================================================
3. Installation~
                                                *CCTree-installation*

Copy this file to ~/.vim/plugins/ or to /vimfiles/plugins/  (on Win32
platforms) 

It should also be possible to load it as a filetype plugin ~/.vim/ftplugin/c/
Need to set :filetype plugin on 


==============================================================================
CONFIGURATION					*CCTree-configuration*
4. Options~

You can customize behavior by changing the following variable settings
                    
4.1.1 Cscope Symbol Database~
                                                *CCTreeCscopeDb*

Cscope database file, g:CCTreeCscopeDb = "cscope.out"

4.1.2 Call-tree Depth~
                                                *CCTreeRecursiveDepth* 
Maximum call levels,   g:CCTreeRecursiveDepth = 3

4.1.3 Call-tree Minimum Visible Depth~
                                                *CCTreeMinVisibleDepth*
Maximum visible(unfolded) level, g:CCTreeMinVisibleDepth = 3

4.1.4 Call-tree window display~

4.4.1 Orientation~
                                                *CCTreeOrientation*
Orientation of window,  g:CCTreeOrientation = "leftabove"
 (standard vim options for split: [right|left][above|below])

4.5 Direction~
                                                *CCTreeWindowVertical* 
Use Vertical window, g:CCTreeWindowVertical = 1

4.5.1 Dimensions~

These settings determine the layout of the CCTree preview window.

4.5.2 Horizontal Window Settings~
                                                *CCTreeWindowHeight* 
 Horizontal window, g:CCTreeWindowHeight, default is -1.

4.5.2 Vertical Window Settings~
                                                *CCTreeWindowMinWidth* 
                                                *CCTreeWindowWidth* 
 Minimum width for window, g:CCTreeWindowMinWidth = 40.
 g:CCTreeWindowWidth = -1, auto-select best width to fit.


4.6 Call-tree display format~
                                                *CCTreeDisplayMode*
Display format, g:CCTreeDisplayMode, default: 1

Values: 1 -- Ultra-compact (takes minimum screen width)
        2 -- Compact       (Takes little more space)
        3 -- Wide          (Takes copious amounts of space)

For vertical splits, 1 and 2 are good, while 3 is good for horizontal
displays.

4.7. Dynamic Call-tree highlighting~
                                                *CCTreeHilightCallTree*

Enable/disable dynamic call-tree highlighting, default: 1


4.7.1 Syntax items~
                                               *CCTreeSymbol* *CCTreeHiSymbol*
CCTreeSymbol is the symbol name.
CCTreeHiSymbol is the highlighted call tree functions.

                                               *CCTreeMarkers* *CCTreeHiMarkers*
CCTreeMarkers include  "|","+--->".
CCTreeHiMarkers is the same as CCTreeMarkers except these denote the 
highlighted call-tree.

    
   
==============================================================================
COMMAND LIST 						*CCTree-commands-list*

Database Management~
      CCTreeLoadDB                <dbname>
      CCTreeAppendDB              <dbname>
      CCTreeUnLoadDB             
      CCTreeShowLoadedDBs
				Refer to |CCTree-usage|

Native Xref Database~
      CCTreeLoadXRefDB		 <dbname>
      CCTreeSaveXRefDB		 <dbname>
				
				Refer to |CCTree-fast-loading|
	
Symbol tracing~
      CCTreeTraceForward          <symbolname>
      CCTreeTraceReverse          <symbolname>     
      CCTreeRecurseDepthPlus     
      CCTreeRecurseDepthMinus    
				Refer to |CCTree-explore-source|
Trace Management~
      CCTreeWindowSaveCopy
      CCTreeWindowHiCallTree   
				Refer to |CCTree-preview-window|

Dynamic configuration~
      CCTreeOptsEnable <option>    (<tab> for auto-complete)
      CCTreeOptsDisable <option>   (<tab> for auto-complete)
      CCTreeOptsToggle <option>    (<tab> for auto-complete)
      Options~
            DynamicTreeHiLights: Control dynamic tree highlighting
	    UseUnicodeSymbols: 	 Use of UTF-8 special characters for tree
            UseConceal: Use (+Conceal) feature instead of 'ignore'
                    syntax highlighting. Allows CCTree window
                    to be exported in HTML without syntax markup
                    characters. (Vim 7.3+ only)
                                            *CCTree-Enhanced-Symbol-Processing*
            EnhancedSymbolProcessing: Cross-reference enums, macros,
                    global variables, typedefs (WARNING: Database
                    processing speeds will be slow).
 
SHORTCUT KEYS						*CCTree-Key-Map*	
Default Mappings~
							*CCTree-Default-Key-Map*   
      Get reverse call tree for symbol  <C-\><
      Get forward call tree for symbol  <C-\>>
      Increase depth of tree and update <C-\>=
      Decrease depth of tree and update <C-\>-

      Open symbol in other window       <CR>
      Preview symbol in other window    <Ctrl-P>

      Save copy of preview window       <C-\>y
      Highlight current call-tree flow  <C-l>
      Compress(Fold) call tree view     zs
      (This is useful for viewing long
       call trees which span across
       multiple pages)

Custom user-mappings	
							*CCTree-Custom-Key-Map*
    Users can custom-map the short-cut keys by 
    overriding the following variables in their
    Vim start-up configuration            
>
     let g:CCTreeKeyTraceForwardTree = '<C-\>>' 
     let g:CCTreeKeyTraceReverseTree = '<C-\><' 
     let g:CCTreeKeyHilightTree = '<C-l>'        " Static highlighting
     let g:CCTreeKeySaveWindow = '<C-\>y' 
     let g:CCTreeKeyToggleWindow = '<C-\>w' 
     let g:CCTreeKeyCompressTree = 'zs'     " Compress call-tree 
     let g:CCTreeKeyDepthPlus = '<C-\>=' 
     let g:CCTreeKeyDepthMinus = '<C-\>-'
<  

==============================================================================
FEATURES 						*CCTree-features*

5.1. Symbol database~
							*CCTree-usage*
Build cscope database, for example:
> cscope -b -i cscope.files
 [Tip: add -c option to build uncompressed databases for faster
    load speeds]

Load database~
>
	:CCTreeLoadDB
<
	(Please note that it might take a while depending on the 
	 database size)

A database name, i.e., my_cscope.out, can be specified with the command. If
not provided, a prompt will ask for the filename; default is cscope.out.
	
Unload database ~
 >
 	:CCTreeUnLoadDB
<
Append database~
 >
	:CCTreeAppendDB
<
    Allows multiple cscope files to be loaded and cross-referenced
    Illustration: >
    :CCTreeAppendDB ./cscope.out
    :CCTreeAppendDB ./dir1/cscope.out
    :CCTreeAppendDB ./dir2/cscope.out
<
    A database name, i.e., my_cscope.out, can be specified with 
    the command. If not provided, a prompt will ask for the 
    filename; default is cscope.out.

FASTER DATABASE LOADING					*CCTree-fast-loading*

Save native Xref Db~
>
	:CCTreeSaveXRefDb  cctree.out
<
This command will save the cross-referenced symbols currently loaded into 
memory into a serialized format  for faster loading.

Load native XRef Db~
>
	:CCTreeLoadXRefDb  cctree.out
<
This command will load cross-referenced symbols from the previously saved
native format database.

ccglue~
                                                       *CCTree-ccglue*

Check out the ccglue project at http://ccglue.sourceforge.net for an external
tool that can build cctree-compatible xref databases.


5.2. Exploring source-code~
							*CCTree-explore-source*

Get reverse call tree for symbol  <C-\><
>
	:CCTreeTraceReverse <symbolname>     
<

Get forward call tree for symbol  <C-\>>
>
	:CCTreeTraceForward <symbolname>
<
Increase depth of tree and update <C-\>=
>
	:CCTreeRecurseDepthPlus     
<
Decrease depth of tree and update <C-\>-
>
	:CCTreeRecurseDepthMinus    
<
5.3. Preview Window~
						 *CCTree-preview-window*
Open symbol in other window       <CR>
Preview symbol in other window    <Ctrl-P>

5.4. Syntax Coloring~
						 *CCTree-Syntax*
CCTreeHiXXXX allows dynamic highlighting of the call-tree.  To observe the
effect, move the cursor to the function to highlight the current call-tree.
This option can be turned off using the setting, *CCTreeHilightCallTree* . 

For faster highlighting, the value of 'updatetime' can be changed.

5.5 Support for large database files~
				*CCTree-LargeDatabase* *CCTree-LargeFile*
Vimscript does not have an API for reading files line-by-line. This
becomes a problem when parsing large databases. CCTree can overcome
the limitation using an external utility (i.e., GNU coreutils: split)
or VimScript's perl interpreter interface (:version must indicate +perl)

5.5.1 Using GNU Coreutils (split/cat)~
				*CCTree-Tools-split* *CCTree-Tools-cat*
	The following settings are tailored to suit GNU coreutils split; the
default settings should work with no changes on typical linux/unix distros.
Monopoly OSes will require installation of unixutils or equivalent.

External command is setup with the following parameters~
>
	let g:CCTreeSplitProgCmd = 
		'PROG_SPLIT SPLIT_OPT SPLIT_SIZE IN_FILE OUT_FILE_PREFIX'
<

Break-down of individual parameters~
The split utility is assumed to be on the path; otherwise, specify full path
	g:CCTreeSplitProg = 'split'

Option for splitting files (-C or -l)~
>
	let g:CCTreeSplitProgOption = '-C'
<
If split program does not support -C, then this parameter must be set to 
the number of lines in the split files
>
	let g:CCTreeDbFileSplitLines = -1
<
Largest filesize Vimscript can handle; file sizes greater than this will
be temporarily split
>
	let g:CCTreeDbFileMaxSize  = 40000000 (40 Mbytes)
<
Sample system command~
Typical:
>
	split -C 40000000 inputFile outputFilePrefix
<
 When g:CCTreeDbFileSplitLines is set to 10000 (-C options will be ignored)
>
	split -l 10000 inputFile outputFilePrefix
<
						*CCTree-Tools-Perl*
						*CCTree-Tools-Perl-LargeFile*
Enabling perl interface~

	By default, perl usage is disabled. Set
>
	let g:CCTreeUsePerl = 1 
<		 to enable the perl interface.

	Perl interface is typically faster than native Vimscript.
	This option can be used independent of the file size

	For more info on setting up perl interface
	:help |perl-using| or :help |perl-dynamic|

5.6.	Miscellaneous				*CCTree-Miscellaneous*

	UTF-8 usage				*CCTree-UTF8-Symbols*
            UTF-8 symbols should work fine on the majority of
        X11 systems; however, some terminals might cause problems.

        To use symbols for drawing the tree, this option can be enabled.
>
            let g:CCTreeUseUTF8Symbols = 1 
<
        The options interface (CCTreeOptsxxx) can be used to 
        modify options on-the-fly.

==============================================================================
6. Limitations~
                                                *CCTree-limitations*

The following are known limitations:

Basic Symbol Processing:
  (1) The accuracy of the call-tree will only be as good as the cscope database
generation.  (NOTE: Different flavors of Cscope have some known limitations
due to the lexical analysis engine. This results in incorrectly identified
function blocks, etc.)

Enhanced Symbol Processing:
  (1) Cscope does not mark-up nameless enums correctly; hence,
CCTree cannot recognize nameless enum symbols.


==============================================================================
7. FAQ~
                                                *CCTree-faq*

+ I see strange characters "!#@" on my screen when dynamic highlighting is
enabled. Why do I see them?
  
Check :hi ignore. You will see something like
hi ignore ctermfg=white guifg=bg
    
  For console, white must be your background color; for GUI, guifg must be set
to bg.

==============================================================================
8. History~
                                                *CCTree-history*
Version 1.51: May 18, 2011
      1. Robust error reporting when external (split/cat) utils fail

Version 1.50: May 6, 2011
      1. Support cross-referencing of global variables, macros,
         enums, and typedefs.

Version 1.40: April 22, 2011
      1. Maintain order of functions called during forward tracing

Version 1.39: April 18, 2011
      1. Use +Conceal feature for highlighting (only Vim 7.3)

Version 1.33: April 5, 2011
      1. Load and trace CCTree native XRefDb directly from disk
      2. Fix AppendDB command when 'ignorecase' is set

Version 1.26: March 28, 2011
      1. Fix macro cross-referencing limitation
      2. Correct native xref file format

Version 1.21: March 21, 2011
      1. Support serialization of loaded
                cscope databases (for faster loading)

Version 1.07: March 09, 2011
      1. Fix new keymaps incorrectly applied to buffer
      2. CCTreeOptsToggle command for toggling options

Version 1.04: March 06, 2011
      1. Customization for key mappings
      2. Dynamic configuration of UI variables
      3. Folding long call-trees to show current path dynamically

Version 1.01: March 04, 2011
      1. Make UTF-8 symbols for tree optional

Version 1.00: March 02, 2011
      1. Staging release for upcoming features
         - Complete refactoring of code to take 
                advantage of VimScript's OO features
      2. Faster decompression of symbols
      3. Display related changes
         - Use of unicode symbols for tree
      4. Bugfixes related to multi-database loading
               
Version 0.90: February 18, 2011
      1. Support for large databases using external split utility or perl
         interface

Version 0.85: February 9, 2011
      1. Significant increase in database loading and decompression speeds

Version 0.80: February 4, 2011
      1. Reduce memory usage by removing unused xref symbols

Version 0.75: June 23, 2010
	  1. Support for saving CCTree preview window; multiple 
    	CCTree windows can now be open

ersion 0.71: May 11, 2010
	  1. Fix script bug

Version 0.70: May 8, 2010
	  1. Functionality to load multiple cscope databases

Version 0.65: July 12, 2009
	  1. Toggle preview window

Version 0.61: December 24, 2008
      1. Fixed bug when processing include files
      2. Remove 'set ruler' option

Version 0.60: November 26, 2008
      1. Added support for source-file dependency tree

Version 0.50: October 17, 2008
      1. Optimizations for compact memory foot-print and 
         improved compressed-database load speeds

Version 0.41: October 6, 2008
       1. Minor fix: Compressed cscope databases will load
       incorrectly if encoding is not 8-bit

Version 0.4: September 28, 2008
      1. Rewrite of display-related code
      2. New syntax hightlighting
      3. Dynamic highlighting for call-trees
      4. Support for new window modes (vertical, horizontal)  
      5. New display format option for compact or wide call-trees
      6. Preview window fix

Version 0.3: September 21, 2008
      1. Support compressed cscope databases
      2. Display window related bugs fixed
      3. More intuitive display and folding capabilities
    
Version 0.2: September 12, 2008
      (Patches from Yegappan Lakshmanan, thanks!)
      1. Support for using the plugin in Vi-compatible mode
      2. Filtering out unwanted lines before processing the db
      3. Command-line completion for the commands
      4. Using the cscope db from any directory

Version 0.1: August 31,2008
      1. Cross-referencing support for only functions and macros
         (Note: Functions inside macro definitions will be incorrectly
         attributed to the top level calling function)


==============================================================================
9. Thanks~
                                                 *CCTree-thanks*


   Qaiser Durrani                 (ver 1.51 -- Reporting issues with SunOS)
   Ben Fritz                      (ver 1.39 -- Suggestion/Testing for 
                                                        conceal feature)
   Ben Fritz                      (ver 1.26 -- Bug report)
   Frank Chang                    (ver 1.0x -- testing/UI enhancement 
                                                            ideas/bug fixes)
   Arun Chaganty/Timo Tiefel	  (Ver 0.60 -- bug report)
   Michael Wookey                 (Ver 0.40 -- Testing/bug report/patches)
   Yegappan Lakshmanan            (Ver 0.20 -- Patches)

   The Vim Community, ofcourse :)


vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:

