【Windows/msys2】Emacs 25.1を使う

スポンサーリンク

前の記事で、macOSでのEmacsについて書いたが、今回はWindows環境でのEmacs環境構築についてのメモを備忘録として残す。
尚、私の環境は Windows10 Pro 64bit, 日本語IMEはATOK。

IMEパッチを適用したビルド済みのNTEmacsバイナリーが、下記URLのGitHubで公開されている。又、そこに書かれてるビルド手順の説明も参考になる。
手軽に使いたい場合は、それを使う事もできるが、コマンド連携なども考えて msys2 にEmacsをインストールする。

GitHub - chuntaro/NTEmacs64: Windows 版 Emacs (通称 NTEmacs) の 64bit 版
Windows 版 Emacs (通称 NTEmacs) の 64bit 版. Contribute to chuntaro/NTEmacs64 development by creating an account on GitHub.

msys2環境の準備

msys2のインストールについては、過去記事で紹介しているので参照。ツールチェーンやmakeなどの開発ツールもインストールしておく。

msys2のEmacsパッケージ

msys2のEmacsパッケージを pacman -Ss emacs で検索すると下記が利用できる。

mingw32/mingw-w64-i686-emacs 25.1-1
    The extensible, customizable, self-documenting, real-time display editor
    (mingw-w64)
mingw64/mingw-w64-x86_64-emacs 25.1-1
    The extensible, customizable, self-documenting, real-time display editor
    (mingw-w64)
msys/emacs 25.1-1 (editors)
    The extensible, customizable, self-documenting, real-time display editor
    (msys2)

このパッケージがそのまま利用できればいいが、試してみると日本語入力が不便だった。そこで、日本語IMEパッチを適用したソースからビルドして使う事にした。

Emacs関連パッケージのインストール

Emacsに関連するパッケージをインストールする為に、まず上記のパッケージを一度インストールして、Emacsのみ削除。
私は、いつも「mingw32」環境で作業しているので、mingw32.exe のコンソールから下記コマンドを実行。

$ pacman -S mingw-w64-i686-emacs
$ pacman -R mingw-w64-i686-emacs

尚、mingw64.exe から利用している人は下記。

$pacman -S mingw-w64-x86_64-emacs
$pacman -R mingw-w64-x86_64-emacs

ソースファイルの入手

http://ftp.gnu.org/gnu/emacs/
上記サイトから、emacs-25.1.tar.xz ファイルを取得

https://gist.github.com/rzl24ozi
上記サイトから、emacs-25.1-w32-ime.diff ファイルを取得

Emacsソースファイルの展開とIMEパッチの適用

msys2のコンソール(私はmingw32.exe)から、上記で入手した2つのファイルを任意のフォルダに置き、下記コマンドを実行。

$ tar xvf emacs-25.1.tar.xz
$ cd emacs-25.1/
$ patch.exe -p0 < ../emacs-25.1-w32-ime.diff

ビルド

autogen.shとconfigureの実行

$ ./autogen.sh
$ CFLAGS='-Ofast -march=x86-64 -mtune=corei7 -static' ./configure --without-dbus --without-compress-install --with-modules

makeの実行

$ make bootstrap

インストール

$ make install-strip

msys2 の各環境binフォルダ(c:/msys64/mingw32/bin)にインストールされる。
案外素直にビルド出来た。

Emacsの起動

msys2のコンソールから、下記コマンドで起動できる事を確認

$ emacs --version

.bashrcに下記エリアスを定義し、eeだけで起動。

alias ee='runemacs'

尚、Emacsの終了は

C-x C-c

コマンドから抜けるには

C-g

[Note]

msys2のコンソール上でのCUIを起動しようとemacs -nwを実行してみたが、下記エラーで起動できない。Windowsのコマンドコンソールからは起動できたが、今のところ解決方法がわからない。
GUI版はmsys2のコンソールからでもrunemacsで起動できるのでそれを使っていく。

emacs: standard input is not a tty

Emacsの初期設定ファイル

初期設定ファイルは、~/.emacs.d/init.elファイルに記述
まずは、IME関係の設定を記述

;; (set-language-environment "UTF-8") ;; UTF-8 でも問題ないので適宜コメントアウトしてください
(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)
;; 日本語入力時にカーソルの色を変える設定 (色は適宜変えてください)
(global-set-key [kanji] 'toggle-input-method)
(add-hook 'w32-ime-on-hook '(lambda () (set-cursor-color "coral3")))
(add-hook 'w32-ime-off-hook '(lambda () (set-cursor-color "orchid")))

;; 以下はお好みで設定してください
;; 全てバッファ内で日本語入力中に特定のコマンドを実行した際の日本語入力無効化処理です
;; もっと良い設定方法がありましたら issue などあげてもらえると助かります

;; ミニバッファに移動した際は最初に日本語入力が無効な状態にする
(add-hook 'minibuffer-setup-hook 'deactivate-input-method)

;; isearch に移行した際に日本語入力を無効にする
(add-hook 'isearch-mode-hook '(lambda ()
                                (deactivate-input-method)
                                (setq w32-ime-composition-window (minibuffer-window))))
(add-hook 'isearch-mode-end-hook '(lambda () (setq w32-ime-composition-window nil)))

;; helm 使用中に日本語入力を無効にする
(advice-add 'helm :around '(lambda (orig-fun &rest args)
                             (let ((select-window-functions nil)
                                   (w32-ime-composition-window (minibuffer-window)))
                               (deactivate-input-method)
                               (apply orig-fun args))))

続いて、下記設定を追加

;; C-hをbackspaceにする
(global-set-key (kbd "C-h") 'delete-backward-char)

(set-language-environment 'Japanese)    ; 日本語環境
(set-default-coding-systems 'utf-8-unix)    ; UTF-8 が基本
(set-terminal-coding-system 'utf-8-unix)    ; emacs -nw も文字化けしない
(setq default-file-name-coding-system 'utf-8)
(setq default-process-coding-system '(utf-8 . utf-8))
(prefer-coding-system 'utf-8-unix)

;; ロックファイル / バックアップファイルを作成しない
(setq create-lockfiles nil)
(setq make-backup-files nil)
(setq delete-auto-save-files t)

;; 自動保存ファイルを作成しない
(setq auto-save-default nil)

;; 対応するカッコを強調表示
(show-paren-mode t)

;; 時間も表示させる。
(display-time)

;; 行番号を常に表示させる
(global-linum-mode)
(setq linum-format "%4d ")
(column-number-mode t)               ; 行番号と列番号を表示する

;; 現在行を目立たせる
(setq hl-line-face 'underline)
(global-hl-line-mode)

;; テーマを設定する
(load-theme 'manoj-dark t)

パッケージ管理

Emacs 24 からパッケージ管理がデフォルトで出来るようになったらしく(package.el)
下記の設定を、~/.emacs.d/init.elに追記する。

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/") t)
(package-initialize)

パッケージをインストールするには、

M-x list packages

パッケージリストの更新は、

M-x package-refresh-contents

尚、インストールされたパッケージ情報は ~/.emacs.d/elpa/ フォルダに格納される。

undo-treeパッケージを入れる

undoのやり直しがredoであるが、Emacsのデフォルトではredoがわかりにくい。
そこで、undo-treeパッケージをインストールし、redoを快適に使えるようにする。

下記コマンドでundo-treeパッケージのインストール

M-x package-install<RET>
undo-tree

続いて、~/.emacs.d/init.elに下記設定を記述しundo-treeを有効にする。

;; 
;; undo-tree
;;
;; undo-tree を読み込む
(require 'undo-tree)

;; undo-tree を起動時に有効にする
(global-undo-tree-mode t)

;; M-/ をredo に設定する。
(global-set-key (kbd "M-/") 'undo-tree-redo)

これで、M-/ でredoが何度もできるようになる。
また、C-x u で、修正履歴がツリー表示され、好きな箇所に戻れる。

環境設定ファイルをGit管理

Emacsの初期設定ファイルは、いくつか定義できる場所があるが、~/.emacs.d/init.elに記述しておく。
そして~/.emacs.d/フォルダを、Gitサーバのリポジトリに登録し管理する。
これにより、他のMacやWindows、更にはLinuxで初期設定ファイルを共用できるようにしておく。

Emacsチャートシート

Windowsのショートカットから起動する

c:¥msys64¥mingw32¥bin¥runemacs.exe をデスクトップなどにショートカットを作成して実行する。
このとき、デフォルトではHOMEの環境変数が設定されていないので、Emacsの初期設定ファイルは下記ディレクトリが参照される。

C:¥Users¥<ユーザ名>¥AppData¥Roaming¥

そこで、msys2の環境設定ファイルを参照するように、Windowsのコンソールから下記コマンドで、シンボルリンクを作成する。

> mklink /D C:¥Users¥<ユーザ名>¥AppData¥Roaming¥.emacs.d C:¥msys64¥home¥<ユーザ名>¥.emacs.d

これで、msys2のコンソールから起動した時とWindowsショートカットから起動した場合とで、Emacsの初期設定ファイルが共用できる。

所感

使ってみた感じ、思った以上にキビキビ動いて快適。そして、意外に安定している。
いろいろカスタマイズできるので、これから本気で使っていきたいと思っている。
これで、macOSとWindowsで共通の操作性のエディターが使えるようになった。Emacs素晴らしい!!

<2017/01/25 追記>

私の使っている設定ファイル一式をGitHubに公開したのを下記記事で紹介。

【Emacs 25-29】初期設定ファイル(~/.emacs.d/)をGitHubに公開
これまで紹介してきた、私の使ってるEmacsの初期設定ファイル「~/.emacs.d/」をGitHub(下記URL)に公開した。macOS, Windows, Linuxで共用。 Emacsの初期状態ではお世辞にも使い勝手がいいとは言えない...

<2017/05/31 追記>

Emacs 25.2にバージョンアップした記事を下記で紹介。

【Windows/msys2】Emacs 25.2にバージョンアップ&ビルド
以前の記事で、Emacs 25.1をビルドして使う記事を紹介したが、2017/4/21にEmacs 25.2が公開された。そこで、msys2環境のEmacsを25.2にバージョンアップしたので備忘録を残す。 msys2にEmacs 25.1...

参照記事

【Windows/msys2】Emacs 25.3の64bit版をビルドする
以前の記事で、Emacs 25.2をビルドして使う記事を紹介したが、2017/9/11にEmacs 25.3が公開された。そこで、msys2環境の64bit環境(mingw64)でEmacsを25.3をビルドし動かしたので備忘録を残す。 以...

参考

  1. GNU Emacs – GNU Project
  2. GitHub – chuntaro/NTEmacs64: Windows 版 Emacs (通称 NTEmacs) の 64bit 版
  3. Windows7 シンボリックリンク – 野良ネコの気持ち
  4. 突然だがEmacs を始めよう – Qiita
  5. Windowsでシンボリックリンクを作る | Developers.IO
  6. WindowsユーザーでEmacsを導入したい初心者ユーザーのための情報まとめ | Gabekore Garage
  7. Windows 8.1時代のNTemacsの初期環境設定の入門っぽいもの
  8. るびきち「新生日刊Emacs」
  9. gnupack 版 Emacs で IME の on/off に合わせてカーソルの色を変える方法

コメント

タイトルとURLをコピーしました