init.el を gist に上げる
system-type とバイトコンパイル
init.el を見てると、system-type
変数で分岐をとるケースがあったりするけど、これはコンパイル時には判明してるわけで、実行時に分岐するのはどうかなと思った。
もちろん微々たるものではあるし、使いどころも極めて限られているので、なんでもかんでもやるのはむしろデメリットのほうが大きい。
限られた使いどころというのも (eval-when-compile (if (eq system-type 'darwin) 'XXX 'YYY))
みたいに、式の結果が定数になる場合ぐらいしかなさそうだ。
(when (eval-when-compile (executable-find "hogehoge")) ...)
は悪くないかもしれない。
ものは試しで、*scratch*
で単純な分岐をするだけの関数を書いてコンパイルしてみる。
(defun sample-compile-time () (eval-when-compile (cond ((eq system-type 'darwin) "darwin") ((eq system-type 'windows-nt) "windows-nt"))) (sample-compile-time) ; C-j "darwin"
disassemble
でバイトコードを書き出せる。
おそらくは定数をはきだすだけになってるはず。
(let ((compiled-code (byte-compile 'sample-compile-time))) (disassemble compiled-code (current-buffer))) nil byte code: args: nil interactive: nil 0 constant "darwin" 1 return
予想通り、定数命令におちた。
なお、eval-when-compile
でつつまない場合は下のようになった。
byte code: args: nil 0 varref system-type 1 constant <jump-table-eq (darwin 1 windows 2)> 2 switch 3 goto 3 6:1 constant "darwin" 7 return 8:2 constant "windows-nt" 9 return 10:3 constant nil 11 return
tool-bar-mode と menu-bar-mode をオフにしておくやつ
(tool-bar-mode -1)
みたいにしてオフにするのが定番ですが、ツールバーが消えるときにウィンドウがガチャガチャしてかっこ悪いし、消すだけでも 100ms くらいはかかるわけで、最初の最初からオフにできないかなーと思っていた。
以下の設定は Mac 版限定ですが、X環境だと ~/.Xresources で設定できるとか。
$ defaults write org.gnu.Emacs ToolBar -string no $ defaults write org.gnu.Emacs MenuBar -string no
ScrollBar
はうまくいかなかったので、とりあえず (run-at-time 0.5 nil 'scroll-bar-mode -1)
しておいた。