Emacs内でgpg fileがsaveできなくなった時に対応したことメモ
Introduction
自分用のメモです。 何もしていないのに急にgpg fileがEmacsでsaveできなくなったので調査した。
再現手順
- MacでEmacsを起動する
- Emacsでgpg fileを開く
- 適当に編集する
C-x C-s
でsave-buffer
を実行するとsaveできずにhangする
原因について
「emacs org-encrypt-entry hangs when file is modified - stackoverflow」に同様の問題が投稿されていました。
Emacsのcommitに以下のような記述が追加されていました。 https://git.savannah.gnu.org/cgit/emacs.git/commit/?h=emacs-29&id=1b9812af80b6ceec8418636dbf84c0fbcd3ab694
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index c0cb5b0..82ab48f 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -516,6 +516,13 @@ directory copy is ineffective.
This is due to an arbitrary limit in certain versions of awk.
The solution is to use gawk (GNU awk).
+*** Saving, via EasyPG, a file encrypted with GnuPG hangs
+
+This is known to happen with GnuPG v2.4.1. The only known workaround
+is to downgrade to a version of GnuPG older than 2.4.1 (or, in the
+future, upgrade to a newer version which solves the problem, when such
+a fixed version becomes available)
+
** Problems with hostname resolution
*** Emacs does not know your host's fully-qualified domain name.
これによると、GnuPGのversionを下げることによってsave時にhangすることを防げるようです。
自分の手元では 2.4.0
を使っていますが、同様の問題が起きました。
Homebrewで入れる場合はちゃんとlogin shellにパスを通してあげる必要があります。 https://github.com/takeokunn/dotfiles/commit/55813ec0e37d78a0965a8736b9ff868c6d3bb64a
対応方法
2023/06/24現在、Homebrewで最新のgpgを入れると v2.4.0
が降ってきます。
$ gpg --version
gpg (GnuPG) 2.4.0
以下のようにGnuPGのversionを下げます。
$ brew uninstall --ignore-dependencies gpg
$ brew install gnupg@2.2
versionを確認する。
$ gpg --version
gpg (GnuPG) 2.2.41
適当なファイルをsaveができればこの問題は解決。