Vim上で動くスクリーンセーバー作りました

一日中Vimで作業しているあなたは、席を離れる時どうしていますか?作業に疲れた時、何をしますか?


席を離れる時や、作業に疲れた時、Vimの上でスクリーンセーバーを起動したいなぁ〜と思ったことがあるでしょう。そんな人のために、スクリーンセーバー、作りました。

screensaver.vim

Vimの中で動くスクリーンセーバーです。
itchyny/screensaver.vim - GitHub

どうぞインストールして遊んで下さい。

デフォルトは、どこか懐かしい、時計が動くスクリーンセーバーです。:ScreenSaverというコマンドで起動して下さい。

https://raw.github.com/wiki/itchyny/screensaver.vim/image/image.gif

癒やされますね。これで仕事が捗ること間違いなしです。

パスワード

スクリーンセーバーと言えば、パスワードロックです。screensaver.vimにも、パスワードを入れないと解除できないような仕組みを作りました。まずは、vimrcに次の設定を書いて下さい。

let g:screensaver_password = 1

そうすると、スクリーンセーバーを解除しようとした時にパスワードを求められます。

デフォルトでは、パスワードは何も設定されていないので、エンターキーで解除できます。


パスワードの設定は、screensaverの関数を使います。パスワードはsha256でエンコードして設定します。例えば、パスワードを「vim」にしたければ

call screensaver#source#password#set(sha256('vim'))

ですが、これでは他の人がvimrcを見た時に、パスワードがバレてしまいます。なので、予めチェックサムを計算しておいて

call screensaver#source#password#set('0f2ed9e33d29ff4f3b0f664ca1e1dc3df1f8b9b315b2af284c6e0e3dc52be290')

とします。(こういうのを入力する時は、インサートモードで<C-r>=sha256('vim')<CR>のように打ちます。)スクリーンセーバーから抜けようとすると、パスワードの入力を求められますので、sha256する前の文字列を入力してエンターして下さい。

もちろん、三文字程度では、直ぐに元のパスワードがバレてしまいますので、十分に長いパスワードをお使い下さい。パスワードには英数字と印字可能な記号が使えます。(日本語は使えません)また、screensaver#source#password#set関数は一度しか呼べないので、注意して下さい。(パスワードを一度設定した後に変更することは出来ません)


このパスワードの機能は、所詮おもちゃですので、機密事項を守る目的で使用しないで下さい。ぶっちゃけOSのスクリーンセーバー使うほうがいいですよ。

実装できないこと

スクリーンセーバーというのは、普通は何分間何も操作しなかったら起動するものですが、Vimは、そういうことをできるようには設計されていません。ですから、:ScreenSaverというコマンドで起動してもらうことになります。この点は、どうかご了承下さい。

おわりに

今は、まだ時計のスクリーンセーバーとHello, worldしかありません。何かスクリーンセーバーを作っていただいたら、Pull Requestしてください。面白いと思ったらマージしたいと思います。スクリーンセーバーの作り方は、autoload/screensaver/source/helloworld.vimとかを参考にして下さい。よろしくお願いします。
itchyny/screensaver.vim - GitHub


ところで、C言語でも書いてみたのですが、Vimの中で動かすよりも圧倒的にCPU負荷が軽いという事が分かりました。(当たり前です) 独立して別のリポジトリー(itchyny/screensaver.c - GitHub)に置いているので、コンパイルして実行してみてください。