🦬
Emacsはどれを使えばいいのか?〜2023年夏〜
環境
- M2 Mac (Ventura 13.4)
- Emacs 27.2 (NS 版 + ns-inline-patch, x86_64)
- IME: DDSKK (Emacs の外では AquaSKK)
目的
- 27.2 から 28.2 に上げたい
- が、どの Emacs をどうやってインストールすればいいのかわからなくなっている
- ずっと Emacs を使っていてもわからないのだから、初めて Emacs を使おうとする人はもっとわからないだろう
- arm64 バイナリを使いたい
- あるのか?
- できれば Google Chrome と連携する osa-chrome を使えるようにしたい
- このパッケージは EMP 版でしか動かない
- ファイル名に日本語が含まれているとテキスト置換できないというめちゃくそ不便な不具合を直したい
- 更新すれば直るかもと期待
初めにすべてのパッケージを更新しておく(重要)
-
M-x package-list-packages
からのU
ですべてを最新版にする - 古いパッケージを参照している場合があるので
M-x package-autoremove
で掃除しておく - これらを丁寧にやっておかないとレガシーコードが影響して本体を新しくしてもまともに動かない
brew install emacs で入るのは CUI 版だけ
インストール手順
brew info emacs
brew uninstall --ignore-dependencies emacs
brew install emacs
主要ファイルの場所
/opt/homebrew/bin/emacs -> /opt/homebrew/Cellar/emacs/28.2/bin/emacs
/opt/homebrew/bin/emacsclient -> /opt/homebrew/Cellar/emacs/28.2/bin/emacsclient
確認
$ /opt/homebrew/bin/emacs --batch --eval '(princ (emacs-version))'
GNU Emacs 28.2 (build 1, aarch64-apple-darwin22.1.0) of 2023-01-08
- stable な最新版 28.2 が入る
- Formulaファイル
- GUI には対応していない
-
window-system
はnil
- Emacs を常用するのにこの CUI 版を使っている人はいない (断言)
- 使っている人はいないのに誰もが直感的に最初に選択するであろうパッケージ名なので emacs-cui などに変えてほしい (小声)
- GUI にも対応した Emacs を使うには NS 版か EMP 版を使う
NS 版と EMP 版の違い
-
NS 版
- NS = NeXTSTEP
- 日本では Ishikawa Takaaki (takaxp) さんがインラインパッチを作成・適用し、メンテ・配布してくれているものを指す
-
mac-change-language-to-us
は NS 版のインラインパッチの中だけにある -
window-system
はns
-
EMP 版
- EMP = Emacs Mac Port
- YAMAMOTO Mitsuharu さんが作って railwaycat さんが brew で入るようにしてくれているものを指す
- macOS に特化した機能があったりする
-
mac-auto-ascii-mode
は EMP 版だけにある -
mac-osa-script
は EMP 版だけにある -
osa-chrome は
mac-osa-script
に依存している
-
-
window-system
はmac
EMP版とNS版の野良ビルド情報の方が詳しい。
どちらも Google 日本語入力などの IME で入力する際のちらつき問題に対処するためにインラインパッチが当たっているそうなのだけど自分は DDSKK を使っているのでそのありがた味がわからない。ただインラインパッチに附属する IME を制御する機能は重宝している。
何をインストールするべきかややこしくしている原因
(NS or EMP) * (バイナリ or 自分でビルド) * (CUI or (CUI + GUI)) * (arm64 or x86_64) * バージョン の関係・組み合わせが選択をややこしくしている。
NS版バイナリ(30秒)
こちらから Apple 28.2 のバイナリを使わせてもらう。
主要ファイルの場所
/Applications/Emacs-takaxp/Emacs.app
/Applications/Emacs-takaxp/Emacs.app/Contents/MacOS/Emacs
/Applications/Emacs-takaxp/Emacs.app/Contents/MacOS/bin/emacsclient
確認
$ /Applications/Emacs-takaxp/Emacs.app/Contents/MacOS/Emacs --batch --eval '(princ (emacs-version))'
GNU Emacs 28.2 (build 1, aarch64-apple-darwin20.6.0, NS appkit-2022.70 Version 11.6.7 (Build 20G630)) of 2022-09-13
- arm64 になっているのがわかる
- もともと NS 版を使っていてアップグレードしたいだけならこれ
- シンボリックリンクやパスの設定などは自分で行う
NS 版ビルド(15分以上)
cd ~/src
git clone --depth 1 git@github.com:takaxp/ns-inline-patch.git
cd ~/src/ns-inline-patch
sh build/setup.sh
sh build/emacs-28.sh
とすれば ~/Desktop/emacs/nextstep/Emacs.app
ができるはずなのだが自分の環境ではビルドが途中で失敗したり PC がフリーズしたりするようになってしまった。[1]
EMP 版バイナリ(3秒)
インストール手順
brew tap railwaycat/emacsmacport
brew info emacs-mac-spacemacs-icon
brew uninstall emacs-mac
brew install --cask emacs-mac-spacemacs-icon
いろんなとこに配置されるファイル
/Applications/Emacs.app
/opt/homebrew/bin/emacs
/opt/homebrew/bin/ebrowse
/opt/homebrew/bin/emacsclient
/opt/homebrew/include/emacs-module.h
/opt/homebrew/share/emacs/site-lisp/subdirs.el
/opt/homebrew/bin/etags
バイナリ確認
$ /Applications/Emacs.app/Contents/MacOS/Emacs --batch --eval '(princ (emacs-version))'
GNU Emacs 28.2 (build 1, aarch64-apple-darwin21.6.0, Carbon Version 165 AppKit 2113.6) of 2022-09-15
- brew に emacs-mac とコンフリクトすると言われるので最初に uninstall している
- パッケージ名がわかりにくいけど Spacemacs がインストールされるわけではなく Spacemacs のアイコンが代用される
-
brew install emacs-mac --with-spacemacs-icon
相当
-
EMP 版ビルド(約5分)
インストール手順
brew tap railwaycat/emacsmacport
brew info emacs-mac
brew uninstall emacs-mac-spacemacs-icon
brew install emacs-mac
主要ファイルの場所
/opt/homebrew/opt/emacs-mac/Emacs.app
/opt/homebrew/bin/emacs
/opt/homebrew/bin/emacsclient
バイナリ確認
$ /opt/homebrew/bin/emacs --batch --eval '(princ (emacs-version))'
GNU Emacs 28.2 (build 1, aarch64-apple-darwin22.5.0, Carbon Version 169 AppKit 2299.6) of 2023-06-15
- brew install のときに特定のオプションをつけてカスタマイズしたい人向け
- これを常用するなら
cp -a /opt/homebrew/opt/emacs-mac/Emacs.app /Applications
としておく
NS 版のコードを EMP 版でも動くようにする
条件分岐
- (when (eq window-system 'ns)
+ (when (memq window-system '(ns mac))
- 対象に mac を含める
- 「GUI なら〜」でいいなら
(when window-system ...)
でいい
Emacs に入ると AquaSKK を切る
(add-hook 'focus-in-hook
'(lambda ()
(when (fboundp 'mac-change-language-to-us)
(mac-change-language-to-us))
+ (when (fboundp 'mac-auto-ascii-setup-input-source)
+ (mac-auto-ascii-setup-input-source))
))
- DDSKK ユーザー向け
- EMP 版で通常の IME を使う場合は相性の問題であらかじめ
(mac-auto-ascii-mode 1)
をしておくとC-x
などのタイミングで IME を自動的に切ってくれるが、DDSKK を使っているならそれは有効にせず、単に Emacs に入ったタイミングfocus-in-hook
で IME を切れば快適になる
(dired "/") ができない場合の対処法
Listing directory failed but `access-file' worked
と言われる場合は「システム環境設定」→「セキュリティとプライバシー」→「プライバシー」→「フルディスクアクセス」に /Applications/Emacs.app
を指定する。
置換できない不具合はどうなったか?
ファイル名に日本語が含まれているとテキスト置換できないという、めちゃくそ不便な不具合は 28.2 で直っていた。
まとめ
種類 | バイナリ | ビルド |
---|---|---|
emacs[2] | brew で arm64 版が入るが CUI 版しかない | なし |
NS 版 | サイトで arm64 版をダウンロード | むずい |
EMP 版 | brew で arm64 版が入る | brew で arm64 版が入る |
結局どれにしたか?
EMP 版バイナリにした。再掲すると、
brew tap railwaycat/emacsmacport
brew uninstall emacs-mac
brew install --cask emacs-mac-spacemacs-icon
で入る。
理由は、
- 数秒で確実にインストールできる
- 所定のディレクトリに各種ファイルを配置してくれて親切
- brew で入るので .Brewfile で管理できる
- 今後のアップデートも楽そう[3]
だから。
.Brewfile で管理するには?
ついでに書くと .Brewfile で管理するには、
~/.Brewfile
tap "railwaycat/emacsmacport" # brew tap railwaycat/emacsmacport
cask "emacs-mac-spacemacs-icon" # brew install --cask emacs-mac-spacemacs-icon
を用意して定期的に、
brew bundle --global
だけでよい。
Discussion