Emulate a typewriter

Showing 1-6 of 6 messages
Emulate a typewriter Tom Link 5/22/09 2:17 AM

What would be the best way to emulate this in vim:


I was thinking of putting vim into insert mode and of remapping all
keys that would get you out of it & of disabling cursor keys and the
like. Any other ideas? Any idea of how to remap all those keys
automatically via vimscript?

Re: Emulate a typewriter Andy Wokula 5/22/09 5:40 AM
Tom Link schrieb:

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()
        let chr = "\<Plug>"
    call feedkeys("\<Plug>twm")
    if chr =~ g:twm_allowed_pat
        return chr
    return ""

func! s:getchar()
    let chr = getchar()
    if chr != 0
        let chr = nr2char(chr)
    return chr

<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.


Re: Emulate a typewriter Erik Falor 5/22/09 9:38 AM

There's also this link:

Erik Falor
Registered Linux User #445632 http://counter.li.org

Re: Emulate a typewriter Tom Link 5/23/09 2:23 AM
> Isn't getchar() the first thing that comes to mind?

Thank you very much for the code. Interesting approach. I had to make
a small change though to make <c-c> abort the typewriter mode.
Re: Emulate a typewriter Tom Link 5/23/09 2:25 AM
> There's also this link:http://wondermark.com/519/

It's funny because it's true. :-)
Re: Emulate a typewriter Liang Li 1/30/14 7:07 AM
Hey Andy,

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