-" Exuberant Ctags creator
+" Universal Ctags creator
" Maintainer: Sergey Matveev <stargrave@stargrave.org>
" License: GNU General Public License version 3 of the License or later
"
" Create "tags" file in your project's root first.
" Then :Ctags LANG to fill it.
-function! s:ctags(lang, verbose)
- let dst = tagfiles()[0]
- let src = "/" . join(split(dst, "/")[:-2], "/")
+if exists("g:loaded_mein_ctags") | finish | endif
+let g:loaded_mein_ctags = 1
+
+function! s:ctags(lang, onlyCmd, verbose)
+ let dst = tagfiles()
+ if len(dst) == 0
+ echohl WarningMsg | echomsg "No tagfiles" | echohl None
+ return
+ endif
+ let dst = sort(dst, {a, b -> len(a) > len(b) ? 1 : len(a) == len(b) ? 0 : -1})[0]
+ let src = "/" . join(split(dst, "/")[:-3], "/")
if dst[0] != "/"
- let dst = getcwd() . "/tags"
+ let dst = getcwd() . "/.tags/tags"
let src = getcwd()
endif
let cmdline = [
- \'uctags',
- \'--languages=' . a:lang,
- \'--python-kinds=-i',
- \'--recurse',
+ \"uctags",
+ \"--languages=" . a:lang,
+ \"--python-kinds=-i",
+ \"--c++-kinds=+p",
+ \"--recurse",
\]
- if a:verbose == v:true | let cmdline += ['--verbose'] | endif
- let cmdline += ['-f', dst, src]
+ if a:verbose == v:true | let cmdline += ["--verbose"] | endif
+ let cmdline += ["-f", dst, src]
+ if a:onlyCmd == v:true
+ echo join(cmdline, " ")
+ return
+ endif
execute "!" . join(cmdline, " ")
if a:verbose != v:true | redraw! | endif
endfunction
-command! -nargs=1 Ctags silent call s:ctags(<f-args>, v:false)
-command! -nargs=1 Ctagsv silent call s:ctags(<f-args>, v:true)
+command! -nargs=1 Ctags silent call s:ctags(<f-args>, v:false, v:false)
+command! -nargs=1 Ctagsv silent call s:ctags(<f-args>, v:true, v:false)
+command! -nargs=1 Ctagscmd call s:ctags(<f-args>, v:true, v:true)