Add hook_session and hook_window formats to get information on the

affected session or window when a hook fires. Enable session-created and
session-closed hooks now that that is available.
This commit is contained in:
nicm 2016-10-16 19:55:52 +00:00
parent 3f35b5299f
commit d15d54c2c8
2 changed files with 28 additions and 8 deletions

View File

@ -41,8 +41,8 @@ static const char *notify_hooks[] = {
"window-renamed", "window-renamed",
NULL, /* "attached-session-changed", */ NULL, /* "attached-session-changed", */
"session-renamed", "session-renamed",
NULL, /* "session-created", */ "session-created",
NULL, /* "session-closed" */ "session-closed"
}; };
struct notify_entry { struct notify_entry {
@ -60,18 +60,20 @@ notify_hook(struct cmdq_item *item, struct notify_entry *ne)
struct cmd_find_state fs; struct cmd_find_state fs;
struct hook *hook; struct hook *hook;
struct cmdq_item *new_item; struct cmdq_item *new_item;
struct session *s = ne->session;
struct window *w = ne->window;
name = notify_hooks[ne->type]; name = notify_hooks[ne->type];
if (name == NULL) if (name == NULL)
return; return;
cmd_find_clear_state(&fs, NULL, 0); cmd_find_clear_state(&fs, NULL, 0);
if (ne->session != NULL && ne->window != NULL) if (s != NULL && w != NULL)
cmd_find_from_session_window(&fs, ne->session, ne->window); cmd_find_from_session_window(&fs, s, w);
else if (ne->window != NULL) else if (w != NULL)
cmd_find_from_window(&fs, ne->window); cmd_find_from_window(&fs, w);
else if (ne->session != NULL) else if (s != NULL && session_alive(s))
cmd_find_from_session(&fs, ne->session); cmd_find_from_session(&fs, s);
else else
cmd_find_current(&fs, item, CMD_FIND_QUIET); cmd_find_current(&fs, item, CMD_FIND_QUIET);
if (cmd_find_empty_state(&fs) || !cmd_find_valid_state(&fs)) if (cmd_find_empty_state(&fs) || !cmd_find_valid_state(&fs))
@ -84,6 +86,16 @@ notify_hook(struct cmdq_item *item, struct notify_entry *ne)
new_item = cmdq_get_command(hook->cmdlist, &fs, NULL, CMDQ_NOHOOKS); new_item = cmdq_get_command(hook->cmdlist, &fs, NULL, CMDQ_NOHOOKS);
cmdq_format(new_item, "hook", "%s", name); cmdq_format(new_item, "hook", "%s", name);
if (s != NULL) {
cmdq_format(new_item, "hook_session", "$%u", s->id);
cmdq_format(new_item, "hook_session_name", "%s", s->name);
}
if (w != NULL) {
cmdq_format(new_item, "hook_window", "@%u", w->id);
cmdq_format(new_item, "hook_window_name", "%s", w->name);
}
cmdq_insert_after(item, new_item); cmdq_insert_after(item, new_item);
} }

8
tmux.1
View File

@ -3244,6 +3244,10 @@ Run when the program running in a pane exits, but
is on so the pane has not closed. is on so the pane has not closed.
.It pane-exited .It pane-exited
Run when the program running in a pane exits. Run when the program running in a pane exits.
.It session-created
Run when a new session created.
.It session-closed
Run when a session closed.
.It session-renamed .It session-renamed
Run when a session is renamed. Run when a session is renamed.
.It window-renamed .It window-renamed
@ -3467,6 +3471,10 @@ The following variables are available, where appropriate:
.It Li "history_limit" Ta "" Ta "Maximum window history lines" .It Li "history_limit" Ta "" Ta "Maximum window history lines"
.It Li "history_size" Ta "" Ta "Size of history in bytes" .It Li "history_size" Ta "" Ta "Size of history in bytes"
.It Li "hook" Ta "" Ta "Name of running hook, if any" .It Li "hook" Ta "" Ta "Name of running hook, if any"
.It Li "hook_session" Ta "" Ta "ID of session where hook was run, if any"
.It Li "hook_session_name" Ta "" Ta "Name of session where hook was run, if any"
.It Li "hook_window" Ta "" Ta "ID of window where hook was run, if any"
.It Li "hook_window_name" Ta "" Ta "Name of window where hook was run, if any"
.It Li "host" Ta "#H" Ta "Hostname of local host" .It Li "host" Ta "#H" Ta "Hostname of local host"
.It Li "host_short" Ta "#h" Ta "Hostname of local host (no domain name)" .It Li "host_short" Ta "#h" Ta "Hostname of local host (no domain name)"
.It Li "insert_flag" Ta "" Ta "Pane insert flag" .It Li "insert_flag" Ta "" Ta "Pane insert flag"