]> oss.titaniummirror.com Git - vim-mkbuild.git/commitdiff
Add new function mkbuild#SelectXref()
authorR. Steve McKown <rsmckown@gmail.com>
Tue, 21 Jul 2015 20:53:13 +0000 (14:53 -0600)
committerR. Steve McKown <rsmckown@gmail.com>
Tue, 21 Jul 2015 20:53:13 +0000 (14:53 -0600)
doc/mkbuild.txt
plugin/mkbuild.vim

index 4f658ffe5574ad4144becc2ca6f79e16d42dc2a4..c29f7115c117cec30906d2fc6d3c41476a71f468 100644 (file)
@@ -8,8 +8,11 @@ This plugin is only available if 'compatible' is not set.
 INTRODUCTION                                    *mkbuild*
 
 This plugin provides features for working with code using the mkbuild build
-system.  The only tool currently available is a method to select files from
-the project using dmenu, which will also work without mkbuild.
+system.
+
+
+The first tool is a method to select files from the project using dmenu, which
+will also work without mkbuild.
 
 Map mkbuild#DmenuOpen(cmd) to some key, such as:
 nnoremap <leader>e :call mkbuild#DmenuOpen('e')<CR>
@@ -37,4 +40,13 @@ following priority order:
 
 3. Perform a 'find . -type f' in the current directory.
 
+
+The second tool is a method to allow switching to a new tags and/or cscope
+database.  This is especially useful for mkbuild, which can build the same
+code for multiple platforms, and each platform build directory contains its
+own tags and cscope database files.
+
+Map mkbuild#SelectXref() to some key, such as:
+nnoremap <leader>x :call mkbuild#SelectXref()<CR>
+
  vim:tw=78:ts=8:ft=help:norl:
index fd92caa28683d51da22f310305e029dd17fee78f..82c03a2d9bf1c8271679c1a48b0d8fd494bb5470 100644 (file)
@@ -138,3 +138,29 @@ function! mkbuild#DmenuOpen(cmd)
     execute a:cmd . " " . fname
   endif
 endfunction
+
+" Look recursively from the current directory for directories containing a
+" tags files and/or a cscope database.  Allow the user to select one of these
+" directories.  Both its tag file and its associated cscope database, as
+" present, are made active for cross referencing.
+function! mkbuild#SelectXrefs()
+  let cmd = 'find . -type f -name tags -o -name cscope.out | ' .
+    \ 'while read f; do echo $(dirname $f); done | sort -u | sed -e "s|\./||"'
+  let curr = s:chompsys('dirname "' . &tags . '"')
+  let dname = s:chompsys(cmd . ' | dmenu -i -l 20 -p "xref (' . curr . ')"')
+  if empty(dname)
+    return
+  endif
+  let file = dname . "/tags"
+  let &tags=''
+  if filereadable(file)
+    let &tags = file
+  endif
+  if has('cscope')
+    let file = dname . "/cscope.out"
+    exe 'cscope kill -1'
+    if filereadable(file)
+      exe 'cscope add ' . file
+    endif
+  endif
+endfunction