summaryrefslogtreecommitdiffstats
path: root/cmd-queue.c
diff options
context:
space:
mode:
authornicm <nicm>2022-05-30 13:00:18 +0000
committernicm <nicm>2022-05-30 13:00:18 +0000
commitcd89000c1d75d0cfec28cf7e81b06f80a43ea093 (patch)
tree3d7fa0df54cb6f87fa5f53a35a86ebe623f278cc /cmd-queue.c
parent20b0b38cf47112c0219b5bd041d61c5a28fae0fd (diff)
Add a way for lines added to copy mode to be passed through the parser
to handle escape sequences and use it for run-shell, GitHub issue 3156.
Diffstat (limited to 'cmd-queue.c')
-rw-r--r--cmd-queue.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/cmd-queue.c b/cmd-queue.c
index 4fbdc4e7..8325e2e8 100644
--- a/cmd-queue.c
+++ b/cmd-queue.c
@@ -19,9 +19,11 @@
#include <sys/types.h>
#include <ctype.h>
+#include <pwd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
+#include <unistd.h>
#include "tmux.h"
@@ -124,7 +126,7 @@ cmdq_new(void)
{
struct cmdq_list *queue;
- queue = xcalloc (1, sizeof *queue);
+ queue = xcalloc(1, sizeof *queue);
TAILQ_INIT (&queue->list);
return (queue);
}
@@ -558,17 +560,31 @@ cmdq_add_message(struct cmdq_item *item)
{
struct client *c = item->client;
struct cmdq_state *state = item->state;
- const char *name, *key;
+ const char *key;
char *tmp;
+ uid_t uid;
+ struct passwd *pw;
+ char *user = NULL;
tmp = cmd_print(item->cmd);
if (c != NULL) {
- name = c->name;
+ uid = proc_get_peer_uid(c->peer);
+ if (uid != (uid_t)-1 && uid != getuid()) {
+ if ((pw = getpwuid(uid)) != NULL)
+ xasprintf(&user, "[%s]", pw->pw_name);
+ else
+ user = xstrdup("[unknown]");
+ } else
+ user = xstrdup("");
if (c->session != NULL && state->event.key != KEYC_NONE) {
key = key_string_lookup_key(state->event.key, 0);
- server_add_message("%s key %s: %s", name, key, tmp);
- } else
- server_add_message("%s command: %s", name, tmp);
+ server_add_message("%s%s key %s: %s", c->name, user,
+ key, tmp);
+ } else {
+ server_add_message("%s%s command: %s", c->name, user,
+ tmp);
+ }
+ free(user);
} else
server_add_message("command: %s", tmp);
free(tmp);
@@ -840,7 +856,7 @@ cmdq_print(struct cmdq_item *item, const char *fmt, ...)
window_pane_set_mode(wp, NULL, &window_view_mode, NULL,
NULL);
}
- window_copy_add(wp, "%s", msg);
+ window_copy_add(wp, 0, "%s", msg);
}
free(msg);