From 7ae0409989187d44044c4cd6f274f0a02ec5f826 Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Sun, 8 Sep 2024 18:37:28 -0700 Subject: [PATCH] Remove readline support Lix cannot be built with GNU readline, and we would "rather not" be GPL. Change-Id: I0e86f0f10dab966ab1d1d467fb61fd2de50c00de --- doc/manual/rl-next/readline-support-removed.md | 17 +++++++++++++++++ src/libcmd/repl-interacter.cc | 9 --------- src/libutil/experimental-features.cc | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 doc/manual/rl-next/readline-support-removed.md diff --git a/doc/manual/rl-next/readline-support-removed.md b/doc/manual/rl-next/readline-support-removed.md new file mode 100644 index 000000000..6e4faeb67 --- /dev/null +++ b/doc/manual/rl-next/readline-support-removed.md @@ -0,0 +1,17 @@ +--- +synopsis: readline support removed +cls: [1885] +category: Packaging +credits: [9999years] +--- + +Support for building Lix with [`readline`][readline] instead of +[`editline`][editline] has been removed. `readline` support hasn't worked for a +long time (attempting to use it would lead to build errors) and would make Lix +subject to the GPL if it did work. In the future, we're hoping to replace +`editline` with [`rustyline`][rustyline] for improved ergonomics in the `nix +repl`. + +[readline]: https://en.wikipedia.org/wiki/GNU_Readline +[editline]: https://github.com/troglobit/editline +[rustyline]: https://github.com/kkawakam/rustyline diff --git a/src/libcmd/repl-interacter.cc b/src/libcmd/repl-interacter.cc index 6979e3db4..459b048f4 100644 --- a/src/libcmd/repl-interacter.cc +++ b/src/libcmd/repl-interacter.cc @@ -8,10 +8,6 @@ #include #include -#ifdef READLINE -#include -#include -#else // editline < 1.15.2 don't wrap their API for C++ usage // (added in https://github.com/troglobit/editline/commit/91398ceb3427b730995357e9d120539fb9bb7461). // This results in linker errors due to to name-mangling of editline C symbols. @@ -20,7 +16,6 @@ extern "C" { #include } -#endif #include "finally.hh" #include "repl-interacter.hh" @@ -115,17 +110,13 @@ ReadlineLikeInteracter::Guard ReadlineLikeInteracter::init(detail::ReplCompleter } catch (SysError & e) { logWarning(e.info()); } -#ifndef READLINE el_hist_size = 1000; -#endif read_history(historyFile.c_str()); auto oldRepl = curRepl; curRepl = repl; Guard restoreRepl([oldRepl] { curRepl = oldRepl; }); -#ifndef READLINE rl_set_complete_func(completionCallback); rl_set_list_possib_func(listPossibleCallback); -#endif return restoreRepl; } diff --git a/src/libutil/experimental-features.cc b/src/libutil/experimental-features.cc index 35982c28c..bb7a95a24 100644 --- a/src/libutil/experimental-features.cc +++ b/src/libutil/experimental-features.cc @@ -247,7 +247,7 @@ constexpr std::array xpFeatureDetails .tag = Xp::ReplAutomation, .name = "repl-automation", .description = R"( - Makes the repl not use readline/editline, print ENQ (U+0005) when ready for a command, and take commands followed by newline. + Makes the repl not use editline, print ENQ (U+0005) when ready for a command, and take commands followed by newline. )", }, }};