Emacs内でgpg fileがsaveできなくなった時に対応したことメモ

Introduction

自分用のメモです。 何もしていないのに急にgpg fileがEmacsでsaveできなくなったので調査した。

再現手順

  1. MacでEmacsを起動する
  2. Emacsでgpg fileを開く
  3. 適当に編集する
  4. C-x C-ssave-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ができればこの問題は解決。