今更ながらだけど、Mac に、emacs29.1 の EMP版を、ソースからインストールした時のメモ。
きっかけ
今まで emacs26 の ns バージョンを使っていて特に大きな不満はなかったが、
日本語で文章を書いていると、たまに変換候補のポップアップが消えなかったり、IME
がらみの不具合に見舞われる時があった。
ネットをいろいろ探っていると、IMEパッチについては、
ns 版とは別の EMP版というのがあり、かなり評判がいいようなので、
試しにインストールしてみようと思ったのが直接のきっかけ。
さらに、emacs28 あたりから、elisp のネイティブコンパイルとか、webkit
利用のフルブラウザー機能など、いろいろと斬新な機能が emacs
自体にも加えられているということ。ネイティブコンパイルについては、
僕の技量の範囲を超えているのでパスするとして、フルブラウザーについては結構なインパクトだ。
emacs のバッファーで、youtube が見れるのはうれしいかも。
インストール作業
インストールを行った環境は、古過ぎて馬鹿にされそうだが、Mac
はインテル版の iMacで、OSは mojave。
ソースコードを置いたり、いろんなコマンドを実行する作業ディレクトリーは、
$ mkdir ~/emacs-29
$ workdir=$HOME/emacs-29
make における仮のインストール場所は、
$ mkdir ~/emacs-29/build
$ build="$HOME/emacs-29/build"
に設定した。
$biuid については、make が正常に終了した後、 あらためて ~/Applications にコピーする。
- ソースの取得 山本光晴さんの git ページ から clone で取得。
- sexy icon をダウンロード しばらくは、今回の emacs29と、古い emacs26 とを両方使うことになり、 アイコンを標準とは別のものにしたかったので、 Emacs is sexy から、macos 用をダウンロードした。
- sexy アイコンを resource ディレクトリーへコピー
- configure options の検討
- --with-mac EMP版の場合は、--with-ns ではなく、--with-mac とするらしい。
- --with-xwidgets webkit 利用のフルブラウザー機能を有効にする。
- --prefix
- --enable-mac-app
- --enable-mac-self-contained これらを指定しないと、Emacs.app 内で全てが完結する状態にならなかった。
- --with-native-compilation elisp のネイティブコンパイルが有効になるオプション。
- make
- 端末から実行して動作確認
- $build 環境を、$HOME/Applications にコピー App 資源を、仮のインストール場所 $build/Emacs.app から、~/Applications にコピーする。
$ cd $workdir
$ git clone https://bitbucket.org/mituharu/emacs-mac.git
これで、$workdir/emacs-mac/ にソースコードが配備される。
$ cd $workdir
$ cp -p ~/Downloads/Emacs.icns emacs-mac/mac/Emacs.app/Contents/Resources/
(つまり、loda-path や C-h で表示するさまざまな情報が、 $workdir/emacs-mac/lisp や $workdir/emacs-mac/info を参照している状態になってしまう)
かなり魅力的な機能なんだが、へたれな僕としてはパス。
$ cd $workdir/emacs-mac
$ make clean
$ ./configure --with-mac --without-x --enable-mac-app=$build \
--prefix=$build --enable-mac-self-contained --with-xwidgets
$ echo $? #=> 0
$ make bootstrap # (bootstrap なしで、単に make だけでいいのかも?)
$ echo $? #=> 0
$ make install
$ echo $? #=> 0
# AppTranslocation 対策
# (この作業は、必要なかったもしれない?)
$ cd $build
$ xattr -d com.apple.quarantine Emacs.app
$ xattr -dr com.apple.quarantine Emacs.app/
$ cd ..
$ open $build/Emacs.app --args -q初期設定ファイルなしのこの状態で、kotoeri からの日本語入力ができているのに感動……
$ cp -Rp $build/Emacs.app ~/Applications/追加で、C言語で書かれたソースコードも C-h で見れるように、 C のソースファイル を Emacs.app/ の下にコピーしておく。
$ cp -Rp $workdir/emacs-mac/src \
~/Applications/Emacs.app/Contents/Resources/
これで、.emacs.el などの初期設定ファイルに、
(setq source-directory (file-truename
"~/Applications/Emacs.app/Contents/Resources"))
と書いておけば、C-h からのソースファイルや INFO ドキュメントの参照が、
~/Applications/Emacs.app の下を見るようになり、もう、$workdir からはおさらばになる筈だ。
.emacs.el の設定
- 必要最低限の設定 少なくとも、以下を設定しておけばいいと思う。
;;; -*- coding: utf-8; lexical-binding: t; -*-
(setq source-directory
(file-truename
"~/Applications/Emacs.app/Contents/Resources"))
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8-unix)
(when (fboundp 'mac-input-source) ;; when emacs EMP version
;; (setq default-input-method nil) ;; disable leim and ns-xxx ???
;; C-xなどのプレフィックスが押されたら自動的に ASCII入力へ移行
(mac-auto-ascii-mode 1)
)
;; () <> [] {} などの対応装飾が煩わしい...
(setq show-paren-mode nil)
;; --- org-mode 関連 ------
(require 'org-tempo) ;; <s TAB で source block を書く
(setq org-adapt-indentation t) ;; header の直下で indent
;; たまに起こる、C-c C-o での、Visit tags table の prompt を抑制する W/A
;; See: https://emacs.stackexchange.com/questions/76351/how-to-follow-an-internal-link-in-recent-org-mode
(with-eval-after-load 'org-ctags
(setq org-open-link-functions
(cl-delete-if
(lambda (sym)
(string-match-p "^org-ctags-" (symbol-name sym)))
org-open-link-functions)) )
;; TeX 出力において、#+OPTIONS: \n:t かつ 図形がある場合の対策??
(setq org-latex-line-break-safe "\\\\")
emacs29.1 EMP版 の感想
約1ヶ月間 emacs29.1 を使ってみての個人的感想。
- 何も設定せずに、Kotoeri を使って普通に日本語文章が打てた。でも…… IMEはかなり安定して使えるようだ。 ただし、漢字の変換中にモードライン上に「あ」とかの表示は出ない。 調べてみると、 mac-input-source という関数で現状の IME 状態を知ることができ、 mac-selected-keyboard-input-source-change-hook 変数で、IMEの出入りをフックできるみたいなので、いろいろと対策は打てそう。 追記 (2023-12-10): 何とか対策した! → EMP版 emacs29.1 で漢字変換時に「あ」とかを表示
- 辞書サービスが使える 他の mac アプリケーションと同様に、 マウス + M-C-d で辞書を引けるようになっていた。
- youtube が emacs 内で観れる M-x xwidget-webkit-browse-url で、https://www.youtube.com/ を指定すればいいだけだ。 わざわざ emacs で youtube を見なくても、ブラウザーで見れば済むことなのだが、 もしかしたら自作の javascript と elisp との連携ができるのかも? と考えると夢は広がる……
もう、dict:///検索語 を使わなくてもいいんだ。
