60 lines
1.4 KiB
VimL
60 lines
1.4 KiB
VimL
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||
|
" @Revision: 38
|
||
|
|
||
|
|
||
|
" :def: function! tlib#char#Get(?timeout=0)
|
||
|
" Get a character.
|
||
|
"
|
||
|
" EXAMPLES: >
|
||
|
" echo tlib#char#Get()
|
||
|
" echo tlib#char#Get(5)
|
||
|
function! tlib#char#Get(...) "{{{3
|
||
|
TVarArg ['timeout', 0], ['resolution', 0], ['getmod', 0]
|
||
|
let char = -1
|
||
|
let mode = 0
|
||
|
if timeout == 0 || !has('reltime')
|
||
|
let char = getchar()
|
||
|
else
|
||
|
let char = tlib#char#GetWithTimeout(timeout, resolution)
|
||
|
endif
|
||
|
if getmod
|
||
|
if char != -1
|
||
|
let mode = getcharmod()
|
||
|
endif
|
||
|
return [char, mode]
|
||
|
else
|
||
|
return char
|
||
|
endif
|
||
|
endf
|
||
|
|
||
|
|
||
|
function! tlib#char#IsAvailable() "{{{3
|
||
|
let ch = getchar(1)
|
||
|
return type(ch) == 0 && ch != 0
|
||
|
endf
|
||
|
|
||
|
|
||
|
function! tlib#char#GetWithTimeout(timeout, ...) "{{{3
|
||
|
TVarArg ['resolution', 2]
|
||
|
" TLogVAR a:timeout, resolution
|
||
|
let start = tlib#time#MSecs()
|
||
|
while 1
|
||
|
let c = getchar(0)
|
||
|
if type(c) != 0 || c != 0
|
||
|
return c
|
||
|
else
|
||
|
let now = tlib#time#MSecs()
|
||
|
let diff = tlib#time#DiffMSecs(now, start, resolution)
|
||
|
" TLogVAR diff
|
||
|
if diff > a:timeout
|
||
|
return -1
|
||
|
endif
|
||
|
endif
|
||
|
endwh
|
||
|
return -1
|
||
|
endf
|
||
|
|
||
|
|