]> git.sur5r.net Git - i3/i3/blob - include/i3/ipc.h
ipc_send_message: use stack frame with fixed size
[i3/i3] / include / i3 / ipc.h
1 /*
2  * vim:ts=4:sw=4:expandtab
3  *
4  * i3 - an improved dynamic tiling window manager
5  * © 2009-2013 Michael Stapelberg and contributors (see also: LICENSE)
6  *
7  * This public header defines the different constants and message types to use
8  * for the IPC interface to i3 (see docs/ipc for more information).
9  *
10  */
11 #ifndef I3_I3_IPC_H
12 #define I3_I3_IPC_H
13
14 typedef struct i3_ipc_header {
15     /* 6 = strlen(I3_IPC_MAGIC) */
16     char magic[6];
17     uint32_t size;
18     uint32_t type;
19 } __attribute__ ((packed)) i3_ipc_header_t;
20
21 /*
22  * Messages from clients to i3
23  *
24  */
25
26 /** Never change this, only on major IPC breakage (don’t do that) */
27 #define I3_IPC_MAGIC                    "i3-ipc"
28
29 /** The payload of the message will be interpreted as a command */
30 #define I3_IPC_MESSAGE_TYPE_COMMAND             0
31
32 /** Requests the current workspaces from i3 */
33 #define I3_IPC_MESSAGE_TYPE_GET_WORKSPACES      1
34
35 /** Subscribe to the specified events */
36 #define I3_IPC_MESSAGE_TYPE_SUBSCRIBE           2
37
38 /** Requests the current outputs from i3 */
39 #define I3_IPC_MESSAGE_TYPE_GET_OUTPUTS         3
40
41 /** Requests the tree layout from i3 */
42 #define I3_IPC_MESSAGE_TYPE_GET_TREE            4
43
44 /** Request the current defined marks from i3 */
45 #define I3_IPC_MESSAGE_TYPE_GET_MARKS           5
46
47 /** Request the configuration for a specific 'bar' */
48 #define I3_IPC_MESSAGE_TYPE_GET_BAR_CONFIG      6
49
50 /** Request the i3 version */
51 #define I3_IPC_MESSAGE_TYPE_GET_VERSION         7
52
53 /*
54  * Messages from i3 to clients
55  *
56  */
57
58 /** Command reply type */
59 #define I3_IPC_REPLY_TYPE_COMMAND               0
60
61 /** Workspaces reply type */
62 #define I3_IPC_REPLY_TYPE_WORKSPACES            1
63
64 /** Subscription reply type */
65 #define I3_IPC_REPLY_TYPE_SUBSCRIBE             2
66
67 /** Outputs reply type */
68 #define I3_IPC_REPLY_TYPE_OUTPUTS               3
69
70 /** Tree reply type */
71 #define I3_IPC_REPLY_TYPE_TREE                  4
72
73 /** Marks reply type */
74 #define I3_IPC_REPLY_TYPE_MARKS                 5
75
76 /** Bar config reply type */
77 #define I3_IPC_REPLY_TYPE_BAR_CONFIG            6
78
79 /** i3 version reply type */
80 #define I3_IPC_REPLY_TYPE_VERSION               7
81
82 /*
83  * Events from i3 to clients. Events have the first bit set high.
84  *
85  */
86 #define I3_IPC_EVENT_MASK                       (1 << 31)
87
88 /* The workspace event will be triggered upon changes in the workspace list */
89 #define I3_IPC_EVENT_WORKSPACE                  (I3_IPC_EVENT_MASK | 0)
90
91 /* The output event will be triggered upon changes in the output list */
92 #define I3_IPC_EVENT_OUTPUT                     (I3_IPC_EVENT_MASK | 1)
93
94 /* The output event will be triggered upon mode changes */
95 #define I3_IPC_EVENT_MODE                       (I3_IPC_EVENT_MASK | 2)
96
97 #endif