[ホーム]-> [emacs]-> [emacs on Windows]-> [Emacs 27 on Windows]

Windows に Emacs 27.2 をインストールした際の備忘録

ここしばらく Ubuntu と Mac を中心に使ってきたのだが, 2021年末にとある事情で Windows も積極的に使うことにした。その際に Emacs-27.2 をインストールしたときのことを書いておく。

インストール

Windows に Emacs をインストールする方法の選択肢はいくつかあるようだ。私もよく知らなかったのだが, UNIX 系のディストリビューションや, Mac でいえば macports や homebrew などのパッケージ管理システムが Windows にもあるようで Microsoft 自身も winget というのを用意している。この方がアップデートやアンインストールが楽かもしれない。またIME 関係のパッチをあててビルドしてくださっている方もおられる。以下の作業に関してはどれを使っても大きな違いはないと思われるが, 私は GNU の公式ビルドを使った。その中にも選択肢がいくつかあるが, 私はインストーラ付きのものではなく emacs-27.2-x86_64.zip を選んだ。これをCドライブのトップで展開し, emacs-27.2 というフォルダ名にした。この場合は

C:\emacs-27.2\bin\run-emacs.exe
をダブルクリックすることで Emacs が起動する。後はショートカットやタスクバーなどへの登録などをしておけばよいと思う。その際, プロパティから作業フォルダを設定しておくと起動したときにそのフォルダがデフォルトになる。

環境変数 HOME の設定

右下の検索窓に環境変数と入れてコントールパネルの環境変数の編集を開く。ユーザーの環境変数で新規に HOME を作成して設定する。私は C:\Users\(ユーザ名) にした。この場合は C:\Users\(ユーザ名)\.emacs.d\init.el にいろいろと設定を書き込むことになる。最近の Windows では他に標準的なフォルダがあるのかもしれないが, Ubuntu や Mac と合わせることにした。

フォントのインストール

そのままではフォントの視認性がよくないので, 好みのフォントを入れるのがよいと思う。今だと 白源 などが人気のような気がする。

個人的には Ubuntu でも Mac でもエディタとターミナルでは Ricty を使っているので, Windows でも同じものをインストールしたのだが, 何故か Windows では文字間が広くなる。これについては Rictyフォントの文字間隔を修正するというサイトを参考にして, Ricty フォントを生成した後に

#!/bin/bash
sh ricty_generator.sh auto

for P in Ricty*.ttf; do
  ttx -t OS/2 "$P"
  sed -i.bak -e 's,xAvgCharWidth value="940",xAvgCharWidth value="500",' "${P%%.ttf}.ttx"
  mv "$P" "${P%%.ttf}.orig.ttf"
  ttx -m "${P%%.ttf}.orig.ttf" "${P%%.ttf}.ttx"
done
で処理した。私はこの辺りの作業は Ubuntu でやったが, WSL2 (Windows Subsystem for Linux 2) を使えば Windows でも同じことができるはず。できた ttf フォントをクリックするとインストールできる。こちらはきちんと表示できた。

設定

以下環境変数 HOME で指定したディレクトリ以下に .emacs.d\init.elというファイルを作って設定を書き込むことになる。書き方は人によってかなり違うし, いろいろと便利な仕組もあるらしいが, ここではシンプルに書き加える内容を書いていく。

フレームの大きさ, フォントについては .emacs.d\init.el に次のように書いた。フォントは Ricty の 12pt を指定している。

(setq default-frame-alist
      (append '((width . 82) (height . 45)
                (font . "ricty-12"))
              default-frame-alist))

(setq initial-frame-alist
      (append '((top . 0) (left . -5))
      	      default-frame-alist))

(modify-all-frames-parameters '((ime-font . "ricty-12")))
最後の行がないと, IME の変換中のフォントの大きさが変になる。白源を使う場合は, 2箇所ある rictyhackgen で置き換えればよい。

背景やフォントの色については取り敢えず次のようにした。

(global-font-lock-mode t)
(setq font-lock-maximum-decoration t)
(setq fast-lock nil)
(setq lazy-lock nil)
(setq jit-lock t)

(if window-system
    (progn
      (set-face-background 'default "#123a33") ;; 標準の背景色
      (set-face-foreground 'default "#ffffff")   ;; 標準の文字色
      (set-face-background 'mode-line "#557777")   ;; モードライン背景
      (set-face-foreground 'mode-line "#dddddd")   ;; モードライン
      (set-face-background 'mode-line-inactive "#556060") ;; モードライン背景
      (set-face-foreground 'mode-line-inactive "#aaaaaa") ;; モードライン2
      (set-face-background 'scroll-bar "#d6dabf")  ;; スクロールバー
      (set-face-foreground 'scroll-bar "#c6caaf")  ;; スクロールバー
      (set-face-background 'tooltip "ghostwhite")  ;; ツールチップ背景
      (set-face-foreground 'tooltip "black")       ;; ツールチップ
      (set-face-background 'tool-bar "#d6dabf")    ;; ツールバー
      (set-face-background 'menu "#d6dabf")        ;; メニュー
      (set-face-background 'fringe "#d0d4bf")      ;; fringe
      (set-face-foreground 'fringe "#90947f")      ;; fringe
      (set-cursor-color "#dddddd")
      )
  (progn
    (set-face-background 'default "#000000")
    (set-face-foreground 'default "#ffffff")
    )
  )
この設定では実際の色は次のスクリーンショットのようになる。

emacs screenshot

なお, 大きさや色については

;;; for test
(set-background-color "#123a33")
(set-foreground-color "#ffffff")
(set-cursor-color "#dddddd")
(set-frame-size (selected-frame) 82 45)
みたいな式を評価するとインタラクティブに変更して確認できる。

emacs lisp パッケージのインストール

以前は自分で emacs lisp を書き換えることが多かったが, 最近はそうでもないので, 積極的に elpa/melpa を利用する方針でいくことにする。

まずは melpa を使えるようにしておく。.emacs.d\init.el

 (when (require 'package nil t)
 (add-to-list 'package-archives
       '("melpa" . "https://melpa.org/packages/"))
 (add-to-list 'package-archives
       '("melpa-stable" . "https://stable.melpa.org/packages/"))
 (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
 (package-initialize)
 )
と書いておく。これを評価してから, 一度 M-x package-refresh-contents を実行する。すると, M-x package-install に続けてパッケージを指定することでインストールされる。使っていて, 何か文句を言われる場合は, 再度 M-x package-refresh-contents を実行すると解決する場合がある。

これで auctex, ddskk, slime, tr-ime, wanderlust などを入れている。yatex も melpa に入っているが, これは個人用のディレクトリにソースからインストールした。

日本語入力

emacs-27.2 では GNU の公式ビルドでもほぼそのまま Windows の IME が使えるようになっているが, tr-imeを使うといいことがあるらしい。このサイトを参考にして M-x package-installtr-ime をインストールして .emacs.d\init.el

(tr-ime-advanced-install)
(setq default-input-method "W32-IME")
(setq-default w32-ime-mode-line-state-indicator "[--]")
(setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))
(w32-ime-initialize)
(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)
と書くことで快適になりそう。

もっとも個人的には skk に慣れているので Emacs では Windows の IME は使わず DDSKK をインストールする。通常 DDSKK はインストールすればすぐ使えるようになるが, melpa からインストールすると skk-setup が実行されない, というか .emacs.d/elpa/ddskk-2022.../ の下には skk-setup.el(c)がないようなので, .emacs.d\init.elに次のように書いておく必要がある。

(when (require 'skk nil t)
  (global-set-key (kbd "C-x C-j") 'skk-mode)
  (global-set-key (kbd "C-x j") 'skk-auto-fill-mode)
  (require 'skk-study))
(add-hook 'isearch-mode-hook 'skk-isearch-mode-setup)
(add-hook 'isearch-mode-end-hook 'skk-isearch-mode-cleanup)
辞書は M-x skk-getで自動でインストールされる。デフォルトでは .emacs.d\skk-get-jisyo\ の下にインストールされ, その場所は skk-get-jisyo-directory でカスタマイズできる。基本的に今ある辞書をすべてインストールしてくれるよう。

TeX 関係

TeX の本体は, TeX Live 2021 を TeX Live over the Internet からインストールした。またプレビューワは Sumatra PDF をインストールした。これらを Emacs と連携させる。

まずは 野鳥をインストールする。私は個人的な趣味で ソースからインストールしているが, melpa からインストールするのが楽だと思う。 とりあえず

(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
(add-to-list 'auto-mode-alist '("\\.tex$" . yatex-mode))
(add-to-list 'auto-mode-alist '("\\.sty$" . yatex-mode))

(setq YaTeX-inhibit-prefix-letter t) ; これは好み

(setq dvi2-command "rundll32 shell32,ShellExec_RunDLL SumatraPDF -reuse-instance"
      tex-command "ptex2pdf -e -l -ot \"-kanji=utf8 -no-guess-input-enc -synctex=1\""
      tex-pdfview-command "rundll32 shell32,ShellExec_RunDLL SumatraPDF -reuse-instance"
      bibtex-command "pbibtex"
      makeindex-command "mendex"
      dviprint-from-format "-p %b"
      YaTeX-no-begend-shortcut t ; これ以降も好み
      YaTeX-use-AMS-LaTeX t
      YaTeX-kanji-code nil
      YaTeX-latex-message-code 'utf-8
      YaTeX-package-alist-default nil
      )
くらいを書いておけば, YaTeX の支援を受けならが TeX ファイルを編集し, TeX ファイルのタイプセットやプレビューができるようになる。ptex2pdf のオプションは, 環境に合わせて適当に変更する。

次に PDF ファイルから TeX のソースの該当箇所に飛んだり, TeX のソースファイルの位置から PDF ファイルの該当箇所の飛べるようにする。 Sumatra PDF の「設定」〉「詳細設定」で SumatraPDF-settings.txt を開いて, EnableTeXEnhancements の行を

EnableTeXEnhancements = true
とする。すると「設定」〉「オプション」で逆順検索コマンドラインの設定の項目がでるので, Emacs をインストールしたディレクトリの emacsclient を指定する。例えば C:\emacs-27.2にインストールした場合は
C:\emacs-27.2\bin\emacsclient.exe --no-wait +%l "%f"
とする。これで, SumatraPDF で表示した PDF のダブルクリックで, Emacs で開いたソースの該当箇所に飛べる。

逆に YaTeX でソースから SumatraPDF の方に飛ぶには, 上の.emacs.d\init.elにあるように tex-commandtex-pdfview-command が設定してあればよい。詳しくは TeX Wiki の SumatraPDFのページを参照。

TeX の入力支援は YaTeX を使っているが, 表示 (font-lock) については AUCTeX のものを使っている。そのため .emacs.d\init.el には次のように書いている。

(setq YaTeX-use-hilit19 nil)
(setq YaTeX-use-font-lock nil)
(if window-system
    (progn
      (load "auctex")
      (require 'font-latex)
      (add-hook 'yatex-mode-hook 'font-latex-setup 'append)
      (add-hook 'yatex-mode-hook 'turn-on-font-lock 'append)
      ))

(setq font-latex-fontify-script nil
      font-latex-script-display nil)
(setq font-latex-fontify-sectioning 'color)