↑この様に Termux 上で Emacs が普段使い出来るまでになったので、その設定を覚書します。
使用したのは Fire HD 10 です。OS はほぼ Android 9 なので、Termux が普通に使えます。
Termux のインストール
Termux は今でも Google Play で配布してますが、Android10 の問題により Google Play の更新をやめているので、F-Droid のサイトから F-Droid アプリをインストールし、F-Droid アプリから Termux をインストールします。
F-Droid をインストールする時に、提供元不明のアプリケーションのインストールを許可する必要があります。
Emacs を普段使いするには Termux のバージョンが 0.118.0 以上が必要です。
以下、Termux をインストールして起動出来た状態を想定。
Ctrl ⇔ CapsLock する為に KCM リマップをインストールする
この後、端末上での作業になるので、Ctrl キーの入れ替えを行います。
物理キーボードを使わないなら不要です。
ちなみに、自分は Ctrl を[変換]キーに割り当てる「親指Ctrl」使いですが、ありがたい事にこのアプリはそれに対応しています。
Android で使えるキーボードは色々あると思いますが、自分が使ってるキーボード(TK-FBP073)だと、Android モードではなく Windows モードにしないと上手くキーの入れ替えが反映されませんでした。
Emacs のインストール
$ pkg upgrade
$ pkg install emacs
Emacs のキーバインドを正しく動かす為の Termux の設定
$ mkdir ~/.termux
$ cat ~/.termux/termux.properties
ctrl-space-workaround = true
disable-hardware-keyboard-shortcuts = true
fullscreen = true
設定ファイル(~/.termux/termux.properties
)を↑この様な内容にします。
ctrl-space-workaround = true
は、Android9 以降で物理キーボードのCtrl+space
が OS に横取りされる問題の回避策です。
disable-hardware-keyboard-shortcuts = true
は、物理キーボードのCtrl+Alt+n
の様なキー入力を Termux が横取りする問題の回避策です。
Termux はCtrl+Alt
を幾つかの機能のショートカットのプリフィックスとしているので、それらが使えなくなります。
使いたい場合は、別途設定してください。(https://wiki.termux.com/wiki/Terminal_Settings)
最後のfullscreen = true
はお好みで。
以下に、ヒアドキュメントのコマンドを書いておきます。コマンドラインにコピペして Enter で作成出来ます。
cat <<EOF > ~/.termux/termux.properties
ctrl-space-workaround = true
disable-hardware-keyboard-shortcuts = true
fullscreen = true
EOF
曖昧文字幅の問題(東アジアの文字幅:Wikipedia)により Emacs の表示がズレる問題の解消
↑こんな感じに変な事になります…。
▽kか
と不要な k が見えてたり、ウィンドウの区切り(フリンジ)がズレていたり、右下に変なラインが表示されてたり)
Termux が純粋な Linux アプリであれば、wcwidh()
のハックにより解消出来ますが、Termux は Java アプリなのでハックの仕方が分かりません…。
(ソースを修正すべき箇所は多分ここです→ https://github.com/termux/termux-app/blob/master/terminal-emulator/src/main/java/com/termux/terminal/WcWidth.java)
なので、Emacs 側の方で曖昧文字の幅を全て Termux に合わせて1
にする設定を行います。
eaw.el
を手動で落とすならこちら → https://gist.github.com/chuntaro/c8e787eedf07c566fc0760b246ae1382
$ curl -O https://gist.githubusercontent.com/chuntaro/c8e787eedf07c566fc0760b246ae1382/raw/6c903a3b4d08501137be9934717375fd1d1020c6/eaw.el
$ cat eaw.el
;;; eaw.el --- Fix east asian ambiguous width issue for emacs
;; Author: HAMANO Tsukasa <code@cuspy.org>
;; URL: https://github.com/hamano/locale-eaw
;; Version: 12
;; MIT License
;;; Code:
(defconst eaw-east-asian-ambiguous
[#x00A1 ; (1) Po INVERTED EXCLAMATION MARK
#x00A4 ; (1) Sc CURRENCY SIGN
#x00A7 ; (2) Po SECTION SIGN
...略...
(defun eaw-fullwidth ()
(eaw--set-width 2))
(defun eaw-halfwidth ()
(eaw--set-width 1))
(provide 'eaw)
;;; eaw.el ends here
このeaw.el
は https://github.com/hamano/locale-eaw で公開されていたものを、今回の目的に合わせて修正したものです。
修正内容は、絵文字が含まれていたのを削除とeaw-halfwidth
関数の追加です。
このeaw.el
をload-path
が通ってるディレクトリにコピーしてinit.el
に、
(require 'eaw)
(eaw-halfwidth)
と追加します。
これで変な表示は無くなりますが、自分の環境だと曖昧文字幅が 1 になったせいか、○
(C-x 8 RET WHITE CIRCLE)が縦長になりました。
これはフォントを変更する事で対処出来ます。
自分はCascadia Code
(https://github.com/microsoft/cascadia-code) を使用しました。
このフォントは Windows Terminal に標準で付いてくるようになった、オープンソースのフォントです。
ちなみに、Windows Terminal も曖昧文字の幅を強制的に 1 にする端末エミュレーターです。(しかも、Windows アプリなのでハックの仕方も分かりません)
そのせいなのか、曖昧文字を全て綺麗に 1 の幅で表示してくれます。流石ですw
フォントをダウンロードしたら、CascadiaCode.ttf
を~/.termux/font.ttf
の名前でコピーするだけです。
Emacs を 24bit カラーで使う為の設定 (Emacs28 からは不要)
https://www.gnu.org/software/emacs/manual/html_node/efaq/Colors-on-a-TTY.html
↑ここに手順が書いてありますが、どうも Termux では上手く行かないので、stack overflowに書いてある方法を実行します。
terminfo-24bit.src
を手動で落とすならこちら → https://gist.github.com/chuntaro/aafe8fe9c2c4d70420c3f50a6bf384cc
$ curl -O https://gist.githubusercontent.com/chuntaro/aafe8fe9c2c4d70420c3f50a6bf384cc/raw/779a232b801c5128f6db1c77de248cb0bf082cfa/terminfo-24bit.src
$ cat terminfo-24bit.src
# Use colon separators.
xterm-24bit|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
setf24=\E[38:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
# Use semicolon separators.
xterm-24bits|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
$ tic -x terminfo-24bit.src
$ TERM=xterm-24bits emacs -nw
tic
コマンドを-o
オプションを付けて実行すると、なぜか segv を起こすので、直接/usr/share/terminfo/
内を更新します。
特に困る事も無いでしょう。
Emacs の mark-sexp のキーバインドが効かない問題の回避策
mark-sexp
は通常C+M+@
かC+M+SPC
に割り当てられてますが、Termux 上でどちらも正しく認識されません…。
それぞれ、M-@
とC-@
と認識されます。
自分は「親指Ctrl」の都合上、C+M+@
を使っているので、M-@
の方ですが、これはmark-word
という全く使う事がないコマンドなので、
(global-set-key "\M-@" 'mark-sexp)
とする事で、C+M+@
→M-@
→mark-sexp
となり、回避出来ました。
ただ、ほとんどの人はC-M-SPC
を使うと思うので、その場合は今の所、回避策がありません!(滝汗…
この1点をもって、常用出来ないと思う人もいるかも知れません。自分だったら出来ないです。
そもそも端末に詳しくないので、そういうものなのか、回避策が有るのかもわかりません。
なので、Github に issue でも上げるべきなのかも知れませんね。(他人事良くない)
取り合えず、これらを全て行った結果が、冒頭の画像になります。
余談
曖昧文字で検索すると、必ず全角(幅 2)に設定する方法が出てきます。
もう半角でも良いんじゃないかと思う様になりました。
邪道なんでしょうかね?
Termux はsshd
が使えるので、PC とのデータのやり取り用に先に設定しておいた方が良いでしょう。
画面下の方に[ESC][↑]の様な拡張キー領域がありますが、これは音量大キー+kを同時押しで表示のトグルが出来ます。(https://wiki.termux.com/wiki/Touch_Keyboard)
Emacs で日本語の入力はDDSKKを使っています。
mozc が有れば良いのでしょうが、Termux のリポジトリに mozc が無いです。
最初 Termux を入れて Emacs を起動した時は、まずCtrl+space
が使えなくて諦め、暫くするとその回避策がコミットされ、喜び勇んで Emacs を起動すると、今度はCtrl+Alt+n
が使えなくて諦め、と数年は指をくわえて見てるだけでしたw
しかし、それも issue が立ち上がり、回避策のパッチがコミットされて、いよいよ使えるようになったという次第です。
いやー長かった!
以上です。