Isn't getchar() the first thing that comes to mind?
but ok: getchar() shows the cursor in the cmdline when waiting for input.
here is a workaround (use incomplete mapping to delay getchar() until
a char is available):
let g:twm_allowed_pat = '^[[:alnum:] \t\r,.!?]$'
" start typewrite mode (stop with CTRL-C):
nmap <Leader>tw <Plug>twm
nmap <script> <Plug>twm i<SID>m_
imap <Plug>twm <SID>m_
imap <SID>m_<Esc> <SID>m_
ino <silent> <SID>m_ <C-R>=TwGetchar()<CR>
func! TwGetchar()
if getchar(1)
let chr = s:getchar()
else
let chr = "\<Plug>"
endif
call feedkeys("\<Plug>twm")
if chr =~ g:twm_allowed_pat
return chr
endif
return ""
endfunc
func! s:getchar()
let chr = getchar()
if chr != 0
let chr = nr2char(chr)
endif
return chr
endfunc
<SID>m_ causes a "_" to show up in the text.
<SID>m_<Esc> is mapped to give Vim something to wait for.
Tried on a win32 gVim.
--
Andy
There's also this link:
http://wondermark.com/519/
--
Erik Falor
Registered Linux User #445632 http://counter.li.org
Your script is awesome! The way that you capitalized on vim's handling of ambiguous mappings to slow down the input loop is pretty awesome. Coolest peice of vimscript I've ever seen.
Don't let it get to your head ;-)
- Leon