ある Emacs Lisp のコードを利用すると突然 org-mode のタイムスタンプが漢字から英語になっちゃう問題の原因っぽいものを特定した。
ダイナミックスコープを利用して一度 system-time-locale を "C" にして format-time-string をすると、再度 format-time-string をすると system-time-locale が "C" のままになる。
これはきつい。
ある Emacs Lisp のコードを利用すると突然 org-mode のタイムスタンプが漢字から英語になっちゃう問題の原因っぽいものを特定した。
ダイナミックスコープを利用して一度 system-time-locale を "C" にして format-time-string をすると、再度 format-time-string をすると system-time-locale が "C" のままになる。
これはきつい。
あー、これは format-time-string に謎の副作用があるっぽいな。これ C のコードらしいのでつらい。
synchronize_system_time_locale って関数が怪しい。
system-time-locale、C以外を設定しても format-time-string に何も影響を与えんな。どうしよう。
Vprevious_system_time_locale の謎を解明するのは無理だな。この問題のために私の環境を system-time-locale C にしちゃうのはなんかやだし考えよ。
バグレポート時のチェックリスト発見https://www.gnu.org/software/emacs/manual/html_node/emacs/Checklist.html#Checklist
GNU Bug tracker の使い方が分からない問題
調べた感じ既知のバグではなさそうだ。でも面倒だな……。もう system-time-locale を C にして生きていきたい。
system-time-locale を nil にして一度 format-time-string を実行すればとりあえず一度 C にした影響を戻せることが分かった。ドキュメントに nil を設定した場合の挙動が書いてあったわ。
私の laptop に emacs の設定に謎のフックを入れることで解消しそう……。いや、system-time-locale を明示的に nil と設定しておくことで、一時的に C に変更されても元の挙動に戻せるのか。
あー、この設定は意味分からんことになりそう。 https://www.gnu.org/software/emacs/manual/html_node/elisp/Locales.html
emacs に (setq system-time-locale nil) と記載しておくことで Emacs の異常動作を直せることが分かった
これのおまじない感はすごいんだけど、とりあえず↑を設定すれば直るので解決ってことでいいか。
ただ system-time-locale のデフォルトが nil であるだけで救えるものがあるということはたしかなことだな。
Emacs の設定にこのスレッドへのリンクを記載したけど、Mastodon やめた後に意味分からなくなるリスクあるな。ちゃんとコメントで説明した方がいいやつだ。
記事書いた。同じ問題に遭遇した人がこの記事に辿りつければいいが。
Emacs の時刻表記が日本語から英語に変わる問題の解決法https://www.tojo.tokyo/org-mode-japanese-timestamp.html
senooken JP Social is a social network, courtesy of senooken. It runs on GNU social, version 2.0.2-beta0, available under the GNU Affero General Public License.
All senooken JP Social content and data are available under the Creative Commons Attribution 3.0 license.