なんだこれは

はてなダイアリーから移転しました。

emacs for Emacs.app on macOS

emacs for Emacs.app on macOS

~/bin/emacs for Emacs.app on macOS

ほかにこんなことでひっかかる人はいないと思うがメモ。

macOSEmacsEmacs.app である。Emacs.app/Contents/MacOS/Emacs が実体の bundle 構造というフォルダ構成になっている。macOS では open -a Emacsで起動することができるが、emacsでは起動できない。

これが問題になることは非常に少ないのだけど、たまにある。例として OCamlEmacsの開発環境を構築するときがある。このようなコマンドを実行すると失敗する。

opam install user-setup tuareg ocamlformat merlin

これを実行するとどうなるか emacs --version で失敗してしまう。

The following actions will be performed:
  ∗ install conf-emacs 1     [required by tuareg]
  ∗ install tuareg     3.0.1
  ∗ install user-setup 0.7
===== ∗ 3 =====
Do you want to continue? [Y/n] y

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
⬇ retrieved user-setup.0.7  (cached)
[ERROR] The compilation of conf-emacs.1 failed at "emacs --version".
⬇ retrieved tuareg.3.0.1  (https://opam.ocaml.org/cache)

#=== ERROR while compiling conf-emacs.1 =======================================#
# context     2.1.3 | macos/x86_64 | ocaml-base-compiler.4.13.1 | https://opam.ocaml.org#685eb4ef
# path        ~/.opam/4.13.1/.opam-switch/build/conf-emacs.1
# command     ~/.opam/opam-init/hooks/sandbox.sh build emacs --version
# exit-code   71
# env-file    ~/.opam/log/conf-emacs-98834-41a416.env
# output-file ~/.opam/log/conf-emacs-98834-41a416.out
### output ###
# sandbox-exec: execvp() of 'emacs' failed: No such file or directory



<><> Error report <><><><><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
┌─ The following actions failed
│ λ build conf-emacs 1
└─

仕方がないので ~/bin/emacs を仕込むことにした。

#!/bin/bash
if [ -r /Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs ] ; then
    /Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs $@
elif [ -r /Applications/Emacs.app/Contents/MacOS/Emacs ] ; then
    /Applications/Emacs.app/Contents/MacOS/Emacs $@
elif [ -r /Applications/Emacs27.app/Contents/MacOS/Emacs ] ; then
    /Applications/Emacs27.app/Contents/MacOS/Emacs $@
else
    vim $@
fi