今更ながらだけど、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:///検索語 を使わなくてもいいんだ。
0 件のコメント:
コメントを投稿