I’ve created an updated version of my Keystroke-gui keylogger, which can be controlled by Vim Hooks. Keystroke is keylogger and visualizer which can be used for screencasts. This is especially useful when recording screencasts for Vim, because in Vim’s normal mode you cannot see what is typed, opposed to insert mode. But in normal made most of the “magic’‘ happens ;-) The new version of Keystroke can be controlled over a TCP socket. Actually it supports the following commands:

  • disable: disable the logger (actually just the visualization)
  • enable: enable the logger again
  • insertEnter: enter Vim’s insert mode
  • insertLeave: leave Vim’s insert mode

This TCP server is used by Vim to tell the Keystroke when vim is started, exited, and when it enters/leaves insertMode. Some helper BASH script which simply do a “echo ‘command’ | nc localhost 9999’ are use to form the client side of the communication. Vim’s autocmd feature is used to execute those scrips.

augroup logger
    autocmd VimEnter * :call system('$HOME/vim/enable_logger')
    autocmd VimLeave * :call system('$HOME/vim/disable_logger')
    autocmd InsertEnter * :call system('$HOME/vim/insert_enter')
    autocmd InsertLeave * :call system('$HOME/vim/insert_leave')
augroup end

When Keystroke is set to insertMode it only displays control keys like <C-x><C-l> <tab>, or <enter>. Because the normal keys you see anyway in the buffer.

Of course keystroke is also useful for other types of screencasts, it is not limited to Vim. But the Vim support is unique afaik.

If you want to give it a try you can clone the git repo https://github.com/gergap/keystroke.git

This new feature is currently available only on the branch FEATURE\_MORE\_CONFIG. I’ll need more testing before I release it, but it works already.

What would be this post without a short demo? So here it comes (click on the GIF to show in full size):


What is still missing: More config options to adapt to different situations. E.g. what keys get filtered and what keys are shown.

Have fun ;-)


comments powered by Disqus