起動直後になんかする。recentfとかね

  • 8
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Qiitaにinit.elの設定例として書く程度で完結するだろー、とか思ってたら全然簡単なかったのでzonuexe/init-open-recentf.elにまとめた。

やりたかったこと

  1. emacs hoge.txtみたいにファイル名指定で起動したら何もしない (最初からファイル開かれてるので)
  2. Emacs起動時にファイルが開かれてなかったら、recentfの履歴からファイルを開こうとする

その前に

recentfは「最近使ったファイル」を利用するための機能。

Emacsを快適に使うファイル周りの設定紹介あたりを参考にしてrecentfの設定をするとよい。ただし、inhibit-startup-messageの設定とadd-hook不要recentf-extはインストールしてもしなくてもいい。

とにかく導入する方法

最近のべんり機能を使ってるので、Emacs 24.4以上が必須。

  1. zonuexe/init-open-recentf.elをもってくる
  2. init.elか何かに(init-open-recentf)って書く

MELPAを設定してpackage-installとか、Caskでインストールとか、El-Getでインストールとか。

発展的な設定

recentfとか知らねーよ、ただファイル開けりゃいいんだよ、ってときはこうする。

(setq init-open-recentf-function #'find-file)
(init-open-recentf)

やったこと

Emacs Lispを勉強したいひと向けの解説。具体的なことは書かないので興味あったらコードを読みにいってね。

Helmとかidoとか活用する

もしHelmとかidoとか使ってたら、それを使ってrecentfを開くようにする。Anythingがあればそれを使って、どちらもなければデフォルトのrecentf-open-filesを利用する。

「ファイルが開かれてなかったら」

ちょっとびっくりだった。M-x list-buffersとかあるから開かれてるファイル一覧利用できる機能とかあるかと思ったけど、結局init-open-recentf-buffer-filesはシンプルに再実装しちゃった…

初期化後のタイミングにうまくひっかける

Emacsには何かのタイミングで処理をひっかけるための「フック」と呼ばれる仕組みが用意されてる。たいていbefore-xxx-hookafter-xxx-hookみたいに前後にひっかけられるようになってて、初期化処理でも例外ではなくてafter-init-hook, emacs-startup-hook, window-setup-hookといくつかフックが用意されてるので、ふつうはこれを利用すればいい…

……いいと思ったんだけどなあ。

個人的にはEmacsの起動画面は大好きなので、これを潰すのは却下。同様の理由でinitial-buffer-choiceに指定するのも却下。

まとめ

ひたすらstartup.elを読みまくって、Emacsの起動プロセスについて説明できるようにはなった。あとnadvice.elが最高で、異常にべんりだった。