Emacsを起動したとき、よく使うファイルやディレクトリが最初から開いていると便利だと思いませんか?

今回は、起動画面をカスタマイズする方法について説明します。

追記 2015-10-10 desktopを追加しました。

initial-buffer-choiceをカスタマイズする方法

起動時の画面は customize-option で変更することができます。 M-x customize-option を実行し、 initial-buffer-choice を指定してください。カスタマイズバッファが開きますので、 Value Menu ボタンを押します。選択肢は次の通りです。

  • Startup screen (デフォルト)
  • Directory
  • File
  • Remember Mode note Buffer
  • Function
  • Lisp scratch buffer

編集したら、C-x C-sで保存して、Emacsを再起動してみましょう。

それでは、おすすめの設定を紹介しましょう。

テキストファイルを起動時に開く

まずは、 Value MenuFile を指定する方法です。

起動時に、いつも同じテキストファイルを自動で開きます。座右の銘、習慣、課題などを書いておくといい感じなので、僕はこれがお気に入りです。

例えば、org-modeのファイルを指定して

~/Dropbox/Documents/memo.org

とすることで、いつも起動時に同じファイルが開きます。

また Value MenuDirectory を指定して、よく使うディレクトリを指定しておくと Dired が開きますので、これも便利かも。

Functionを指定して、org-agendaを開く

次は、 Value MenuFunction を指定した場合です。

例えば、org-agenda のように動的にバッファが生成されるような場合、前述の方法は使えませんので、 function を使います。

まず次のような関数を定義しておき、init.el等で読み込まれるようにしておきます。

(defun my-initial-buffer ()
  (interactive)
  (org-agenda nil "a" nil)            
  (org-agenda-manipulate-query-add)   ; inactiveなエントリーも表示
  (get-buffer "*Org Agenda*")         ; バッファを返す必要がある
  )

次にカスタマイズ画面で initial-buffer-choiceFunction に変更し、 my-initial-buffer を指定しておけば、起動時に org-agenda が表示されます。

他にも選択肢はありますが、たぶん重要なのはこれぐらいかな? Remember Mode note Buffer のほうは使っていないので省略しました。すみません。

Lisp scratch buffer

Value MenuLisp scratch buffer を指定した場合、普通に *scratch* バッファが開きます。

ただし、実は initial-buffer-choice をいじらなくても、 inhibit-startup-screen をonすると起動時のロゴ画面(About GNU Emacs)が表示されないので、結果的に *scratch* が開きます。

ちなみにロゴ画面は、F1キーを押してから C-a すれば、いつでも開くことができます。

Desktopという標準パッケージを使う

Emacsに標準でインストールされている desktop というパッケージを使うと、Emacs終了時の状態を、再起動後に復元してくれます。

保存の対象として

  • いくつかのグローバル変数
  • ファイルバッファ(特定のファイルを開いているバッファ)
    • メジャーモード
    • ディレクトリ
    • ポイント(カーソル)の位置
    • 選択範囲
    • バッファ読取専用の状態
    • いくつかのロカール変数
  • フレームとウィンドウの設定

があります。さらに設定を追加することで

  • kill-ring(コピーの履歴)

も保存されます。

上の説明にあるように、例えば、org-agendaのように動的に生成されるバッファは復元されません。

またtext-scale-modeを使って文字サイズを大きくしていたとしても復元されません。

この機能を有効にする場合は、カスタマイズ変数 desktop-save-mode を ONにしておけば、Emacs終了時にdesktopの保存ディレクトリを聞かれるので、適宜、指定してもらえればOKです。

kill-ringを対象にする場合はカスタマイズ変数 desktop-globals-to-savekill-ring を追加します。