2023年11月18日土曜日

emacs29.1 (macOS EMP版) をソースからインストールしてみた

今更ながらだけど、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 にコピーする。

  1. ソースの取得
  2. 山本光晴さんの git ページ から clone で取得。
        $ cd $workdir
        $ git clone https://bitbucket.org/mituharu/emacs-mac.git
    これで、$workdir/emacs-mac/ にソースコードが配備される。

  3. sexy icon をダウンロード
  4. しばらくは、今回の emacs29と、古い emacs26 とを両方使うことになり、 アイコンを標準とは別のものにしたかったので、 Emacs is sexy から、macos 用をダウンロードした。

    なんか、とってもかっこいいアイコン!

  5. sexy アイコンを resource ディレクトリーへコピー
  6.     $ cd $workdir
        $ cp -p ~/Downloads/Emacs.icns emacs-mac/mac/Emacs.app/Contents/Resources/

  7. configure options の検討
    • --with-mac
    • EMP版の場合は、--with-ns ではなく、--with-mac とするらしい。

    • --with-xwidgets
    • webkit 利用のフルブラウザー機能を有効にする。

    • --prefix
    • --enable-mac-app
    • --enable-mac-self-contained
    • これらを指定しないと、Emacs.app 内で全てが完結する状態にならなかった。
      (つまり、loda-pathC-h で表示するさまざまな情報が、 $workdir/emacs-mac/lisp や $workdir/emacs-mac/info を参照している状態になってしまう)

    • --with-native-compilation
    • elisp のネイティブコンパイルが有効になるオプション。
      かなり魅力的な機能なんだが、へたれな僕としてはパス。

  8. make
  9.   $ 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 ..

  10. 端末から実行して動作確認
  11.   $ open $build/Emacs.app --args -q
    初期設定ファイルなしのこの状態で、kotoeri からの日本語入力ができているのに感動……

  12. $build 環境を、$HOME/Applications にコピー
  13. App 資源を、仮のインストール場所 $build/Emacs.app から、~/Applications にコピーする。
      $ 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) 
      )
  • 個人的に必要だった設定
  • 僕だけかもしれないが、org-mode の設定にいろいろと手間取った。
    ;; () <> [] {} などの対応装飾が煩わしい...
    (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 で辞書を引けるようになっていた。
    もう、dict:///検索語 を使わなくてもいいんだ。

  • youtube が emacs 内で観れる
  • M-x xwidget-webkit-browse-url で、https://www.youtube.com/ を指定すればいいだけだ。

    わざわざ emacs で youtube を見なくても、ブラウザーで見れば済むことなのだが、 もしかしたら自作の javascript と elisp との連携ができるのかも? と考えると夢は広がる……