[Emacs] Windows10 の Emacs 27 のフォント設定をしてみる。

Emacs

Emacs を使うにあたって、フォントが設定されていないと気持ち悪いです。

ちゃんとした設定方法をわかっていないのですが、ググったりして、それなりに自分にあった設定をしてみたという話。

試した環境

Windows 10 Pro バージョン 20H2 (OSビルド 19042.746)
64bit版 GNU Emacs 27.1 公式ビルド
“GNU Emacs 27.1 (build 1, x86_64-w64-mingw32) of 2020-08-22”

概要

とりあえずデフォルトの状態だと見えづらいので、基本的なフォントだけ設定していきます。といってもEmacsのフォント設定については、私自身、あまり理解はできていないです。

↓は、なにも設定していない最初の状態です。

手順

Emacs で使えるフォントのリストは Scratchバッファで、(font-family-list) を評価すると出てきます。この中から、使いたいフォントを決めておきます。

最近は等幅でそろうことには、あまりこだわりがなくなっているので、フォントは適当に選びました。

使いたいフォントが決まったら、あとは.emacsに設定を追記するだけです。

下記の設定例では、日本語フォントに MeiryoKe_UIGothic, アスキーフォントに Cascadia Code, ユニコードに Segoe UI Emoji を指定しています。等幅にするなら MeiryoKe_Gothic あたりを使えばよいかと思います。

フォントの幅の調整の仕方は以下の記事が参考になりました。ありがとうございます。

404 Not Found - Qiita - Qiita

.emacs の設定例

設定例を載せておきます。(★の部分はお好みで。)

;; MELPAの設定
(customize-set-variable 'package-archives
                        `(,@package-archives
                          ("melpa" . "https://melpa.org/packages/")))

;;(add-to-list 'package-archives (cons "melpa" "https://melpa.org/packages/") t)

;; ローカルのLISP置き場
(add-to-list 'load-path "~/.emacs.d/site-lisp")

;; tr-imeのDLLを自動でダウンロードしてくれる 
(tr-ime-advanced-install)
(setq default-input-method "W32-IME")

;; IM のデフォルトを IME に設定
(setq default-input-method "W32-IME")

;; IME のモードライン表示設定
(setq-default w32-ime-mode-line-state-indicator "[--]")
(setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))

;; IME 初期化
(w32-ime-initialize)

;; IME 制御(yes/no などの入力の時に IME を off にする)
(wrap-function-to-control-ime 'universal-argument t nil)
(wrap-function-to-control-ime 'read-string nil nil)
(wrap-function-to-control-ime 'read-char nil nil)
(wrap-function-to-control-ime 'read-from-minibuffer nil nil)
(wrap-function-to-control-ime 'y-or-n-p nil nil)
(wrap-function-to-control-ime 'yes-or-no-p nil nil)
(wrap-function-to-control-ime 'map-y-or-n-p nil nil)

;; テーマのロード
(load-theme 'wheatgrass t)

(defvar user/standard-fontset
  (create-fontset-from-fontset-spec standard-fontset-spec)
  "Standard fontset for user.")
(defvar user/font-size 16
  "Default font size in px.")
(defvar user/cjk-font "MeiryoKe_UIGothic" ;; ← ★日本語フォントの設定
  "Default font for CJK characters.")

;; 日本語とアルファベットフォントのサイズバランスが悪い場合はここで調整する
;; 参考: https://qiita.com/kaz-yos/items/0f23d53256c2a3bd6b8d
(defvar user/cjk-font-scale
  '((14 . 1.0)
    (15 . 1.0)
    (16 . 1.1)
    (17 . 1.1)
    (18 . 1.0))
  "Scaling factor to use for cjk font of given size.")

;; Specify scaling factor for CJK font.
(setq face-font-rescale-alist
      (list (cons user/cjk-font
                  (cdr (assoc user/font-size user/cjk-font-scale)))))

(defvar user/latin-font "Cascadia Code" ;; ← ★アスキーフォントの設定
  "Default font for Latin characters.")
(defvar user/unicode-font "Noto Emoji" ;; ← ★絵文字フォントの設定
  "Default font for Unicode characters, including emojis.")
(defun user/set-font ()
  "Set Unicode, Latin and CJK font for user/standard-fontset."
  ;; Unicode font.
  (set-fontset-font user/standard-fontset 'unicode
                    (font-spec :family user/unicode-font) nil 'prepend)

;; Specify scaling factor for Unicode font.
(defvar user/unicode-font-scale
  '((14 . 1.0)
    (15 . 1.0)
    (16 . 1.0)
    (17 . 1.0)
    (18 . 1.0))
  "Scaling factor to use for Unicode font of given size.")

(add-to-list 'face-font-rescale-alist (cons 'user/font-size user/unicode-font-scale))

;; Latin font.
;; Only specify size here to allow text-scale-adjust work on other fonts.
  (set-fontset-font user/standard-fontset 'latin
                    (font-spec :family user/latin-font :size user/font-size) nil 'prepend)
  ;; CJK font.
  (dolist (charset '(kana han cjk-misc hangul kanbun bopomofo))
    (set-fontset-font user/standard-fontset charset
                      (font-spec :family user/cjk-font) nil 'prepend))
  ;; Special settings for certain CJK puncuation marks.
  ;; These are full-width characters but by default uses half-width glyphs.
  (dolist (charset '((#x2018 . #x2019)    ;; Curly single quotes "‘’"
                     (#x201c . #x201d)))  ;; Curly double quotes "“”"
    (set-fontset-font user/standard-fontset charset
                      (font-spec :family user/cjk-font) nil 'prepend)))
;; Apply changes.
(user/set-font)
;; Ensure user/standard-fontset gets used for new frames.
(add-to-list 'default-frame-alist (cons 'font user/standard-fontset))
(add-to-list 'initial-frame-alist (cons 'font user/standard-fontset))

;; IMEの変換のときのフォント
(modify-all-frames-parameters '((ime-font . "MeiryoKe_UIGothic-12"))) ;; ← ★日本語変換のときのフォント設定

背景の暗いテーマを使ってみたので、絵文字は Segoe UI Emoji より Noto Emoji のほうが良さげです。フォントが等幅ではないので、日本語とアスキー文字を比べるとガタガタですが自分好みの設定になりました。

参考サイト

Fun With Fonts in Emacs | Library of Trantor
404 Not Found - Qiita - Qiita
わし
わし

Windowsでも最初からまともなフォントで表示しれくれるか、フォント設定が簡単にできるようになっていると嬉しいのに。

コメント