summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
m---------liberty0
-rw-r--r--xC.c31
3 files changed, 21 insertions, 12 deletions
diff --git a/NEWS b/NEWS
index 0d126ec..859fa93 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,7 @@
Unreleased
+ * xC: improved backlog helper integration capabilities
+
* xC: made it show WALLOPS messages, as PRIVMSG for the server buffer
* xD: implemented WALLOPS, choosing to make it target even non-operators
diff --git a/liberty b/liberty
-Subproject 1b9d89cab3bb1df73c58ccd8528eafd21a8c6e4
+Subproject f545be725df9195a5b5897ad95a0220acf10f14
diff --git a/xC.c b/xC.c
index 909675d..2b81e79 100644
--- a/xC.c
+++ b/xC.c
@@ -2480,9 +2480,11 @@ static struct config_schema g_config_behaviour[] =
.default_ = "1000",
.on_change = on_config_backlog_limit_change },
{ .name = "backlog_helper",
- .comment = "Shell command to display a buffer's history",
+ .comment = "Shell command to page buffer history (args: name [path])",
.type = CONFIG_ITEM_STRING,
- .default_ = "\"LESSSECURE=1 less -M -R +Gb\"" },
+ .default_ = "`name=$(echo \"$1\" | sed 's/[%?:.]/\\\\&/g'); "
+ "prompt='?f%F:'$name'. ?db- page %db?L of %D. .(?eEND:?PB%PB\\%..)'; "
+ "LESSSECURE=1 less +Gb -Ps\"$prompt\" \"${2:--R}\"`" },
{ .name = "backlog_helper_strip_formatting",
.comment = "Strip formatting from backlog helper input",
.type = CONFIG_ITEM_BOOLEAN,
@@ -13366,15 +13368,19 @@ input_editor_cleanup (struct app_context *ctx)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
static void
-launch_backlog_helper (struct app_context *ctx, int backlog_fd)
+launch_backlog_helper (struct app_context *ctx, int backlog_fd,
+ const char *name, const char *path)
{
hard_assert (!ctx->running_backlog_helper);
switch (spawn_helper_child (ctx))
{
case 0:
dup2 (backlog_fd, STDIN_FILENO);
- execl ("/bin/sh", "/bin/sh", "-c", get_config_string
- (ctx->config.root, "behaviour.backlog_helper"), NULL);
+ char *localized_name =
+ iconv_xstrdup (ctx->term_from_utf8, (char *) name, -1, NULL);
+ execl ("/bin/sh", "/bin/sh", "-c",
+ get_config_string (ctx->config.root, "behaviour.backlog_helper"),
+ PROGRAM_NAME, localized_name, path, NULL);
print_error ("%s: %s",
"Failed to launch backlog helper", strerror (errno));
_exit (EXIT_FAILURE);
@@ -13419,7 +13425,7 @@ display_backlog (struct app_context *ctx, int flush_opts)
rewind (backlog);
set_cloexec (fileno (backlog));
- launch_backlog_helper (ctx, fileno (backlog));
+ launch_backlog_helper (ctx, fileno (backlog), buffer->name, NULL);
fclose (backlog);
return true;
}
@@ -13447,24 +13453,25 @@ on_display_full_log (int count, int key, void *user_data)
(void) key;
struct app_context *ctx = user_data;
- char *path = buffer_get_log_path (ctx->current_buffer);
+ struct buffer *buffer = ctx->current_buffer;
+ char *path = buffer_get_log_path (buffer);
FILE *full_log = fopen (path, "rb");
- free (path);
-
if (!full_log)
{
log_global_error (ctx, "Failed to open log file for #s: #l",
ctx->current_buffer->name, strerror (errno));
+ free (path);
return false;
}
- if (ctx->current_buffer->log_file)
+ if (buffer->log_file)
// The regular flush will log any error eventually
- (void) fflush (ctx->current_buffer->log_file);
+ (void) fflush (buffer->log_file);
set_cloexec (fileno (full_log));
- launch_backlog_helper (ctx, fileno (full_log));
+ launch_backlog_helper (ctx, fileno (full_log), buffer->name, path);
fclose (full_log);
+ free (path);
return true;
}