LoginSignup
8
11

More than 5 years have passed since last update.

Emacs フレーム(Frame) のサイズ設定関連の整理

Last updated at Posted at 2017-12-06

環境

  • 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 で出てこない。
8
11
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11