diff --git a/session.c b/session.c index ab821a81e..0fff9ef2b 100644 --- a/session.c +++ b/session.c @@ -215,6 +215,10 @@ session_destroy(struct session *s) log_debug("session %s destroyed", s->name); +#ifdef TMATE + tmate_write_fin(); +#endif + RB_REMOVE(sessions, &sessions, s); notify_session_closed(s); diff --git a/tmate-encoder.c b/tmate-encoder.c index 8d47f2ef1..ff6924dae 100644 --- a/tmate-encoder.c +++ b/tmate-encoder.c @@ -224,3 +224,9 @@ void tmate_write_copy_mode(struct window_pane *wp, const char *str) pack(int, wp->id); pack(string, str); } + +void tmate_write_fin(void) +{ + pack(array, 1); + pack(int, TMATE_OUT_FIN); +} diff --git a/tmate-protocol.h b/tmate-protocol.h index 8611d9a71..45beaec6b 100644 --- a/tmate-protocol.h +++ b/tmate-protocol.h @@ -48,6 +48,7 @@ enum tmate_daemon_out_msg_types { TMATE_OUT_STATUS, TMATE_OUT_SYNC_COPY_MODE, TMATE_OUT_WRITE_COPY_MODE, + TMATE_OUT_FIN, }; /* @@ -64,6 +65,7 @@ enum tmate_daemon_out_msg_types { [int: type, string: input_prompt, string: input_str]]) // Any of the array can be [] [TMATE_OUT_WRITE_COPY_MODE, int: pane_id, string: str] +[TMATE_OUT_FIN] */ enum tmate_daemon_in_msg_types { diff --git a/tmate.h b/tmate.h index 0474e0818..2018bbc34 100644 --- a/tmate.h +++ b/tmate.h @@ -84,6 +84,7 @@ extern void tmate_failed_cmd(int client_id, const char *cause); extern void tmate_status(const char *left, const char *right); extern void tmate_sync_copy_mode(struct window_pane *wp); extern void tmate_write_copy_mode(struct window_pane *wp, const char *str); +extern void tmate_write_fin(void); /* tmate-decoder.c */