summaryrefslogtreecommitdiffstats
path: root/.vim/autoload/omni/common/utils.vim
diff options
context:
space:
mode:
Diffstat (limited to '.vim/autoload/omni/common/utils.vim')
-rw-r--r--.vim/autoload/omni/common/utils.vim67
1 files changed, 67 insertions, 0 deletions
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