mieki256's diary



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 を使う指定になってる。
(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 状態に応じてカーソルの色を変えることができていたのだけど。
;; 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 を使うように変更してみたのだけど。
(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 をつけている場合が多いけど、それを試すとフォントが設定されてないウインドウが新しく開かれてしまう…。オプションの意味がよく分からん…。

以上です。

過去ログ表示

Prev - 2021/01 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project