八発白中

はてなブログに引越しました。

EmacsでKindle風の読書環境を整える

プログラムを書くのに使うのはもちろんEmacsなのですが、最近はプログラムだけでなく長文ドキュメントや本なんか読むことが多いです。そういうとき、どうしてもEmacsから離れてChromiumで開いたり、長文になるとKindleに転送したりしてしまう。

だけど、Kindleはカスタマイズ性が低くて、ちょっとしたことをやりたいと思ってもできない。

たとえば、調べた英単語の履歴とか出せない。こういうハッカビリティの低さには憤りを感じます。

それなら全部Emacsでやってしまえばええやん、と思ってコツコツと改良し続け、そろそろノウハウが溜まってきたのでついでに紹介します。

Kindly Mode

Kindly Modeは、EmacsのバッファをKindle風の表示にしてくれるマイナーモードです。ほとんど見た目だけのことですが、以下の機能があります。

  • 見た目がかっこよくなる
    • 具体的には、明朝体になってフォントサイズが大きくなって行間が少し空く
  • viライクなキーバインドが有効
  • 自動でしおりを挟んでくれる

GitHubにpublishしたので、試したい人はAuto Installとかでインストールすると良いと思います。

(auto-install-from-url "https://raw.github.com/fukamachi/kindly-mode/master/kindly-mode.el")

その後、.emacsに以下のコードを書きます。

(require 'kindly-mode)

スクリーンショット

下のがChromium上のKindle Cloud Reader。

そして下のがEmacs

左側がKindly Modeで、右側は普通のバッファです。フォントと行間を似せました。

自動しおり機能

手間かかった割に意外とどうでもよかった機能ですが、Emacsの操作が止まったタイミングで自動でブックマーク(しおり)を打ってくれる機能がついています。

アイドルであれば常にしおりを打つのではなく、Kindleと同じで、既にあるブックマークより進んだ位置にカーソルがあったときだけしおりをつけてくれます。

つけたしおりはファイルに保存されるので、再びファイルを開いたときに「もっと先の位置にしおりをつけた場所があるけど、移動しはりますか?」と聞いてくれるので、y と答えると移動します。

おわりに

Emacsで読めることの利点は、Lispやシェルとの連携ができることです。

たとえば、僕はEmacsからM-x dictで英単語の意味を調べられるようにしています。辞書を引いたときはそれをログに書き出すようにしているため、あとで見直すことも可能です。

また、本の内容をコピペしたり、ツイートしたりブログに引用するのも楽かもしれないですね。あんまり活用してないけど。

これ作ったときに、「M-x follow-modeすると二画面でいい感じになるのでは!」と思ったけど、行間をいじってるといい感じに表示してくれなくて残念だった。

久しぶりにEmacs Lispを書いて思ったのは、やっぱLispめっちゃ書きやすいな〜、ということでした。おわり。