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-start
は trans-process
が非NILの場合のみ、プロセスの起動を行う。
修正内容
現在起動中のプロセスのオプションを保持するための trans-started-lang-mode
変数を追加する。 trans-start
関数内でプロセスの生成に成功した後、 trans-started-lang-mode
に trans-current-lang-mode
の値を設定する。 trans-stop
関数では trans-started-lang-mode
の値を初期値に変更する。 trans-region
関数で、主処理実行前に trans-started-lang-mode
と trans-current-lang-mode
を比較し、値が異なれば trans-stop
関数を呼び出す。
修正した差分を置いておく。
https://github.com/TakesxiSximada/emacs.d/commit/f485a4900d6ca3da607cedbadb4e673a0afb2ff7