xref: /openbsd/usr.bin/tmux/tmux-protocol.h (revision 83e2ab13)
1 /* $OpenBSD: tmux-protocol.h,v 1.2 2023/01/06 07:09:27 nicm Exp $ */
2 
3 /*
4  * Copyright (c) 2021 Nicholas Marriott <nicholas.marriott@gmail.com>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
15  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
16  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef TMUX_PROTOCOL_H
20 #define TMUX_PROTOCOL_H
21 
22 /* Protocol version. */
23 #define PROTOCOL_VERSION 8
24 
25 /* Message types. */
26 enum msgtype {
27 	MSG_VERSION = 12,
28 
29 	MSG_IDENTIFY_FLAGS = 100,
30 	MSG_IDENTIFY_TERM,
31 	MSG_IDENTIFY_TTYNAME,
32 	MSG_IDENTIFY_OLDCWD, /* unused */
33 	MSG_IDENTIFY_STDIN,
34 	MSG_IDENTIFY_ENVIRON,
35 	MSG_IDENTIFY_DONE,
36 	MSG_IDENTIFY_CLIENTPID,
37 	MSG_IDENTIFY_CWD,
38 	MSG_IDENTIFY_FEATURES,
39 	MSG_IDENTIFY_STDOUT,
40 	MSG_IDENTIFY_LONGFLAGS,
41 	MSG_IDENTIFY_TERMINFO,
42 
43 	MSG_COMMAND = 200,
44 	MSG_DETACH,
45 	MSG_DETACHKILL,
46 	MSG_EXIT,
47 	MSG_EXITED,
48 	MSG_EXITING,
49 	MSG_LOCK,
50 	MSG_READY,
51 	MSG_RESIZE,
52 	MSG_SHELL,
53 	MSG_SHUTDOWN,
54 	MSG_OLDSTDERR, /* unused */
55 	MSG_OLDSTDIN, /* unused */
56 	MSG_OLDSTDOUT, /* unused */
57 	MSG_SUSPEND,
58 	MSG_UNLOCK,
59 	MSG_WAKEUP,
60 	MSG_EXEC,
61 	MSG_FLAGS,
62 
63 	MSG_READ_OPEN = 300,
64 	MSG_READ,
65 	MSG_READ_DONE,
66 	MSG_WRITE_OPEN,
67 	MSG_WRITE,
68 	MSG_WRITE_READY,
69 	MSG_WRITE_CLOSE,
70 	MSG_READ_CANCEL
71 };
72 
73 /*
74  * Message data.
75  *
76  * Don't forget to bump PROTOCOL_VERSION if any of these change!
77  */
78 struct msg_command {
79 	int	argc;
80 }; /* followed by packed argv */
81 
82 struct msg_read_open {
83 	int	stream;
84 	int	fd;
85 }; /* followed by path */
86 
87 struct msg_read_data {
88 	int	stream;
89 };
90 
91 struct msg_read_done {
92 	int	stream;
93 	int	error;
94 };
95 
96 struct msg_read_cancel {
97 	int	stream;
98 };
99 
100 struct msg_write_open {
101 	int	stream;
102 	int	fd;
103 	int	flags;
104 }; /* followed by path */
105 
106 struct msg_write_data {
107 	int	stream;
108 }; /* followed by data */
109 
110 struct msg_write_ready {
111 	int	stream;
112 	int	error;
113 };
114 
115 struct msg_write_close {
116 	int	stream;
117 };
118 
119 #endif /* TMUX_PROTOCOL_H */
120