« ^ »

文章を読む時に他の文章で気が散るのを何とかするためにfocusを使う

所要時間: 約 4分

文章を読んでいると、その前後の文やイラストなどに目が行ってしまい、気が散ることはないだろうか。私はどうも気が散りやすい質のようで、すぐに他の部分に気が行ってしまう。また他の事柄に一度注意が行くと、そこからまた注意を戻す事も結構難しい。

これ自体は誰しもある事だと思う。これを回避するために色々と工夫し、他事が出来ない環境で作業をしたり、余計な物が目に入らないようにしている。Emacsの表示も出来る限り必要でないものは表示させていない。そのためモードラインも表示していない、とても簡素な表示となっている。そうは言ってもバッファ内に表示された文字は目に入ってしまうため、ナローイングなどを使用してお茶を濁してきた。しかし、いちいち非表示領域を上手く調整するのは手間だ。そのままだとバッファ上の文字は全て表示されてしまい、他の文に注意が奪われる。

こうした状態は特に長い文章を読む時に困る状態になる。文が頭に入らず、読解に時間がかかるからだ。注意を戻すには結構なエネルギーが必要になる。考えると現代人が文字を読む量は増えているように思う。それはITの技術の普及により、文字に触れる時間が長くとれるようになったからだろう。ただし、現代人はTwitterやマイクロブログによって短文を読むのは慣れているが、長文を読むのは慣れていないようにも思う。しかし長文とは短文の連続であり、それら自体に根本的な違いはない。読み方、インプットの仕方を工夫することで、以前よりも一層深く多くの情報を取り込む事が出来るのではないかと考えた。今回はこれをなんとかすることにした。

文章の段落毎に周辺を非表示することでそれは簡単にできるような気がする。そこで、長文を読みやすくする工夫の一環として、対応することにした。実現したい事は、今注意を向けている事以外の情報を表示させなくすることだ。Emacsにはナローイングという一時的な非表示機能があるため、それを使えば簡単に実装できそうではあった。つまり、次のような処理の流れだ。

(widen)
(mark-paragraph)
(narrow-to-region 
 (region-beginning)
 (region-end))

行番号が変更になったタイミングで実行されるフックはないため、C-xやC-pのキーバインドを強制的に変更する形で実装を食わえる。通常これらのキーにはnext-lineやprevious-lineが割り当てられている。これを上書きすることで機能を実現する。ポイントなのは現在の段落以外を見えなくする事だ。この見えなくする処理をEmacsではナローイングという。ナローイングすると、指定した部分以外は表示されなくなる。ただし、データが実際に消えるのではなくて、ただ表示されなくなるだけだ。そのため、気が散る対策には丁度良い機能だ。 M-x widen をすると全てが表示されるようになる。行の移動に伴い、ナローイングを解除し、現在のポイントの段落を検出し、その段落以外をナローイングによって非表示にする。

同様の処理を実装したライブラリは、既にどこかの誰かが実装済で公開しているかもしれない。そこでMELPAで同じような実装が探すことにした。パッケージ名からしか探せないため narrow という単語でパッケージを検索することにした。そして以下のパッケージをさっと確認したが、該当するものはなかった。

そこで新しくパッケージ名を考えるためにfocusという名前にしようと思った。この単語ではMELAを検索していなかったため再度検索した。すると丁度良いパッケージが見つかった。

中を見てみるとナローイングを使うわけではないけれど、他の方法で今回やりたかった事を実現していた。挙動は少し異なるが、段落ではなく行を対象にしているようだった。これはこれで良い気がしてきた。そこでこれを試すことにし、パッケージをインストールした。

M-x package-install RET focus

悪くない。ただフォーカスっぷりがちょっと優しすぎる。ほとんど、もしくは全く見えなくなって欲しい。それはカスタマイズできそうだった。それを試すことにした。focus-unfocused Faceの設定変更で簡単に消せた。これは良い。しばらく、これを使うことにした。 ん