summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2024-12-17 03:28:12 +0100
committerPřemysl Eric Janouch <p@janouch.name>2024-12-17 03:31:00 +0100
commit509cb9f4dd0cee094a51b436a7a278d404b750e7 (patch)
treed747fb882b5d6bb199f800637de5dc95ff5df0d2
parentb3684c4d9fdf92b9bbabb95f31cd936713c63267 (diff)
downloadxK-509cb9f4dd0cee094a51b436a7a278d404b750e7.tar.gz
xK-509cb9f4dd0cee094a51b436a7a278d404b750e7.tar.xz
xK-509cb9f4dd0cee094a51b436a7a278d404b750e7.zip
xC: fix newer Readline, allow stdin streaming
Also update NEWS.
-rw-r--r--NEWS8
-rw-r--r--xC.c12
2 files changed, 17 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 4a32576..b8c7a7d 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,15 @@
Unreleased
+ * xC: fixed keyboard EOF behaviour with Readline >= 8.0
+
+ * xC: made it possible to stream commands into the binary
+
+ * xM/xW: various bugfixes
+
* Added a Fyne frontend for xC called xA
+ * Added a Qt Widgets frontend for xC called xT
+
2.0.0 (2024-07-28) "Perfect Is the Enemy of Good"
diff --git a/xC.c b/xC.c
index df73492..fde1874 100644
--- a/xC.c
+++ b/xC.c
@@ -474,6 +474,10 @@ input_rl_start (void *input, const char *program_name)
// autofilter, and we don't generally want alphabetic ordering at all
rl_sort_completion_matches = false;
+ // Readline >= 8.0 otherwise prints spurious newlines on EOF.
+ if (RL_VERSION_MAJOR >= 8)
+ rl_variable_bind ("enable-bracketed-paste", "off");
+
hard_assert (self->prompt != NULL);
// The inputrc is read before any callbacks are called, so we need to
// register all functions that our user may want to map up front
@@ -14603,21 +14607,23 @@ on_readline_input (char *line)
if (*line)
add_history (line);
- // readline always erases the input line after returning from here,
+ // Readline always erases the input line after returning from here,
// but we don't want that to happen if the command to be executed
// would switch the buffer (we'd keep the already executed command in
// the old buffer and delete any input restored from the new buffer)
strv_append_owned (&ctx->pending_input, line);
poller_idle_set (&ctx->input_event);
}
- else
+ else if (isatty (STDIN_FILENO))
{
- // Prevent readline from showing the prompt twice for w/e reason
+ // Prevent Readline from showing the prompt twice for w/e reason
CALL (ctx->input, hide);
input_rl__restore (self);
CALL (ctx->input, ding);
}
+ else
+ request_quit (ctx, NULL);
if (self->active)
// Readline automatically redisplays it