ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

init.el を gist に上げる

dotfiles 的なリポジトリ運用はめんどくさすぎて、はるか昔にやめていた。 普段は Dropbox に入れてシンボリックリンクで参照するだけにしている。

gist にあげるだけならカジュアルかなあと思って (C-x h M-w でコピペする)、そうすることにした。

clone してまで運用するつもりはないけど、気が向いたら更新しておくと、あとで履歴をみてニヤニヤできるかもしれない。

setting for GNU Emacs · GitHub

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    

Disassembly - GNU Emacs Lisp Reference Manual

tool-bar-mode と menu-bar-mode をオフにしておくやつ

(tool-bar-mode -1) みたいにしてオフにするのが定番ですが、ツールバーが消えるときにウィンドウがガチャガチャしてかっこ悪いし、消すだけでも 100ms くらいはかかるわけで、最初の最初からオフにできないかなーと思っていた。

github.com

以下の設定は 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) しておいた。