Emulate a typewriter

105 views
Skip to first unread message

Tom Link

unread,
May 22, 2009, 5:17:15 AM5/22/09
to vim_use
Hi,

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

http://lifehacker.com/5263560/typewriter-forces-you-to-focus-while-you-write
http://www.lifehackingmovie.com/2009/05/18/typewriter-minimal-text-editor-freeware/

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?

Regards,
Thomas.

Andy Wokula

unread,
May 22, 2009, 8:40:20 AM5/22/09
to vim...@googlegroups.com
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()
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

Erik Falor

unread,
May 22, 2009, 12:38:28 PM5/22/09
to vim...@googlegroups.com

There's also this link:
http://wondermark.com/519/

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

Tom

unread,
May 23, 2009, 5:23:01 AM5/23/09
to vim_use
> 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.

Tom

unread,
May 23, 2009, 5:25:08 AM5/23/09
to vim_use
> There's also this link:http://wondermark.com/519/

It's funny because it's true. :-)

Liang Li

unread,
Jan 30, 2014, 10:07:26 AM1/30/14
to vim...@googlegroups.com
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

Reply all
Reply to author
Forward
0 new messages