Posted at
.emacsDay 19

高速起動用ミニマム*scratch*バッファ

More than 1 year has passed since last update.

Emacsを高速起動するための *scratch* バッファと専用メジャーモードの紹介です.


A. 起動時に *scratch* バッファ表示する

通常は*GNU Emacs*バッファが起動時に表示されます.Fundamentalモードが適用されている通常の起動画面ですが,これを*scratch*バッファに切り替えます.

(setq initial-buffer-choice t)


B. *scratch* バッファに高速起動用のミニマムメジャーモードを適用

*scratch* バッファに紐付いている Lisp Interactionモードで起動しても十分高速ですが,少々味気ないです.

Screen Shot 2016-12-02 at 11.58.39 AM.png

また「Emacs起動=Lisp書く」が成り立つのは一部のユーザだけで,一般的には通常のテキストをメモ的に編集できれば十分なはずです.そこで,最小限の情報表示とテキスト編集が可能な高速起動用のミニマムメジャーモードを紐付けます.

https://gist.github.com/takaxp/6199e206afa6f79f6afbd3a1e7efd9b6 にある buffer.el を使います.何もしないメジャーモードです.


buffer.el

;;; buffer.el --- Temporal buffer for fast boot

(defun buffer-mode ()
"Buffer Mode"
(interactive)
(setq mode-name "Buffer")
(setq major-mode 'buffer-mode)
;; (setq buffer-mode-map (make-keymap))
;; (use-local-map buffer-mode-map)
(run-hooks 'buffer-mode-hook))

(provide 'buffer)

;;; buffer.el ends here


その他のメジャーモードを紐付けても良いですが,多くの場合はそのメジャーモードに紐付けられたマイナーモードがあり,起動時にそれらと関連設定も読み込まれてしまうため,起動時間に影響を与えます.


C. 設定

何もしないメジャーモードを起動時に使い,最小限の情報を表示してちょっとだけ修飾させます.

(when (require 'buffer nil t)

(setq initial-scratch-message nil) ;; This buffer〜で始まる文章を表示しない
(setq initial-major-mode 'buffer-mode) ;; buffer-modeで起動する
(set-face-foreground 'header-line "#333333") ;; 装飾
(set-face-background 'header-line "#ffb08c") ;; 装飾
(set-face-attribute 'header-line nil
:inherit nil
:overline nil
:underline nil)
(setq header-line-format ;; ヘッダーラインに「週番号」と「日付」を表示
(concat
" Buffers "
(format-time-string "W%U: %Y-%m-%d %a."))))

これで起動すると,*scratch*バッファが次のような見た目になります.

Screen Shot 2016-12-02 at 11.51.21 AM.png

header-line-formatの内容を変えれば,好みの情報を表示させることが可能です.もちろん配色も変えられます.


D. おまけ

*scratch*バッファの通常運用法は好みの問題になりますが,私の場合は主に「揮発性のあるメモ」として利用しています.とりあえずどこかにペーストしておきたい場合に都合の良いコピペ場所になります.キーバインドを設定して,瞬時に*scratch*バッファへ移動できるようにしてあります.

(global-set-key (kbd "C-M-s")

#'(lambda () (interactive)
(switch-to-buffer "*scratch*")))

メモと言えば Org Mode ですから,マイナーモードの orgstruct-mode もしくは orgstruct++-modeを紐付けてもよいです.ただし,Emacs 起動時にはそれなりのオーバーヘッド(数十[ms])があるので要注意です.

(add-hook 'buffer-mode-hook #'(lambda () (orgstruct-mode)))

なおフレームの見た目はもっとシンプルにできます.

(tool-bar-mode -1) ;; ツールバーを非表示に

(set-scroll-bar-mode nil) ;; スクロールバーを非表示に

Screen Shot 2016-12-02 at 12.34.19 PM.png

↑こんな感じ(カーソルの色と形は別途変更しています)