Edited at

Emacs-25.3/26.2(Mojave)/27.x にインラインパッチをあてて使う(macOS)


はじめに

GNU Emacs (25.1/25.2/25.3, 26.1/26.2, 27.0.xx) にインラインパッチをあてて使いたい人向けの記事です.

macOS で野良ビルドできる人が対象です.

Screen Shot 2019-04-13 at 11.38.52.png

NOTE1: NS版のチラつきを解消するパッチが作成されたようです.

https://ja.osdn.net/projects/macemacsjp/lists/archive/users/2017-April/001756.html

NOTE2: 25.2用にインラインパッチを作り,上記のパッチを取り込みました.

https://gist.github.com/takaxp/3314a153f6d02d82ef1833638d338ecf

NOTE3: macOS Mojave では公式の 26.1(NS build) が動きません.最新の 26.2 を使いましょう.修正パッチがEmacsのGitに登録されています.emacs-26@9ad0f1d15c 以降をビルドすればOKです.Version は26.1.50になります.インラインパッチは,既存のものがそのまま使えますが,ビルドスクリプトを準備しました.

NOTE4: Mojave で野良ビルドしたEmacsを使う時にプチフリする場合の対処法がわかりました.

https://qiita.com/takaxp/items/2a0abaa6e5f1a7a9c440

NOTE5: 気の早い人に向けて,27系で使えるパッチも準備しました.

- https://gist.github.com/takaxp/534a5a1bc6e0494a78eb72a271b429c5 (for general)

- https://gist.github.com/takaxp/8da64eb5e6c8094ef9bdba1d27d529a5 (for google IME, locale=en)


日本語入力対策

野良ビルドでやはり気になるのは日本語入力です.

実はプレリリースされる以前から,開発版では inline-patch がなくても日本語入力が効くようになっています.ところが,変換候補を入力している最中に,キータイピングのたびにカーソルが単語の先頭に移動するという残念な現象が生じていて(少なくとも私のところでは.see video: Emacs 25.1 (brew version, NS) ),やはり inline-pach の出番です.

下のビルド手順で使用しているパッチは,mac-ime-cursor-type なる新しい変数を設けています.日本語入力時に使っている cursor-type をそのまま代入すると,カーソルを変換後の先頭で表示しないトリックが発動します.正直なところ,それでもチラつきが残ります.我慢できない場合は,

(setq mac-ime-cursor-type '(bar . 2))

init.el等で上の設定を加えます.加えない場合は,いつもどおりの振る舞いですので安心してください.上の例で '(bar . 2) になっているところは,frameに普段指定している日本語入力用のcursor-typeと同じ値を入れてください.

内部的には,日本語入力が始まったタイミングでカーソルを消して,日本語入力完了時に mac-ime-cursor-type で指定するカーソルタイプに戻しています.

またNS版とは見た目と機能がそれなりに異なるEMP版もありますので,お試しあれ.


野良ビルド手順


必要なライブラリ

ビルドの前に,下記をインストールしておくことをオススメします.

brew install autoconf automake pkgconfig gnutls texinfo


最新の安定版を使う場合(26.2)

最新の安定版は,26.2です.インラインパッチは,25.2用のものをそのまま適用できます.

Mojaveユーザは 26.1 では正しく動作しません.迷わず 26.2 を使いましょう.修正が組み込まれた 26.2 のリリースが待たれますが,しばらく先になりそうです(2019-03-11時点).

さらにMojave ユーザは,tccd に起因するプチフリを回避するために,自己署名を加える一手間が必要になりますので,野良ビルドした Emacs で tccd が暴走するのを防ぐ(Mojave) も合わせて確認してください.

#!/bin/sh

cd ~/Desktop
mkdir emacs_ns
cd ~/Desktop/emacs_ns
VERSION=26.2
curl -LO ftp://ftp.gnu.org/gnu/emacs/emacs-$VERSION.tar.gz
curl -LO https://gist.githubusercontent.com/takaxp/3314a153f6d02d82ef1833638d338ecf/raw/156aaa50dc028ebb731521abaf423e751fd080de/emacs-25.2-inline.patch
# curl -LO https://gist.githubusercontent.com/takaxp/5294b6c52782d0be0b25342be62e4a77/raw/9c9325288ff03a50ee26e4e32c8ca57c0dd81ace/emacs-25.2-inline-googleime.patch
# curl -LO https://gist.githubusercontent.com/takaxp/e2b97f67d9e8db09961c8c4fb4be309d/raw/da9edcdedacfe5c48ecbfc73a629e7c553199e8d/ns-26.2-private.patch
tar zxvf emacs-$VERSION.tar.gz
cd ./emacs-$VERSION
patch -p1 < ../emacs-25.2-inline.patch
# patch -p1 < ../emacs-25.2-inline-googleime.patch
# patch -p1 < ../ns-26.2-private.patch
sleep 5
./autogen.sh
./configure CC=clang --without-x --with-ns --with-modules
make bootstrap -j1
make install -j1
cd ./nextstep
# codesign --force --deep --sign "myApp" Emacs.app
open .


最新の開発コードを使う場合(27.0.xx)

最新の開発コードをビルドして,インラインパッチを適用して使いたい人は,次のパッチを使用してください.26系と一部の実装が変わっているため,インラインパッチも少し修正されています.したがって,27系専用のパッチになります.

次のスクリプトでは --depth 1 で最新コミットのみ取り寄せていることに留意してください.

#!/bin/sh

cd ~/Desktop
git clone --depth 1 git://git.sv.gnu.org/emacs.git
curl -LO https://gist.githubusercontent.com/takaxp/534a5a1bc6e0494a78eb72a271b429c5/raw/c85fbe0b1bb4ec02f4aedcf01871d03b6eb0cb6c/emacs-27.0-inline.patch

cd emacs
# git checkout -b master
# git reset --hard 9ad0f1d15c
patch -p1 < ../emacs-27.0-inline.patch

sleep 5
./autogen.sh
./configure CC=clang --without-x --with-ns --with-modules
make bootstrap -j1
make install -j1
cd ./nextstep
open .


Mojave 対応の開発コードを使う場合(26.1.xx)

NOTE: 26.2 が公開されました(2019-04-12)ので,めでたく,この節は役目を終えました.

安定版の 26.1 は残念ながらMojaveでは正しく動作しないので,EMP版をインストールするか,開発コードをビルドしなければなりません.emacs-26 ブランチの 9ad0f1d15c 以降を使えばOKです.同ブランチ内の最新のコミットが良いと思いますので,適宜スクリプトにあるコミット番号を書き換えてください.(git log -n 1 --format=%Hで最新コミットがわかります.)インラインパッチは,25.2 と同じものを使えます.

#!/bin/sh

cd ~/Desktop
git clone git://git.sv.gnu.org/emacs.git
curl -LO https://gist.githubusercontent.com/takaxp/3314a153f6d02d82ef1833638d338ecf/raw/156aaa50dc028ebb731521abaf423e751fd080de/emacs-25.2-inline.patch

cd emacs
# git reset --hard 6217746dd6
git checkout -b emacs-26
git reset --hard 9ad0f1d15c
patch -p1 < ../emacs-25.2-inline.patch

sleep 5
./autogen.sh
./configure CC=clang --without-x --with-ns --with-modules
make bootstrap -j1
make install -j1
cd ./nextstep


以前の安定版を使う場合


25.3/25.2 の場合

以下はいつもの野良ビルド手順(25.3)

なお25.2用パッチがそのまま使えます.また25.2用にビルドする場合は,VERSION変数を変更してください.

#!/bin/sh

cd ~/Desktop
mkdir emacs_ns
cd ~/Desktop/emacs_ns
VERSION=25.3
curl -LO http://ftpmirror.gnu.org/emacs/emacs-$VERSION.tar.gz
curl -LO https://gist.githubusercontent.com/takaxp/3314a153f6d02d82ef1833638d338ecf/raw/156aaa50dc028ebb731521abaf423e751fd080de/emacs-25.2-inline.patch
tar zxvf emacs-$VERSION.tar.gz
cd ./emacs-$VERSION
patch -p1 < ../emacs-25.2-inline.patch
sleep 5
./autogen.sh
./configure --without-x --with-ns --with-modules
make bootstrap -j1
make install -j1
cd ./nextstep
open .

# あとはお好きな場所に Emacs.app を移動させてお試しください


25.1 の場合

25.1 の場合はこちら

#!/bin/sh

cd ~/Desktop
mkdir emacs_ns
cd ~/Desktop/emacs_ns
VERSION=25.1
curl -LO http://ftpmirror.gnu.org/emacs/emacs-$VERSION.tar.gz
curl -LO https://gist.githubusercontent.com/takaxp/f30f54663c08e257b8846cc68b37f09f/raw/6ac48eac29f9d0df65310a249cfe04d7351657ee/emacs-25.1-inline.patch
tar zxvf emacs-$VERSION.tar.gz
cd ./emacs-$VERSION
patch -p1 < ../emacs-25.1-inline.patch
sleep 5
./autogen.sh
./configure --without-x --with-ns --with-modules
make bootstrap -j1
make install -j1
cd ./nextstep
open .


25.3/25.2 で Google IME(locale=en) な場合

最後に,locateが en で,Google IME を使う人は,次を(パッチが違います).25.3向け(25.2の場合は,VERSION変数を変更してください.25.2用と25.3用のパッチは同じものです.)

#!/bin/sh

cd ~/Desktop
mkdir emacs_ns
cd ~/Desktop/emacs_ns
VERSION=25.3
curl -LO http://ftpmirror.gnu.org/emacs/emacs-$VERSION.tar.gz
curl -LO https://gist.githubusercontent.com/takaxp/5294b6c52782d0be0b25342be62e4a77/raw/9c9325288ff03a50ee26e4e32c8ca57c0dd81ace/emacs-25.2-inline-googleime.patch
tar zxvf emacs-$VERSION.tar.gz
cd ./emacs-$VERSION
patch -p1 < ../emacs-25.2-inline-googleime.patch
sleep 5
./autogen.sh
./configure --without-x --with-ns --with-modules
make bootstrap -j1
make install -j1
cd ./nextstep
open .


フレームの周囲にある余白を消したい場合

(2018-05-29) 26.1 リリース,インラインパッチは 25.2がそのまま使えます.以下は,フレームの余白をソースコードレベルで消す等に対応した個人用パッチ付きビルドスクリプト.GoogleIME用.

#!/bin/sh

cd ~/Desktop
mkdir emacs_ns
cd ~/Desktop/emacs_ns
VERSION=26.1
#POSTFIX=-rc1
curl -LO ftp://ftp.gnu.org/gnu/emacs/emacs-$VERSION.tar.gz
#curl -LO ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-$VERSION$POSTFIX.tar.xz
curl -LO https://gist.githubusercontent.com/takaxp/5294b6c52782d0be0b25342be62e4a77/raw/9c9325288ff03a50ee26e4e32c8ca57c0dd81ace/emacs-25.2-inline-googleime.patch
curl -LO https://gist.githubusercontent.com/takaxp/01ff965361d70de93e9aba3795193cc7/raw/4265d48c13f33a2046669086756c85a2bb83c318/ns-private.patch
tar zxvf emacs-$VERSION$POSTFIX.tar.gz
cd ./emacs-$VERSION
patch -p1 < ../emacs-25.2-inline-googleime.patch
patch -p1 < ../ns-private.patch
sleep 5
./autogen.sh
./configure CC=clang --without-x --with-ns --with-modules
make bootstrap -j1
make install -j1
cd ./nextstep
open .

patch が動かない等はコメントへお願いします.また,libxml2関連でコケる人は,マスタカさんの記事をお読みください.

起動時間が高速化してますね.手元の環境で,24.5で 1475[msec] が 747[msec] に.


Follow up

./configure 時にオプションを付けると幸せになれそうです(by @syohex

ただ,ちゃんと遊ぶには,emacs-module.h が必要で, これはまだGit版のソースコードにしか同梱されていませn src/emacs-module.hとして格納されています.


  • --with-xwidgets(Emacs をガチブラウザ化するオプション.Linuxでお試しあれ.# 私自身Macでは成功していない)

また,「ddskkやAquaSKKは素のバイナリでも問題ないようす。」(by @kaz_yos)とのことです.