diff options
Diffstat (limited to 'autoload/xolox/misc/timer.vim')
-rw-r--r-- | autoload/xolox/misc/timer.vim | 103 |
1 files changed, 0 insertions, 103 deletions
diff --git a/autoload/xolox/misc/timer.vim b/autoload/xolox/misc/timer.vim deleted file mode 100644 index 31072f5..0000000 --- a/autoload/xolox/misc/timer.vim +++ /dev/null @@ -1,103 +0,0 @@ -" Timing of long during operations. -" -" Author: Peter Odding <peter@peterodding.com> -" Last Change: May 20, 2013 -" URL: http://peterodding.com/code/vim/misc/ - -if !exists('g:timer_enabled') - let g:timer_enabled = 0 -endif - -if !exists('g:timer_verbosity') - let g:timer_verbosity = 1 -endif - -let s:has_reltime = has('reltime') - -function! xolox#misc#timer#start() " {{{1 - " Start a timer. This returns a list which can later be passed to - " `xolox#misc#timer#stop()`. - return s:has_reltime ? reltime() : [localtime()] -endfunction - -function! xolox#misc#timer#stop(...) " {{{1 - " Show a formatted debugging message to the user, if the user has enabled - " increased verbosity by setting Vim's ['verbose'] [verbose] option to one - " (1) or higher. - " - " This function has the same argument handling as Vim's [printf()] [printf] - " function with one difference: At the point where you want the elapsed time - " to be embedded, you write `%s` and you pass the list returned by - " `xolox#misc#timer#start()` as an argument. - " - " [verbose]: http://vimdoc.sourceforge.net/htmldoc/options.html#'verbose' - " [printf]: http://vimdoc.sourceforge.net/htmldoc/eval.html#printf() - if (g:timer_enabled || &verbose >= g:timer_verbosity) - call call('xolox#misc#msg#info', map(copy(a:000), 's:convert_value(v:val)')) - endif -endfunction - -function! xolox#misc#timer#force(...) " {{{1 - " Show a formatted message to the user. This function has the same argument - " handling as Vim's [printf()] [printf] function with one difference: At the - " point where you want the elapsed time to be embedded, you write `%s` and - " you pass the list returned by `xolox#misc#timer#start()` as an argument. - call call('xolox#misc#msg#info', map(copy(a:000), 's:convert_value(v:val)')) -endfunction - -function! s:convert_value(value) " {{{1 - if type(a:value) != type([]) - return a:value - elseif !empty(a:value) - if s:has_reltime - let ts = xolox#misc#str#trim(reltimestr(reltime(a:value))) - else - let ts = localtime() - a:value[0] - endif - return xolox#misc#timer#format_timespan(ts) - else - return '?' - endif -endfunction - -" Format number of seconds as human friendly description. - -let s:units = [['day', 60 * 60 * 24], ['hour', 60 * 60], ['minute', 60], ['second', 1]] - -function! xolox#misc#timer#format_timespan(ts) " {{{1 - " Format a time stamp (a string containing a formatted floating point - " number) into a human friendly format, for example 70 seconds is phrased as - " "1 minute and 10 seconds". - - " Convert timespan to integer. - let seconds = a:ts + 0 - - " Fast common case with extra precision from reltime(). - if seconds < 5 - let extract = matchstr(a:ts, '^\d\+\(\.0*[1-9][1-9]\?\)\?') - if extract =~ '[123456789]' - return extract . ' second' . (extract != '1' ? 's' : '') - endif - endif - - " Generic but slow code. - let result = [] - for [name, size] in s:units - if seconds >= size - let counter = seconds / size - let seconds = seconds % size - let suffix = counter != 1 ? 's' : '' - call add(result, printf('%i %s%s', counter, name, suffix)) - endif - endfor - - " Format the resulting text? - if len(result) == 1 - return result[0] - else - return join(result[0:-2], ', ') . ' and ' . result[-1] - endif - -endfunction - -" vim: ts=2 sw=2 et |