Add hooks infrastructure, basic commands (set-hook, show-hooks) and a

couple of not very useful client hooks. This will eventually let
commands be run at various points and on notifications. Joint work with
Thomas Adam.
This commit is contained in:
nicm
2015-12-08 01:10:31 +00:00
parent dbfce2a4d8
commit d2fb0efcd1
11 changed files with 364 additions and 13 deletions

31
tmux.h
View File

@@ -691,6 +691,14 @@ struct grid {
struct grid_line *linedata;
};
/* Hook data structures. */
struct hook {
const char *name;
struct cmd_q *cmdq;
struct cmd_list *cmdlist;
RB_ENTRY(hook) entry;
};
/* Option data structures. */
struct options_entry {
char *name;
@@ -1011,6 +1019,7 @@ struct session {
struct winlink_stack lastw;
struct winlinks windows;
struct hooks *hooks;
struct options *options;
#define SESSION_UNATTACHED 0x1 /* not attached to any clients */
@@ -1427,10 +1436,11 @@ struct options_table_entry {
#define CMD_BUFFER_USAGE "[-b buffer-name]"
/* tmux.c */
extern struct options *global_options;
extern struct options *global_s_options;
extern struct options *global_w_options;
extern struct environ *global_environ;
extern struct hooks *global_hooks;
extern struct options *global_options;
extern struct options *global_s_options;
extern struct options *global_w_options;
extern struct environ *global_environ;
extern struct timeval start_time;
extern const char *socket_path;
const char *getshell(void);
@@ -1495,6 +1505,18 @@ void format_defaults_pane(struct format_tree *,
void format_defaults_paste_buffer(struct format_tree *,
struct paste_buffer *);
/* hooks.c */
struct hook;
struct hooks *hooks_create(struct hooks *);
void hooks_free(struct hooks *);
struct hook *hooks_first(struct hooks *);
struct hook *hooks_next(struct hook *);
void hooks_add(struct hooks *, const char *, struct cmd_list *);
void hooks_copy(struct hooks *, struct hooks *);
void hooks_remove(struct hooks *, struct hook *);
struct hook *hooks_find(struct hooks *, const char *);
void hooks_run(struct hooks *, const char *, struct client *);
/* mode-key.c */
extern const struct mode_key_table mode_key_tables[];
extern struct mode_key_tree mode_key_tree_vi_edit;
@@ -1782,6 +1804,7 @@ void server_client_create(int);
int server_client_open(struct client *, char **);
void server_client_unref(struct client *);
void server_client_lost(struct client *);
void server_client_detach(struct client *, enum msgtype);
void server_client_loop(void);
void server_client_push_stdout(struct client *);
void server_client_push_stderr(struct client *);