きっかけ
帰省する時にEmacsとJulia言語が動く環境があればいいなと思いました。
といってもパソコンを持って帰るのはやり過ぎで,かといってスマートフォンは画面が小さく
年寄りの視力では辛そうです。
そこで,AndroidのタブレットでEmacsとJulia言語が同時に動く環境を作ろうと思いました。
で,快適に使うためにはネイティブにprecompileできる28以降のバージョンが動作するといいなと思いました。
UserLandの記事に関してネット上ではGUI環境を構築する方法が多いのですが, ここではあえてターミナルでの動作前提の環境構築をしたいと思います。
環境の選定
androidのlinuxっぽい環境を動かすにはTermuxとUserlandの二種類があるのですが、
Termuxはglibcを使っていないので,julia言語を動作させるのにハードルが高く,
ただ,Userlandのubuntuは22.04でEmacsのバージョンが27.1と低く…
というところで,どうするかと迷ったのですが,ubuntuならEmacsをビルドしてしまえばええか,ということで
Userlandで環境を構築します。
ubuntuのインストール後の日本語対応処理
Userlandにubuntuをインストールした後,日本語環境に対応するため,セットアップしていきます。
ネットの情報を頼りに構築してきます。
sudo apt -y install language-pack-ja sudo update-locale LANG=ja_JP.UTF-8 sudo update-locale LC_ALL=ja_JP.UTF-8 sudo dpkg-reconfigure tzdata
sudo dpkg-reconfigure tzdataでは,アジアのTokyoを選ぶようにします。
そして~/.profileに次の行を追加して再ログインします。
export LANG=ja_JP.UTF-8
emacs-29.4のビルド
次にEmacs-29.4のビルドを行います。
次はあまり必要がないかもしれませんが,後々効いてくるので あらかじめインストールしておいた方がいいかもしれません。
sudo apt install ca-certificates
そして,/etc/apt/sources.listをいじってEmacsのソースパッケージにアクセスできるようにします。
これは,emacsのビルドに必要なパッケージを簡便にダウンロードするために必要です。
deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy universe deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-updates universe
あたりのコメントアウト(行の先頭の#を消す)でEmacsのソースパッケージにアクセスできるようになると思います。
そして次の一連のコマンドを実行します。
... build-dep ...でEmacs(27.1)のビルドに必要な一連のパッケージをインストールします。
libgccjit-11-devは28以降が対応しているネイティブコンパイル対応版ビルドに必要なパッケージ,
libtree-sitter-devは29以降が対応しているtree-sitter対応版ビルドに必要なパッケージです。
sudo apt update sudo apt build-dep emacs-gtk sudo apt install libgccjit-11-dev sudo apt install libtree-sitter-dev wget http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-29.4.tar.gz tar -xzf emacs-29.4.tar.gz
そして,ビルドしてインストールします。フラグはネット検索でおすすめと 書いてあったもので,実際いいのかどうかはよく分かりません。
cd emacs-29.4 ./autogen.sh ./configure --prefix=$HOME/.local --with-native-compliation \ --with-mailutils --with-tree-sitter \ CFLAGS="-O2 -pipe -march=native -fomit-frame-pointer" make make install
ctrl-spaceを活かす設定
標準ではターミナル上でctrl-spaceを入力するとandroid 11以降だったかではOSにキー入力を奪われるので,
対策を実施します。
/host-rootfs/data/data/tech.ula/files/home/.termux/termux.propertiesという設定ファイルに
ctrl-space-workaround=true
を書くといいのですが,現実的には$HOMEにtermux.propertiesというファイルを作って上記のように記入し,
sudo mkdir -p /host-rootfs/data/data/tech.ula/files/home/.termux/ cp termux.properties /host-rootfs/data/data/tech.ula/files/home/.termux/
という感じで設定するのが現実的かと思います。
uim-mozcの設定
Emacs上ではtc.elが動くので日本語の入力の問題はないのですが,ターミナル上でも
日本語が入力できるように対策をします。
ネットから集めた情報から次のような一連の処理を行います。
おもむろに次のコマンドを実行します。
~/.configを作っておかないとuim-mozcがうまく起動してくれないので,先に作っておきます。
ポイントはuim-module-manager --register mozcでmozcをuimへ手動で登録する必要があることです。
mkdir ~/.config sudo apt install uim-fep uim-mozc uim-module-manager --register mozc
ここで,色々試してみたのですがuim-mozcの日本語入力モードとの切り替えをWindowsと同じっぽく
Alt-` で行います。
~/.uimを次のように記述します。
(define default-im-name 'mozc) (define-key generic-on-key? '("<Alt>`")) (define-key generic-off-key? '("<Alt>`"))
なお,bluetooth等で接続しているキーボードの配列は 設定の「言語と入力/物理キーボード」で物理キーボードの名前を選んでキーボードレイアウトの選択 をすれば変更できるかと思います。
英語キーボードを使っているので基本的にデフォルト設定そのままです。
そして,uim-fepコマンドで日本語入力環境が動きます。
とりあえずはこれで一通りでしょうか。
Julia言語のインストール
おっと,忘れていました。といっても特にやることはあまりなくて, 公式サイトのインストール方法 にもあるように,次のコマンドを実行するだけです。
curl -fsSL https://install.julialang.org | sh
glibcを使っていないTermuxではこうはいかず,今回Userlandを使った理由でもあります。
動作例
次のような感じです。

というか,うまくgifファイルをアップロードすることができませんでした…
おまけというか…
一応,tailscaleと組み合わせて外から家のPCにつないでEmacsのLLMクライアントであるEllamaの
利用も出来そうということは確認しています。
OLLAMA_ORIGINSの設定でタブレットPCにも許可した後,EllamaのOllama設定を変更するとか,
私の場合は踏み台サーバーにtailscaleとssh -Lオプションでollamaの動作PCのポートをタブレットのollamaの
ポート番号にリンクして利用できそうという感じです。
ただ,この年末年始にはそこまではしない予定です。