« ^ »

trans.elで言語モードが異なる時にプロセスを再起動する

所要時間: 約 1分

Emacs用の翻訳ユーティリティを開発し保守しているのだが、言語モードを切り替えても以前の言語モードのままの処理が行われてしまうという問題がずっとあった。今回はこの問題を対処しようと思う。

課題

M-x trans-switch-lang をした後 M-x trans-region を実行する場合、既に起動済みのプロセスが存在するため、それを再利用する。ただし、そのプロセスは古いオプションによって起動しているため、 trans-switch-lang によって新たに指定した引数で実行されない。

修正方針

現在実行中のプロセスのオプションを保持しておく。もし trans-region 実行時に、実行中のオプションと期待するオプションが異なる場合、プロセスを再起動する。

現状の実装

起動中のプロセスは trans-process に保持する。起動時のモードは trans-current-lang-mode に保持しており、 trans-switch-lang によって切り替えできる。ただし trans-switch-lang は値の変更のみ行う。 trans-region は必ず trans-start を呼び出す。 trans-starttrans-process が非NILの場合のみ、プロセスの起動を行う。

修正内容

現在起動中のプロセスのオプションを保持するための trans-started-lang-mode 変数を追加する。 trans-start 関数内でプロセスの生成に成功した後、 trans-started-lang-modetrans-current-lang-mode の値を設定する。 trans-stop 関数では trans-started-lang-mode の値を初期値に変更する。 trans-region 関数で、主処理実行前に trans-started-lang-modetrans-current-lang-mode を比較し、値が異なれば trans-stop 関数を呼び出す。

修正した差分を置いておく。

https://github.com/TakesxiSximada/emacs.d/commit/f485a4900d6ca3da607cedbadb4e673a0afb2ff7