回答:
現在のモニター/ディスプレイに応じて、パラメーターdefault-frame-alist
を含むの値をfont
条件付きで設定できます。(関数display-monitor-attributes-list
を使用して、モニター/ディスプレイ情報を提供できます。)これにより、異なるモニターまたは他の異なるコンテキストに対して異なるデフォルトのフォントサイズを使用できます。
また、コマンドを使用して、任意のフレームに示されているすべてのウィンドウとバッファのために、動的にフォントサイズを変更することができzoom-in
、zoom-out
またはzoom-in/out
ライブラリから、zoom-frm.el
。
これらの同じコマンドは、バッファ(すべてのウィンドウで、どのフレームでも)またはフレーム(すべてのウィンドウで、そのバッファで)をズームできます。Emacs WikiページSet Fontsを参照してください。
私は@gavenkoaに似たものを使用して(純粋に偶然にもmy-dpi
!という名前のヘルパーzoom-frm
を使用して)、新しいフレームを適切なサイズにしますが、とにかくそのパッケージを使用しているので呼び出します。frame-monitor-attributes
代わりにを使用することで、マルチヘッドセットアップでも機能しdisplay-monitor-attributes-list
ます。
(defun my-dpi (&optional frame)
"Get the DPI of FRAME (or current if nil)."
(cl-flet ((pyth (lambda (w h)
(sqrt (+ (* w w)
(* h h)))))
(mm2in (lambda (mm)
(/ mm 25.4))))
(let* ((atts (frame-monitor-attributes frame))
(pix-w (cl-fourth (assoc 'geometry atts)))
(pix-h (cl-fifth (assoc 'geometry atts)))
(pix-d (pyth pix-w pix-h))
(mm-w (cl-second (assoc 'mm-size atts)))
(mm-h (cl-third (assoc 'mm-size atts)))
(mm-d (pyth mm-w mm-h)))
(/ pix-d (mm2in mm-d)))))
(defvar my-zoom-frm-wanted-dpi 70
"The DPI I want to achieve when using `my-zoom-frm-by-dpi'.")
(defun my-zoom-frm-by-dpi (&optional frame)
"Zoom FRAME so the DPI is closer to `my-zoom-frm-wanted-dpi'."
(interactive)
(let ((frame (or frame (selected-frame))))
(when (frame-parameter frame 'zoomed)
(zoom-frm-unzoom frame))
(let ((frame-zoom-font-difference (1- (round (/ (my-dpi frame)
my-zoom-frm-wanted-dpi)))))
(when (called-interactively-p 'interactive)
(message "Zooming by %S" frame-zoom-font-difference))
(zoom-frm-in frame))))
;; Apply the scaling I want to each newly created frame:
(add-hook 'after-make-frame-functions #'my-zoom-frm-by-dpi)
(add-hook 'after-make-frame-functions #'my-zoom-frm-by-dpi)
フレームの作成時に実行されます。既存のフレームをディスプレイ間で移動するためのフックがあるかどうかはわかりません。
display
使ってみませんmy-dpi
か?
私は異なるラップトップ/デスクトップ間で私の設定を移植可能にしました:
(defun my-dpi ()
(let* ((attrs (car (display-monitor-attributes-list)))
(size (assoc 'mm-size attrs))
(sizex (cadr size))
(res (cdr (assoc 'geometry attrs)))
(resx (- (caddr res) (car res)))
dpi)
(catch 'exit
;; in terminal
(unless sizex
(throw 'exit 10))
;; on big screen
(when (> sizex 1000)
(throw 'exit 10))
;; DPI
(* (/ (float resx) sizex) 25.4))))
(defun my-preferred-font-size ()
(let ( (dpi (my-dpi)) )
(cond
((< dpi 110) 10)
((< dpi 130) 11)
((< dpi 160) 12)
(t 12))))
(defvar my-preferred-font-size (my-preferred-font-size))
(defvar my-regular-font
(cond
((eq window-system 'x) (format "DejaVu Sans Mono-%d:weight=normal" my-preferred-font-size))
((eq window-system 'w32) (format "Courier New-%d:antialias=none" my-preferred-font-size))))
(defvar my-symbol-font
(cond
((eq window-system 'x) (format "DejaVu Sans Mono-%d:weight=normal" my-preferred-font-size))
((eq window-system 'w32) (format "DejaVu Sans Mono-%d:antialias=none" my-preferred-font-size))))
(cond
((eq window-system 'x)
(if (and (fboundp 'find-font) (find-font (font-spec :name my-regular-font)))
(set-frame-font my-regular-font)
(set-frame-font "7x14")))
((eq window-system 'w32)
(set-frame-font my-regular-font)
(set-fontset-font nil 'cyrillic my-regular-font)
(set-fontset-font nil 'greek my-regular-font)
(set-fontset-font nil 'phonetic my-regular-font)
(set-fontset-font nil 'symbol my-symbol-font)))
私はそれをマルチヘッド設定で動作させることを試みていませんが。それが可能かどうかわからない。