Great.
Yeah it always bothered me that there's no way to monitor every keypress
unless you map every key, which is quite ugly.
--Matt
On Thu, Oct 19, 2006 at 11:26:53PM -0700, Hari Krishna Dara wrote:
>
> I remember someone posting a patch to add a new event called GetChar to
> receive an event for every keypress. This trick is not as powerful and
> flexible as that, but it can be very useful for a plugin, and is
> supported in Vim7.0 with no patches.
>
> Often there are questions on this list on how to capture every key press
> from a user, and the answer is that it can't, unless you map all keys.
> But even if you map all keys, it is not flexible enough. Here is a trick
> with recursive <expr> maps and getchar() to get all keys pass through
> your function. You can do whatever you want with the keys, swallow them
> or pass them to Vim.
>
> Here is a demo that shows how to use it in insert mode. What the
> function does is to double every key you press, except <Esc> and <C-C>,
> when it breaks the loop.
>
> imap <buffer> <silent> <expr> <F12> Double("\<F12>")
> function! Double(mymap)
> try
> let char = getchar()
> catch /^Vim:Interrupt$/
> let char = "\<Esc>"
> endtry
> "exec BPBreakIf(char == 32, 1)
> if char == '^\d\+$' || type(char) == 0
> let char = nr2char(char)
> endif " It is the ascii code.
> if char == "\<Esc>"
> return ''
> endif
> redraw
> return char.char."\<C-R>=Redraw()\<CR>".a:mymap
> endfunction
>
> function! Redraw()
> redraw
> return ''
> endfunction
>
> You can do almost eanything that you can do normally in an insert mode,
> press <BS>, <C-U> etc. Hope someone finds this useful.
>
> I will also post this as a tip.
>
> --
> Hari
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com