最強エディタEmacsならマトリックス(っぽいこと)もできる


はじめに

Emacsはその長い歴史の中で、世界中の歴々のハッカーから数多くの無駄機能を与えられてきました。

本稿は、そんな数多あるEmacsの機能の中から、Zone modeを用いて
映画マトリックスシリーズに登場するあの緑コンソールを再現してみました。
再来年公開予定の待望の新作、マトリックス4に備えましょう。(ステマではない)

忙しい人用

これをinit.elのてけとーなとこに書くと

init.elのてけとーなとこ
;; zone.el 内部で宣言される 定数zone-programs を予め上書きしちゃう
;; 今回は横に文字が流れるzone-pgmを利用
(defvar zone-programs
  [ zone-pgm-rotate-LR-variable ] )

;; zone をロード
 (require 'zone)

;; デフォルト文字色を緑にしてzoneを起動、終了後は文字色戻して決めゼリフ
(defun my-matrix ()
  (interactive)
  (let ((default-color (face-foreground 'default)))
    (set-foreground-color "green")
    (zone)
    (set-foreground-color default-color)
    (message "They're watching you...")))

;; Ctrl - # でマトリックスできるようにキーバインドに登録
(define-key global-map (kbd "C-#") 'my-matrix)

;; もしくは5秒間操作が無ければマトリックスする
(zone-when-idle 5)

こうなる

注意!!

  • 文字色が緑から戻らないことがたまにあります。
    Emacsを再起動するか、(set-foreground-color "文字色")で戻せます。

  • デフォルトの文字色以外はそのままの色で流れちゃいますが、それはそれで綺麗。

  • gif中のコードは深く読まない事。(なんてコメントなんだ…

今回マトリックスしてみてわかったこと

  • Zone modeは、Emacsに標準搭載の機能です。パッケージのインストール等は特に必要ありません。直訳すると居眠りモードでしょうか。

  • Zone modeは、一言で表すとスクリーンセーバーです。バッファ中の文字が様々なアクションで動いたり消えたり別の文字に変わります。
    アクションはzone.el中のzone-programs変数にzone-pgm-*として列挙されており、通常だといずれかがランダムで起動します。

  • 今回は緑コンソールを再現するために、zone-pgm-rotate-LR-variableに一つに制限しています。制限を外す(init.elのてけとーなとこでdefvarしてるのをコメントアウトする)と、緑文字が楽しく動き出すかと。

  • zone-when-idleにてZone modeが起動するまでのアイドル時間を設定可能です。私は120 (Emacsが2分放置されると起動)にしています。(結構うっとおしい)

  • Macだと/Applications/Emacs.app/Contents/Resources/lisp/play/ 配下にZone modeの本体であるzone.elが配置されています。この中をもう少し弄って、文字が流れる速度を映画っぽくしてみたりしましたが、それはまたの機会に…。

  • なお、playフォルダにはEmacs標準搭載の各種ゲームのコードが詰まっています。ゲーム箱に入れられてるZone modeって…

  • 映画に即して、文字を縦に流すには〜を少しだけ考えてみましたが断念しました。縦書き機能 というものはあるようです。本当になんでもあるなEmacs…。

  • マトリックスし終わった後に喋る They're watching you... はマトリックスからの引用。

おわりに

Emacs is watching you...<●><●>