Emacs
emacs-25
inline-patch

emacs-25.3/26.1/26.1.50(Mojave) をインラインパッチをあてて使う(macOS)

はじめに

正式版が登場した emacs-25.3/25.2/25.1, 26.1 を,インラインパッチをあてて使いたい人向けの記事です.
Mac で野良ビルドできる人が対象です.

Screen Shot 2017-09-12 at 1.42.07 PM.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) が動きません.修正パッチがEmacsのGitに登録されています.emacs-26@9ad0f1d15c をビルドすればOKです.Version は26.1.50になります.インラインパッチは,既存のものがそのまま使えますが,ビルドスクリプトを準備しました.

日本語入力対策

野良ビルドでやはり気になるのは日本語入力です.
実はプレリリースされる以前から,開発版では 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版もありますので,お試しあれ.

野良ビルド手順

以下はいつもの野良ビルド手順(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 の場合はこちら

#!/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 .

最後に,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-04-10) 26.1 RC1 リリース,インラインパッチは 25.2がそのまま使えます.以下は,フレームの余白をソースコードレベルで消す等に対応した個人用パッチ付きビルドスクリプト.GoogleIME用.

#!/bin/sh

cd ~/Desktop
mkdir emacs_ns
cd ~/Desktop/emacs_ns
#VERSION=26.0.91
VERSION=26.1
POSTFIX=-rc1
#curl -LO http://ftpmirror.gnu.org/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 --with-imagemagick
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 --with-imagemagick
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)とのことです.