環境
- OS: Windows 7
- Emacs: GNU Emacs 25.3.1 (i686-w64-mingw32)
はじめに
- フレームのサイズ指定は表示文字数(表示行数、表示桁数)が基本だが、
モニタサイズは画素数で表す。 - モニタサイズに合わせて、フレームサイズを指定する場合、フォントの画素数を基準に文字数を算出するか
画素数で指定する関数を利用する。
モニタの画素数、解像度を調べる
- x-display-pixel-height
- x-display-pixel-width
- display-pixel-height
- dispaly-pixel-width
調べた環境では 'x-' 有り、無しの違いは不明
マルチモニタ環境での解像度は合計値になるため、そのままでは利用できない。
フォントサイズを得る
- frame-char-height: 一行の画素数
- frame-char-width : フレームのデフォルトフォントの標準フォント幅の画素数
set-frame-* を利用したフレームサイズの設定
文字数指定
(set-frame-size (selected-frame) 80 25)
画素数指定
(setq frame-resize-pixelwise t) を設定するかオプション指定する
(set-frame-size (selected-frame) 1024 600 nil t)
; (set-frame-position (selected-frame) 0 0)
initial-frame-alist, default-frame-alistによるフレームサイズの設定(画素数指定は未確認)
文字数指定
(setq default-frame-alist
'(
(width . 80)
(height . 25)
))
画素数指定
(setq default-frame-alist
'(
(width . (text-pixels . 1024))
(height . (text-pixels . 600))
))
モニタ毎に解像度を調べる
(display-monitor-attributes-list)
(display-monitor-attributes-list)
(((geometry 0 0 1680 1050) (workarea 0 0 1680 1020) (mm-size 593 370) (name . "\\\\.\\DISPLAY1") (frames #<frame emacs@hostname 05428d80>))
((geometry 1680 150 1600 900) (workarea 1680 150 1600 900) (mm-size 564 318) (name . "\\\\.\\DISPLAY2") (frames)))
※ frames に frame 情報が含まれている方の geometory 情報を取り出せばモニタに合わせたフレームサイズに設定できそうだけれど、綺麗なやり方が思いつかない。
(setq my:current-workarea (loop for x in (display-monitor-attributes-list)
when (> (length (assoc 'frames x)) 1) return (assoc 'workarea x)))
その他
- emacs のマニュアルにおける display は X Window System における display なので
表示装置はモニタと表現する。マニュアルにある Multiple Display はマルチモニタとは異なる。 - 自分の環境では、リファレンスマニュアルにある 'frame-monitor-attributes は
describe-symbol で出てこない。