From 6de6cae3e70caba0ff8fe3d2d6cb7c4fd0022618 Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Sun, 8 Sep 2024 15:49:08 -0700 Subject: [PATCH] repl: Patch editline to recognize Meta-Left & Meta-Right This applies https://github.com/troglobit/editline/pull/70 to our build of editline, which translates `meta-left` and `meta-right` into `fd_word` and `bk_word`. This makes `nix repl` soooo much nicer to use! Note: My terminal renders `meta-left` as `\e\e[C` and `meta-right` as `\e\e[D`. Closes https://git.lix.systems/lix-project/lix/issues/501 Change-Id: I048b10cf17231bbf4e6bf38e1d1d8572cedaa194 --- .../rl-next/alt-left-and-alt-right-in-repl.md | 10 +++++++ package.nix | 29 ++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 doc/manual/rl-next/alt-left-and-alt-right-in-repl.md diff --git a/doc/manual/rl-next/alt-left-and-alt-right-in-repl.md b/doc/manual/rl-next/alt-left-and-alt-right-in-repl.md new file mode 100644 index 000000000..66e89a15e --- /dev/null +++ b/doc/manual/rl-next/alt-left-and-alt-right-in-repl.md @@ -0,0 +1,10 @@ +--- +synopsis: "`Alt+Left` and `Alt+Right` go back/forwards by words in `nix repl`" +issues: [fj#501] +cls: [1883] +category: Fixes +credits: 9999years +--- + +`nix repl` now recognizes `Alt+Left` and `Alt+Right` for navigating by words +when entering input in `nix repl` on more terminals/platforms. diff --git a/package.nix b/package.nix index e5ab5eff0..29824b183 100644 --- a/package.nix +++ b/package.nix @@ -22,6 +22,7 @@ doxygen, editline-lix ? __forDefaults.editline-lix, editline, + fetchpatch, git, gtest, jq, @@ -38,6 +39,7 @@ mercurial, meson, ninja, + ncurses, openssl, pegtl, pkg-config, @@ -81,7 +83,32 @@ boehmgc-nix = boehmgc.override { enableLargeConfig = true; }; editline-lix = editline.overrideAttrs (prev: { - configureFlags = prev.configureFlags or [ ] ++ [ (lib.enableFeature true "sigstop") ]; + patches = (prev.patches or [ ]) ++ [ + # Recognize `Alt-Left` and `Alt-Right` for navigating by words in more + # terminals/shells/platforms. + # + # See: https://github.com/troglobit/editline/pull/70/commits + (fetchpatch { + url = "https://github.com/troglobit/editline/pull/70/commits/d0f2a5bc2300b96b2434c7838184c1dfd6a639f5.diff"; + hash = "sha256-0bbtYDUlk1wA0kpTtlaNI6KaCjLmAesZjcWBJZ+DpyQ="; + }) + + (fetchpatch { + url = "https://github.com/troglobit/editline/pull/70/commits/4c4455353a0a88bee09d5f27c28f81f747682fed.diff"; + hash = "sha256-nVezspwVzeB/8zENeKgwPVum0W1MLv4dOW0967WbX5w="; + }) + ]; + + configureFlags = (prev.configureFlags or [ ]) ++ [ + # Enable SIGSTOP (Ctrl-Z) behavior. + (lib.enableFeature true "sigstop") + # Enable ANSI arrow keys. + (lib.enableFeature true "arrow-keys") + # Use termcap library to query terminal size. + (lib.enableFeature (ncurses != null) "termcap") + ]; + + nativeBuildInputs = (prev.nativeBuildInputs or [ ]) ++ [ ncurses ]; }); build-release-notes = callPackage ./maintainers/build-release-notes.nix { };