M1 Mac にHomebrew で入れた emacs を起動すると開発元が未承認のため云々が消えない問題対応
2022年 07月 08日 金曜日
皆さんは emacs ライフを楽しんでいますか?
背景
清水は下記のようなAlias を使ってVSCode で言うところの code コマンドをMac にて実行した場合と同じ感じの動きを再現しています。
alias E='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n --alternate-editor="open -a Emacs"'
分解していくと
Emacs.app/Contents/MacOS/bin/emacsclient
このコマンドは emacs が起動していて、かつemacs 側でサーバー機能が起動しているときに引数に渡されたファイル名をサーバー機能に渡します. サーバー機能は渡されたファイルを現在のemacs プロセス内でバッファーとして開きます。
--alternative
このオプションは、emacsclient が失敗した場合に渡されれたコマンドを実行します
open -a Emacs
open コマンドとはMac のコマンドで、ファイルを macOS に関連付けられているアプリケーションで開いたり、アプリケーション自体を開いたりするコマンドです -a
オプションを渡すと/Applications/
配下のアプリケーションを開きます.
つまり Emacs.app を実行します
ところが
先日 brew reinstall —cask emacs したら 開発元が未承認のため云々のエラーが出るようになってしまいました。
MacOS のapp の構造について
よくわからないのでEmacs.app の中身を見てみましょう. macOS のアプリケーションはディレクトリになっており、 中身を覗くと結構色路な情報を見ることができます.
Finder で /Applications を開き右クリックから、「パッケージの内容を表示」をクリックします.
- XXX.app
- Contents 中には必ずこのディレクトリがある
- Info.plist: このアプリケーションがどんな振る舞いを行うかが定義されたplistというテキストファイル(xml)
- MacOS: Mac用のコンテンツはこの下に入る ちなみにiOS もサポートしているマルチプラットフォームアプリケーションなら iOS というフォルダーができる
- PkgInfo: 謎
- Resources: 実行ファイル以外のファイルが置かれる 例えばemacs で初めから利用可能なパッケージのスクリプトとかはここに入っている
- Contents 中には必ずこのディレクトリがある
警告が出るようになった理由
- Emacs.app/Contents/MacOS/Emacs はマルチプラットフォームバイナリー
- Emacs.app/Contents/MacOS/Emacs-arm64-11 はM1用のバイナリー
- Emacs.app/Contents/MacOS/Emacs-x86_64-10_14 はX86_64用のバイナリー
となっており、 open -a Emacs を行うと → Emacs → Emacs-arm64-11 が起動するようになっていたが、 Emacs-arm64-11 を一度も承認していないためエラーが発生する状態になってしまった。
Emacs-arm64-11 を右クリック→開く で承認することで無事に開くようになった