[求助] 在iterm2 下启动 GUI Emacs 时 C-g 变成了 ESC

我是通过 Nix 在 Mac big sur 上安装的 EmacsGcc(通过 emacs-overlays 安装).

  services.emacs.package = pkgs.emacsUnstable;

  nixpkgs = {
    config = {
      allowUnfree = true;
      allowBroken = false;
      allowInsecure = false;
      allowUnsupportedSystem = false;
    };

    overlays = [
      (import (builtins.fetchTarball {
        url =
          "https://github.com/nix-community/emacs-overlay/archive/e9e6de910fe1a9c485b7a9c3ae321030bfb8cc36.tar.gz";
        sha256 = "1arqmdgkaak6m8gzcf71yqr4smk8abziy84rpb2dkq82023y5d44";
      }))
    ];
  };

通过在 iterm2 下输入 emacs 或者 emacs -Q 启动 GUI的 Emacs ,任何时候C-g 按键都会变成 Esc 键。

这个是最新版本 Emacs 引入的 bug 吗?还是 iterm2 需要设置(shell 用的是 zsh)。

emacs -nw 是正常的,直接从 Emacs.app 启动也是正常的。

问题已经解决。
通过下面的脚本 runemacs,可以正常在iterm 中启动 GUI emacs,同时还能继承 Nix home-manager 定义的 sessionVariable。

#!/bin/sh -e

EMACSAPP=Emacs
EMACSPATH=../Applications/${EMACSAPP}.app/Contents/MacOS/${EMACSAPP}
EMACSBIN="\$(dirname \$(which emacs))/$EMACSPATH"

exec bash -c "unset TZ ; $EMACSBIN $@"

PS: 之所以需要以这种方式启动,而不是直接从 Application 下启动,是因为直接从 Emacs.app 启动时,没法继承 sessionVariable,会导致 aspell 没法识别字典。
比如,在 Nix 中 home-manager 设置的这个变量就没法在 Emacs 中识别:

   home.sessionVariables = {
      ASPELL_CONF = "conf ${config.xdg.configHome}/aspell/config;";

    };