From f3824311a16cbe70dbaeedc17a97dfcd11901c3f Mon Sep 17 00:00:00 2001 From: Nathan Henrie Date: Thu, 4 May 2023 11:39:46 -0600 Subject: [PATCH] readline: Add support for keynames (#3947) Kenames like `Control-n` or `meta-p` should not be quoted or they don't work. Keyseqs like `\C-p` or `ab` must continue to be quoted. See also: https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Fixes https://github.com/nix-community/home-manager/issues/3611 --- modules/programs/readline.nix | 9 ++++++++- tests/modules/programs/readline/using-all-options.nix | 5 ++++- tests/modules/programs/readline/using-all-options.txt | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/programs/readline.nix b/modules/programs/readline.nix index 2658061f..fecb4572 100644 --- a/modules/programs/readline.nix +++ b/modules/programs/readline.nix @@ -21,7 +21,14 @@ let abort ("values ${toPretty v} is of unsupported type"); in "set ${n} ${mkValueStr v}"; - mkBindingStr = k: v: ''"${k}": ${v}''; + mkBindingStr = k: v: + let + isKeynameNotKeyseq = k: + builtins.elem (builtins.head (lib.splitString "-" (toLower k))) [ + "control" + "meta" + ]; + in if isKeynameNotKeyseq k then "${k}: ${v}" else ''"${k}": ${v}''; in { options.programs.readline = { diff --git a/tests/modules/programs/readline/using-all-options.nix b/tests/modules/programs/readline/using-all-options.nix index ab851020..85c9fc14 100644 --- a/tests/modules/programs/readline/using-all-options.nix +++ b/tests/modules/programs/readline/using-all-options.nix @@ -7,7 +7,10 @@ with lib; programs.readline = { enable = true; - bindings = { "\\C-h" = "backward-kill-word"; }; + bindings = { + "\\C-h" = "backward-kill-word"; + "Control-p" = ''"whups"''; + }; variables = { bell-style = "audible"; diff --git a/tests/modules/programs/readline/using-all-options.txt b/tests/modules/programs/readline/using-all-options.txt index 6b4aef51..e8f10932 100644 --- a/tests/modules/programs/readline/using-all-options.txt +++ b/tests/modules/programs/readline/using-all-options.txt @@ -4,6 +4,7 @@ $include /etc/inputrc set bell-style audible set completion-map-case on set completion-prefix-display-length 2 +Control-p: "whups" "\C-h": backward-kill-word $if mode=emacs "\e[1~": beginning-of-line