2021/01/11(月) [n年前の日記]
#1 [emacs] Emacs 27.1 を設定中
Windows10 x64 20H2上で、Emacs 27.1 を設定中。26.3 と比べて色々な関数が削除されているようで、init.el の修正が必要らしくてハマっているところ。
◎ フォント指定。 :
Emacs 27.1 では、フォントを設定する set-default-font が削除されてしまったらしい。元々、26.3 の時点でも削除予定だったらしいけど…。
Emacs 26.3 までは以下のようなフォント設定ができていた。英数字は Consolas、日本語文字は MeiryoKe_Console を使う指定になってる。
しかし、この指定は、Emacs 27.1 ではエラーになってしまう。
一応、HackGen というフォントを使ってフォント変更することはできたものの…。
この状態では、日本語文字は別フォントを使う、という指定ができてなくて…。例えば HackGen を Consolas に変えると、日本語文字がMSゴシックになってしまう。
色々試してたら、ごっそりコメントアウトすることで日本語文字が MeiryoKe_Console になってくれた。
ただ、この指定で正しいのかどうかさっぱり分からない…。
Emacs 26.3 までは以下のようなフォント設定ができていた。英数字は Consolas、日本語文字は MeiryoKe_Console を使う指定になってる。
(set-default-font "Consolas-14")
(dolist (target '(jisx0201
latin-jisx0201
japanese-jisx0208
japanese-jisx0208-1978
japanese-jisx0212
japanese-jisx0213-1
japanese-jisx0213-2
japanese-jisx0213-a
japanese-jisx0213.2004-1
katakana-sjis
katakana-jisx0201
cp932-2-byte
cp932
(#x3040 . #x309f)
(#x30a0 . #x30ff)
(#xff00 . #xffef)
(#x0370 . #x03ff)))
(set-fontset-font (frame-parameter nil 'font) target
(font-spec :family "MeiryoKe_Console")))
(setq face-font-rescale-alist '(("MeiryoKe_Console" . 1.08)))
;; (setq face-font-rescale-alist '(("MeiryoKe_Console" . 1.12)))
しかし、この指定は、Emacs 27.1 ではエラーになってしまう。
一応、HackGen というフォントを使ってフォント変更することはできたものの…。
;; Emacs 27.1 は set-default-font が使えない
;; (set-default-font "Consolas-12")
;; (set-frame-font "Consolas-12")
;; (set-face-attribute 'default nil :family "Consolas" :height 130)
;; (setq default-frame-alist
;; (append (list
;; '(font . "hackgen-14"))
;; default-frame-alist))
(add-to-list 'default-frame-alist '(font . "Hackgen-14"))
;; 等幅、可変幅フォントの設定
;; (set-face-attribute 'default nil :family "HackGen" :height 130)
(set-face-attribute 'default nil :family "HackGen")
;; (set-face-attribute 'fixed-pitch nil :family "HackGen")
;; (set-face-attribute 'variable-pitch nil :family "Meiryo")
(set-face-font 'font-lock-comment-face "HackGen-14")
(set-face-font 'font-lock-string-face "HackGen-14")
(set-face-font 'font-lock-keyword-face "HackGen-14")
(set-face-font 'font-lock-builtin-face "HackGen-14")
(set-face-font 'font-lock-function-name-face "HackGen-14")
(set-face-font 'font-lock-variable-name-face "HackGen-14")
(set-face-font 'font-lock-type-face "HackGen-14")
(set-face-font 'font-lock-constant-face "HackGen-14")
(set-face-font 'font-lock-warning-face "HackGen-14")
(dolist (target '(jisx0201
latin-jisx0201
japanese-jisx0208
japanese-jisx0208-1978
japanese-jisx0212
japanese-jisx0213-1
japanese-jisx0213-2
japanese-jisx0213-a
japanese-jisx0213.2004-1
katakana-sjis
katakana-jisx0201
cp932-2-byte
cp932
(#x3040 . #x309f)
(#x30a0 . #x30ff)
(#xff00 . #xffef)
(#x0370 . #x03ff)))
(set-fontset-font (frame-parameter nil 'font) target
(font-spec :family "MeiryoKe_Console")))
(setq face-font-rescale-alist '(("MeiryoKe_Console" . 1.08)))
;; (setq face-font-rescale-alist '(("MeiryoKe_Console" . 1.12)))
この状態では、日本語文字は別フォントを使う、という指定ができてなくて…。例えば HackGen を Consolas に変えると、日本語文字がMSゴシックになってしまう。
色々試してたら、ごっそりコメントアウトすることで日本語文字が MeiryoKe_Console になってくれた。
;; Emacs 27.1 以上
;; Emacs 27.1 で set-default-font が廃止になった
;; (set-default-font "Consolas-14")
;; (set-face-attribute 'default nil :family "Consolas" :height 130)
;; (setq default-frame-alist
;; (append (list
;; '(font . "Consolas-14"))
;; default-frame-alist))
;; (add-to-list 'default-frame-alist '(font . "Consolas-14"))
;; (set-face-attribute 'default nil :family "Consolas" :height 130)
(set-face-attribute 'default nil :family "Consolas" :height (* 14 10))
;; 等幅、可変幅フォントの設定
;; (set-face-attribute 'fixed-pitch nil :family "Consolas")
;; (set-face-attribute 'variable-pitch nil :family "MeiryoKe_Console")
;; (set-face-font 'font-lock-comment-face "Consolas-14")
;; (set-face-font 'font-lock-string-face "Consolas-14")
;; (set-face-font 'font-lock-keyword-face "Consolas-14")
;; (set-face-font 'font-lock-builtin-face "Consolas-14")
;; (set-face-font 'font-lock-function-name-face "Consolas-14")
;; (set-face-font 'font-lock-variable-name-face "Consolas-14")
;; (set-face-font 'font-lock-type-face "Consolas-14")
;; (set-face-font 'font-lock-constant-face "Consolas-14")
;; (set-face-font 'font-lock-warning-face "Consolas-14")
(dolist (target '(jisx0201
latin-jisx0201
japanese-jisx0208
japanese-jisx0208-1978
japanese-jisx0212
japanese-jisx0213-1
japanese-jisx0213-2
japanese-jisx0213-a
japanese-jisx0213.2004-1
katakana-sjis
katakana-jisx0201
cp932-2-byte
cp932
(#x3040 . #x309f)
(#x30a0 . #x30ff)
(#xff00 . #xffef)
(#x0370 . #x03ff)))
(set-fontset-font (frame-parameter nil 'font) target
(font-spec :family "MeiryoKe_Console")))
(setq face-font-rescale-alist '(("MeiryoKe_Console" . 1.08)))
;; (setq face-font-rescale-alist '(("MeiryoKe_Console" . 1.12)))
ただ、この指定で正しいのかどうかさっぱり分からない…。
◎ IME関係。 :
Emacs 26.3 までは、IME の on/off 状態に応じてカーソルの色を変えることができていたのだけど。
Emacs 27.1 では、そのあたりが動かないようで…。
仕方ないので、コメントアウト。
;; IME初期化
(w32-ime-initialize)
;; (require 'smart-ime)
(setq default-input-method "W32-IME")
(setq-default w32-ime-mode-line-state-indicator "[--]")
(setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))
;; IMEのON/OFFでカーソルの色を変える
(set-cursor-color "black")
(add-hook 'w32-ime-on-hook (function (lambda () (set-cursor-color "red"))))
(add-hook 'w32-ime-off-hook (function (lambda () (set-cursor-color "black"))))
;; (add-hook 'input-method-activate-hook (function (lambda () (set-cursor-color "green"))))
;; (add-hook 'input-method-inactivate-hook (function (lambda () (set-cursor-color "snow1"))))
;; (add-hook 'minibuffer-setup-hook
;; (function (lambda ()
;; (if (fep-get-mode)
;; (set-cursor-color "red")
;; (set-cursor-color "black")))))
;; IME利用時のフォントについて指定(してるつもり)
(setq default-frame-alist
(append
'((ime-font . "MeiryoKe_Console-12"))
default-frame-alist))
;; ミニバッファで日本語入力可にする. NTEmacs 23.3.92以降で有効、らしい
(defun w32-isearch-update ()
(interactive)
(isearch-update))
(define-key isearch-mode-map [compend] 'w32-isearch-update)
(define-key isearch-mode-map [kanji] 'isearch-toggle-input-method)
(add-hook 'isearch-mode-hook
(lambda () (setq w32-ime-composition-window (minibuffer-window))))
(add-hook 'isearch-mode-end-hook
(lambda () (setq w32-ime-composition-window nil)))
Emacs 27.1 では、そのあたりが動かないようで…。
仕方ないので、コメントアウト。
;; (add-hook 'w32-ime-on-hook (function (lambda () (set-cursor-color "red")))) ;; (add-hook 'w32-ime-off-hook (function (lambda () (set-cursor-color "black"))))
◎ emacsclientw について :
gnuserv (gnuclientw) を使おうとすると Emacs 27.1 ではエラーになってしまうので、emacsclientw を使うように変更してみたのだけど。
Emacs が起動してる状態なら、emacsclientw.exe を実行しても問題が起きないけれど。Emacs が起動してない状態で呼び出すと「サーバが起動してないよ」てなエラーを出して動いてくれない。
emacsclient や emacsclientw には、以下のオプションがあって…。
一応これで起動してくれたように見えているけど、本当に正しいのかどうか…。
巷の記事を眺めると -n -c をつけている場合が多いけど、それを試すとフォントが設定されてないウインドウが新しく開かれてしまう…。オプションの意味がよく分からん…。
(defvar run-unix (or (equal system-type 'gnu/linux)
(equal system-type 'usg-unix-v)))
(defvar run-w32 (and (null run-unix)
(or (equal system-type 'windows-nt)
(equal system-type 'ms-dos))))
(defvar is-26-before (> 26 emacs-major-version))
(defvar is-26-later (<= 26 emacs-major-version))
(defvar is-27-before (> 27 emacs-major-version))
(defvar is-27-later (<= 27 emacs-major-version))
(cond
(run-w32
;; Windows
(cond
(is-26-before
;; gnuserv
;; SET GNUCLIENTW=-F
;; SET GNUDOITW=-F
;; SET EMACS=meadow
;; SET RUNEMACS=runemacs.exe
(require 'gnuserv)
;; (add-hook 'emacs-startup-hook 'gnuserv-start)
(gnuserv-start)
(setq gnuserv-frame (selected-frame))
)
(is-26-later
;; emacsclientw
(require 'server)
(unless (server-running-p) (server-start))
;; (when (require 'server nil t) (server-start))
))
;; mouse cursor hide
(setq w32-hide-mouse-on-key t)
;; (setq w32-hide-mouse-timeout 2000)
))
Emacs が起動してる状態なら、emacsclientw.exe を実行しても問題が起きないけれど。Emacs が起動してない状態で呼び出すと「サーバが起動してないよ」てなエラーを出して動いてくれない。
emacsclient や emacsclientw には、以下のオプションがあって…。
‘-a command’ ‘--alternate-editor=command’「Emacs と接続できない時はこのエディタを使え」という指定ができるっぽいので試してみたり。
(Emacsインストールフォルダ)\bin\emacsclientw.exe --alternate-editor=(Emacsインストールフォルダ)\bin\runemacs.exe ファイルパス
一応これで起動してくれたように見えているけど、本当に正しいのかどうか…。
巷の記事を眺めると -n -c をつけている場合が多いけど、それを試すとフォントが設定されてないウインドウが新しく開かれてしまう…。オプションの意味がよく分からん…。
[ ツッコむ ]
以上、1 日分です。