Emacsを最大化、又はフルスクリーンにしてやろうか!という拡張の話

またまた以前の記事で書かなかった残骸。MacWindowsでざっと流すのみ。

Mac

最大化

手っ取り早いのはset-frame-sizeに直接値を入れる。frame-height/widthで値とって入れれば良い。

;;macbook airで11インチの場合
(set-frame-size (selected-frame) 95 47)
フルスクリーン

Homebrewだとcocoaオプションで入れればコマンドでns-toggle-fullscreenがあるからそれでフルにできる。バイナリやソースからとかMacPortsはどうなってのかわからないけど、なかったらソースからビルドして自分でパッチあてれば良い。

私は試しにソースからパッチあてたりしたけどそもそもns-toggle-fullscreenで良いと思って捨てた。IMEパッチも今のところ支障がないので気にならない。Emacs24はどういった状況かは分からない。

windowsの場合

windowsはフルスクリーンの方法が確認できなかった。とりあえず最大化は以下の方法で行える。

w32-send-sys-commandというコマンドは、何これ。システムコールでいいのか。システムコマンドっていうのか。ともかく以下のようなcodeが使える。

拡張

MacWindows向けの最大化の拡張がある。

maxframe.elを入れてそこにあるコードを使えば、WindowsMacでも自動で使い分けて最大化してくれる。

ウィンドウの大きさを制御するとこだけざっと読んだ

Windowsはw32-send〜で行っているっぽい。

Macはどのようにやっているのか想像できていなかったけれど、displayのピクセルの値をどうにかこうにかしてるみたい。というわけでいろいろ簡略化すると、たとえばheightは以下の式で導いている。

(/ (- (display-pixel-height) 45) (frame-char-height)) ;; =>48

なるほど。ディスプレイのピクセルの高さからメニューバーやタイトルバーの高さを引いて、文字の高さというか行の高さかな?それで割るらしい。手動でめいいっぱい広げて(frame-height)とするとこちらでは47だから1だけ違うけどどうでもいい誤差か。あるいはミニバッファが一行あるからそれのやつ?だろうか。

45という数値はメニューバーやタイトルバーの高さ。コメントには数値が以下のように書いてあった。

;; The default accounts for a Mac OS X display with a menubar
;; height of 22 pixels, a titlebar of 23 pixels, and no dock.

どうやって調べたんだろう?とりあえず案外と最大化は簡単にできる。