summaryrefslogtreecommitdiff
path: root/.vim/autoload/omni/common
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.vim/autoload/omni/common/debug.vim32
-rw-r--r--.vim/autoload/omni/common/utils.vim67
2 files changed, 99 insertions, 0 deletions
diff --git a/.vim/autoload/omni/common/debug.vim b/.vim/autoload/omni/common/debug.vim
new file mode 100644
index 0000000..eded649
--- /dev/null
+++ b/.vim/autoload/omni/common/debug.vim
@@ -0,0 +1,32 @@
+" Description: Omni completion debug functions
+" Maintainer: Vissale NEANG
+" Last Change: 26 sept. 2007
+
+let s:CACHE_DEBUG_TRACE = []
+
+" Start debug, clear the debug file
+function! omni#common#debug#Start()
+ let s:CACHE_DEBUG_TRACE = []
+ call extend(s:CACHE_DEBUG_TRACE, ['============ Debug Start ============'])
+ call writefile(s:CACHE_DEBUG_TRACE, "Omni.dbg")
+endfunc
+
+" End debug, write to debug file
+function! omni#common#debug#End()
+ call extend(s:CACHE_DEBUG_TRACE, ["============= Debug End ============="])
+ call extend(s:CACHE_DEBUG_TRACE, [""])
+ call writefile(s:CACHE_DEBUG_TRACE, "Omni.dbg")
+endfunc
+
+" Debug trace function
+function! omni#common#debug#Trace(szFuncName, ...)
+ let szTrace = a:szFuncName
+ let paramNum = a:0
+ if paramNum>0
+ let szTrace .= ':'
+ endif
+ for i in range(paramNum)
+ let szTrace = szTrace .' ('. string(eval('a:'.string(i+1))).')'
+ endfor
+ call extend(s:CACHE_DEBUG_TRACE, [szTrace])
+endfunc
diff --git a/.vim/autoload/omni/common/utils.vim b/.vim/autoload/omni/common/utils.vim
new file mode 100644
index 0000000..c880ad2
--- /dev/null
+++ b/.vim/autoload/omni/common/utils.vim
@@ -0,0 +1,67 @@
+" Description: Omni completion utils
+" Maintainer: Vissale NEANG
+" Last Change: 26 sept. 2007
+
+" For sort numbers in list
+function! omni#common#utils#CompareNumber(i1, i2)
+ let num1 = eval(a:i1)
+ let num2 = eval(a:i2)
+ return num1 == num2 ? 0 : num1 > num2 ? 1 : -1
+endfunc
+
+" TagList function calling the vim taglist() with try catch
+" The only throwed exception is 'TagList:UserInterrupt'
+" We also force the noignorecase option to avoid linear search when calling
+" taglist()
+function! omni#common#utils#TagList(szTagQuery)
+ let result = []
+ let bUserIgnoreCase = &ignorecase
+ " Forcing noignorecase search => binary search can be used in taglist()
+ " if tags in the tag file are sorted
+ if bUserIgnoreCase
+ set noignorecase
+ endif
+ try
+ let result = taglist(a:szTagQuery)
+ catch /^Vim:Interrupt$/
+ " Restoring user's setting
+ if bUserIgnoreCase
+ set ignorecase
+ endif
+ throw 'TagList:UserInterrupt'
+ catch
+ "Note: it seems that ctags can generate corrupted files, in this case
+ "taglist() will fail to read the tagfile and an exception from
+ "has_add() is thrown
+ endtry
+
+ " Restoring user's setting
+ if bUserIgnoreCase
+ set ignorecase
+ endif
+ return result
+endfunc
+
+" Same as TagList but don't throw exception
+function! omni#common#utils#TagListNoThrow(szTagQuery)
+ let result = []
+ try
+ let result = omni#common#utils#TagList(a:szTagQuery)
+ catch
+ endtry
+ return result
+endfunc
+
+" Get the word under the cursor
+function! omni#common#utils#GetWordUnderCursor()
+ let szLine = getline('.')
+ let startPos = getpos('.')[2]-1
+ let startPos = (startPos < 0)? 0 : startPos
+ if szLine[startPos] =~ '\w'
+ let startPos = searchpos('\<\w\+', 'cbn', line('.'))[1] - 1
+ endif
+
+ let startPos = (startPos < 0)? 0 : startPos
+ let szResult = matchstr(szLine, '\w\+', startPos)
+ return szResult
+endfunc