2016年11月11日金曜日

NTEmacs25.1をビルドした


前回からどうにか回避を考えたのですが、結局思いつかなかったので自分でビルドすることにしました。


今まで

  • NTEmacs25.1(簡易IME対応版)を利用させてもらっている(配布元)
  • インラインでの日本語入力時に、変換確定前後で文字の大きさが異なり、上下するのが気になる  
  • 更に24.5(gnupack)で使っていたinit.elの一部がエラーになる(w32-ime-initializeなど)
  • M-x describe-functionから見てみると、w32-ime.elやw32fns.cが無いことがわかる
  • 調べると、それらを生成しそうなパッチを発見、環境を作って当ててみることに
     

目標

  •  NTEmacs25.1 64bit 日本語インライン入力対応版を作成する

参考にしたもの


MSYS2のインストール 

まずは環境としてMSYS2のインストールを行います。はじめはMinGW-w64をインストールしてからMSYSをインストールしていたのですが、pacmanが使いたかったので初めからやり直しました。minGWをインストールしただけではlsが使えないというのが分かったのはよかったのですが。
使用バージョンは2.6.0だと思います。


 MSYS2の設定に関しては、環境変数HOMEが別のソフトに取られてしまっていたのと、CygwinのHOMEと合わせたかったので、msys2_shell.cmdとmingw64.iniでHOMEの設定。また、HOMEを共有しつつ.bashrcを別々に使いたかったので識別用の変数も設定しました。あとはminGWにパスを通すくらいです。

Cygwinで使っているPATHと分けたかったのと、環境変数PATHが長く変なところで誤動作を起こしたら嫌なので、そうならないようにいじったつもりです。minGW32は使う気がなかったので触りませんでした。


sys2_shell.cmd(追加行)
   set HOME=C:\(ホーム)
   set TERM=msys
   set CHECKTERM=MSYS


mingw64.ini(追加行)
   HOME=C:\(ホーム)
   CHECKTERM=MSYS

.bashrc
   if [[ $CHECKTERM = MSYS ] ] ; then
      echo "Loading .bashrc_sys..."
      source ~/.bashrc_msys
   else
      echo "Loading .bashrc_min..."
      source ~/.bashrc_min
   fi

  .bashrc_msys(一部)
   export TERM=msys
   export LS_COLORS="no=00:fi=00:di=01;36:ln=01;34"
   alias ls='ls -F --color=auto'

   export PATH=$PATH:/c/mingw-w64/usr/bin
   #これがないと動かない

   # -------------------------------------------------------------
   local_ver=`uname '-s' '-r' '-m' '-o'`
   echo "uname -srmo ->  $local_ver"
   cd ~


パッケージのインストールはこちらを参考にmsys2_shell.cmdから
   pacman -S base-devel \
   mingw-w64-x86_64-toolchain \
   mingw-w64-x86_64-xpm-nox \
   mingw-w64-x86_64-libtiff \
   mingw-w64-x86_64-giflib \
   mingw-w64-x86_64-libpng \
   mingw-w64-x86_64-libjpeg-turbo \
   mingw-w64-x86_64-librsvg \
   mingw-w64-x86_64-libxml2 \
   mingw-w64-x86_64-gnutls

Archで見た流れだ…とか思いながら眺めてました。特に失敗もなくラッキー。


Emacsソース入手


Emacsのソースはftp://ftp.ring.gr.jp/pub/GNU/emacs/からemacs-25.1.tar.gzを入手、解凍しました。また、使いたいパッチをここからタウンロードして、HOME/emacs-25.1に。
設定したHOMEに突っ込んだ上で、ここからminGW64.exeを起動。

この後は、
cd HOME/emacs-25.1
./autogen.sh
PKG_CONFIG_PATH=/mingw64/lib/pkgconfig  ./configure --prefix=/c/<checkout-dir> --without-imagemagick
 patch -b -p0 < emacs-25.1-w32-ime.diff
2016/11/10時点で、patchはエラーなく終了。

(一度patchの中を微妙に改行してしまったりしたようで、エラー祭りになりました。わけわからなくなったらtarまで戻るという…)


このあたりがすんだら
make
make install prefix=/c/インストールしたい先

なおインストール先ですが/c/gnupack-xxxx/app/emacsなど、emacsディレクトリを作って指定しないといきなりbinやshareが突っ込まれて大変になります。


問題がなければ、prefixで指定した先にemacsのファイルが作られていると思うので、emacs.exeが入っているディレクトリに必要なdllを突っ込みます。
横着して簡易IME版に入っていたdll全部持ってきたら怒られました。


差分はこんな感じです。



ビルドしたもの




 ビルドしていないもの





もともと文字の大きさや行間変更すれば対応できるじゃないか言えばそうなのですが、自力でパッチ当ててビルドの体験ができたので良かったと思います。
あとパッチ当てたついてに日本語変換で時々落ちる現象が止まればいいとか考えてます。


あと全く関係ない問題点

  •  MSYS2で十字キーとbackspaceとdeleteの挙動がおかしい
  • 十字キーは表示がおかしい、backspaceは見た目消えていないけど処理的には消えている?


2016年11月4日金曜日

NTEmacsを25.1にしたい


Emacsがメジャーアップデートしてからちょっと経ちますが、今更やる気になったので24.5からアップデートを試みました。
といっても、NTEmacsを落としてきてemacsディレクトリを既存のものと入れ替える程度のことしか行っていないのですが。

日本語の未確定文字が、編集行内に収まるように初めから設定されているのは非常にありがたいのですが、どうも25.1だと未確定文字と確定後の文字の大きさがずれているようで、入力毎に上下に動いてしまうのが気になっています。前は違和感はなかったので、どこかで設定できるのかなと思いたいです。

後は、もともとinit.elに書いていたw32-ime-initializeが聞かなくなっているようでした。
w32-ime.elがNTEmacs25.1には存在しないようで、24.5から抜いて突っ込んだりしたのですが、get-ime-mode関数が存在しないということでまたエラーを返されました。こちらはw32fns.cに存在している(らしい)のですが、確認できず。

get-ime-modeは、IMEの起動状態に応じてt,nilを返すだけだったので、無理矢理init.elに

(defun get-ime-mode()
    t )

とかアホなことを書いてエラー回避したのですが、そうするとウィンドウ左下に出している[Aa][J ]などのIMEの状態表示が[J ]で固定されてしまいました。IMEのON/OFFはうまく行っているので、入力システムには関係ないのかと思いつつ、結局元に戻しています。
(入力に影響がないのなら奇数回偶数回押されたらとも思ったのですが、バッファ移動した場合のことを考えてやめました)

公開されているパッチの中身をみるとget-ime-modeなどの問題は一気に解決しそうだなと思うのですが、ビルドの環境を整えるのもなと止まっています。

25.1からの新機能のdynamic moduleだとかで無理矢理get-ime-modeもどきをつくるか、IMEの状態表示を諦めるか、そもそもw32-ime-initializeをしないか…どうしましょうか。
(なおw32-ime-initializeをしなくても日本語入力は可能ですが、この場合もIME状態表示を諦めることになるようです)

25.1でinit.el編集していたのですが、自動でelispのガイドを出すようになってて読めない身としては大変助かりました。可能ならアップデートしたいのだけど…難しい。