-/* $OpenBSD: notify.c,v 1.41 2022/05/30 12:55:25 nicm Exp $ */
+/* $OpenBSD: notify.c,v 1.42 2022/08/15 09:10:34 nicm Exp $ */
/*
* Copyright (c) 2012 George Nachman <tmux@georgester.com>
struct session *session;
struct window *window;
int pane;
+ const char *pbname;
};
static struct cmdq_item *
control_notify_session_closed(ne->session);
if (strcmp(ne->name, "session-window-changed") == 0)
control_notify_session_window_changed(ne->session);
+ if (strcmp(ne->name, "paste-buffer-changed") == 0)
+ control_notify_paste_buffer_changed(ne->pbname);
notify_insert_hook(item, ne);
format_free(ne->formats);
free((void *)ne->name);
+ free((void *)ne->pbname);
free(ne);
return (CMD_RETURN_NORMAL);
static void
notify_add(const char *name, struct cmd_find_state *fs, struct client *c,
- struct session *s, struct window *w, struct window_pane *wp)
+ struct session *s, struct window *w, struct window_pane *wp,
+ const char *pbname)
{
struct notify_entry *ne;
struct cmdq_item *item;
ne->session = s;
ne->window = w;
ne->pane = (wp != NULL ? wp->id : -1);
+ ne->pbname = (pbname != NULL ? xstrdup(pbname) : NULL);
ne->formats = format_create(NULL, NULL, 0, FORMAT_NOJOBS);
format_add(ne->formats, "hook", "%s", name);
struct cmd_find_state fs;
cmd_find_from_client(&fs, c, 0);
- notify_add(name, &fs, c, NULL, NULL, NULL);
+ notify_add(name, &fs, c, NULL, NULL, NULL, NULL);
}
void
cmd_find_from_session(&fs, s, 0);
else
cmd_find_from_nothing(&fs, 0);
- notify_add(name, &fs, NULL, s, NULL, NULL);
+ notify_add(name, &fs, NULL, s, NULL, NULL, NULL);
}
void
struct cmd_find_state fs;
cmd_find_from_winlink(&fs, wl, 0);
- notify_add(name, &fs, NULL, wl->session, wl->window, NULL);
+ notify_add(name, &fs, NULL, wl->session, wl->window, NULL, NULL);
}
void
struct cmd_find_state fs;
cmd_find_from_session_window(&fs, s, w, 0);
- notify_add(name, &fs, NULL, s, w, NULL);
+ notify_add(name, &fs, NULL, s, w, NULL, NULL);
}
void
struct cmd_find_state fs;
cmd_find_from_window(&fs, w, 0);
- notify_add(name, &fs, NULL, NULL, w, NULL);
+ notify_add(name, &fs, NULL, NULL, w, NULL, NULL);
}
void
struct cmd_find_state fs;
cmd_find_from_pane(&fs, wp, 0);
- notify_add(name, &fs, NULL, NULL, NULL, wp);
+ notify_add(name, &fs, NULL, NULL, NULL, wp, NULL);
+}
+
+void
+notify_paste_buffer(const char *pbname)
+{
+ struct cmd_find_state fs;
+
+ cmd_find_clear_state(&fs, 0);
+ notify_add("paste-buffer-changed", &fs, NULL, NULL, NULL, NULL, pbname);
}
-/* $OpenBSD: paste.c,v 1.43 2022/06/04 07:42:07 nicm Exp $ */
+/* $OpenBSD: paste.c,v 1.44 2022/08/15 09:10:34 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
void
paste_free(struct paste_buffer *pb)
{
+ notify_paste_buffer(pb->name);
+
RB_REMOVE(paste_name_tree, &paste_by_name, pb);
RB_REMOVE(paste_time_tree, &paste_by_time, pb);
if (pb->automatic)
pb->order = paste_next_order++;
RB_INSERT(paste_name_tree, &paste_by_name, pb);
RB_INSERT(paste_time_tree, &paste_by_time, pb);
+
+ notify_paste_buffer(pb->name);
}
/* Rename a paste buffer. */
RB_INSERT(paste_name_tree, &paste_by_name, pb);
+ notify_paste_buffer(oldname);
+ notify_paste_buffer(newname);
+
return (0);
}
RB_INSERT(paste_name_tree, &paste_by_name, pb);
RB_INSERT(paste_time_tree, &paste_by_time, pb);
+ notify_paste_buffer(name);
+
return (0);
}
free(pb->data);
pb->data = data;
pb->size = size;
+
+ notify_paste_buffer(pb->name);
}
/* Convert start of buffer into a nice string. */