emacsのフォントの大きさを調節する方法のメモ

はじめに

遠くの画面に写して作業をしたくなった。デフォルトで用意されているコマンドだけでは特定のバッファのフォントの大きさを調整する方法だけしか見つからなかった。しょうがないのでちょっとしたコマンドを作った。

そのついでにemacsのフォントの大きさを調節する方法のメモ

フォントの大きさを調節する方法

相対的にフォントの大きさを変更

以下で現在のバッファ上のフォントフォントの大きさを調整(scale)できる。

  • C-x + text-scale-increase
  • C-x - text-scale-decrease

絶対的にフォントの大きさを変更(heightで指定)

(buffer local variablesのface-remapping-alistに値がどんどん追記されていくので気になる人はきれいにしたくなるかもしれない)

(setq font-height 140)
(face-remap-add-relative 'default :height font-height)

ちなみに現在のフォントの大きさ(font height)は以下で調べられる。

(* (or (nth 2 text-scale-mode-remapping) 1) (face-attribute 'default :height))

全てのバッファのフォントの大きさを変更

(set-face-attribute 'default nil :height font-height)

フォントのサイズを調節するためのコマンド

幾つかの候補を事前に設定しておき、カレントバッファでサイズを確認してから全体のバッファに適用という手順を踏めるようにした。

;; フォントのサイズの候補
(setq my:font-height-candidates '(140 220))

(lexical-let ((i 0))
  (defun* my:font-height (&optional incp &key candidates)
    (when incp
      (setq i (+ i (if (numberp incp) incp 1))))

    (let* ((candidates (or candidates my:font-height-candidates))
           (height (nth i candidates)))
      (cond ((numberp height) height)
            (t
             (setq i 0)
             (nth i candidates))))))

(defun my:adjust-font-height (arg)
  (interactive "p")
  (let* ((incp (+ 1 (/ arg 4)))
         (font-height (my:font-height incp)))
    (message "remap my font height %d (inc %d)" font-height incp)
    (face-remap-add-relative 'default :height font-height)
    ))

(defun my:adjust-font-height-globally ()
  (interactive)
  (let* ((incp nil)
         (font-height (my:font-height incp)))
    (message "remap my font height %d globally (inc %s)" font-height incp)

    ;; clear all temporary remapping setting
    (dolist (b (buffer-list))
      (with-current-buffer b
        (when face-remapping-alist
          (setq-local face-remapping-alist nil)
          )
        ))

    (set-face-attribute 'default nil :height font-height)
    ))

C-x \\C-x |に割り当ててみた。

位置のリセット機能付きのcycle-list的なものを手軽に定義できたりしないかな。