1 /* 2 * vim:ts=4:sw=4:expandtab 3 * 4 * i3 - an improved dynamic tiling window manager 5 * © 2009 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 #pragma once 12 13 #include <stdint.h> 14 15 typedef struct i3_ipc_header { 16 /* 6 = strlen(I3_IPC_MAGIC) */ 17 char magic[6]; 18 uint32_t size; 19 uint32_t type; 20 } __attribute__((packed)) i3_ipc_header_t; 21 22 /* 23 * Messages from clients to i3 24 * 25 */ 26 27 /** Never change this, only on major IPC breakage (don’t do that) */ 28 #define I3_IPC_MAGIC "i3-ipc" 29 30 /** Deprecated: use I3_IPC_MESSAGE_TYPE_RUN_COMMAND */ 31 #define I3_IPC_MESSAGE_TYPE_COMMAND 0 32 33 /** The payload of the message will be interpreted as a command */ 34 #define I3_IPC_MESSAGE_TYPE_RUN_COMMAND 0 35 36 /** Requests the current workspaces from i3 */ 37 #define I3_IPC_MESSAGE_TYPE_GET_WORKSPACES 1 38 39 /** Subscribe to the specified events */ 40 #define I3_IPC_MESSAGE_TYPE_SUBSCRIBE 2 41 42 /** Requests the current outputs from i3 */ 43 #define I3_IPC_MESSAGE_TYPE_GET_OUTPUTS 3 44 45 /** Requests the tree layout from i3 */ 46 #define I3_IPC_MESSAGE_TYPE_GET_TREE 4 47 48 /** Request the current defined marks from i3 */ 49 #define I3_IPC_MESSAGE_TYPE_GET_MARKS 5 50 51 /** Request the configuration for a specific 'bar' */ 52 #define I3_IPC_MESSAGE_TYPE_GET_BAR_CONFIG 6 53 54 /** Request the i3 version */ 55 #define I3_IPC_MESSAGE_TYPE_GET_VERSION 7 56 57 /** Request a list of configured binding modes. */ 58 #define I3_IPC_MESSAGE_TYPE_GET_BINDING_MODES 8 59 60 /** Request the raw last loaded i3 config. */ 61 #define I3_IPC_MESSAGE_TYPE_GET_CONFIG 9 62 63 /** Send a tick event to all subscribers. */ 64 #define I3_IPC_MESSAGE_TYPE_SEND_TICK 10 65 66 /** Trigger an i3 sync protocol message via IPC. */ 67 #define I3_IPC_MESSAGE_TYPE_SYNC 11 68 69 /** Request the current binding state. */ 70 #define I3_IPC_MESSAGE_TYPE_GET_BINDING_STATE 12 71 72 /* 73 * Messages from i3 to clients 74 * 75 */ 76 #define I3_IPC_REPLY_TYPE_COMMAND 0 77 #define I3_IPC_REPLY_TYPE_WORKSPACES 1 78 #define I3_IPC_REPLY_TYPE_SUBSCRIBE 2 79 #define I3_IPC_REPLY_TYPE_OUTPUTS 3 80 #define I3_IPC_REPLY_TYPE_TREE 4 81 #define I3_IPC_REPLY_TYPE_MARKS 5 82 #define I3_IPC_REPLY_TYPE_BAR_CONFIG 6 83 #define I3_IPC_REPLY_TYPE_VERSION 7 84 #define I3_IPC_REPLY_TYPE_BINDING_MODES 8 85 #define I3_IPC_REPLY_TYPE_CONFIG 9 86 #define I3_IPC_REPLY_TYPE_TICK 10 87 #define I3_IPC_REPLY_TYPE_SYNC 11 88 #define I3_IPC_REPLY_TYPE_GET_BINDING_STATE 12 89 90 /* 91 * Events from i3 to clients. Events have the first bit set high. 92 * 93 */ 94 #define I3_IPC_EVENT_MASK (1UL << 31) 95 96 /* The workspace event will be triggered upon changes in the workspace list */ 97 #define I3_IPC_EVENT_WORKSPACE (I3_IPC_EVENT_MASK | 0) 98 99 /* The output event will be triggered upon changes in the output list */ 100 #define I3_IPC_EVENT_OUTPUT (I3_IPC_EVENT_MASK | 1) 101 102 /* The output event will be triggered upon mode changes */ 103 #define I3_IPC_EVENT_MODE (I3_IPC_EVENT_MASK | 2) 104 105 /* The window event will be triggered upon window changes */ 106 #define I3_IPC_EVENT_WINDOW (I3_IPC_EVENT_MASK | 3) 107 108 /** Bar config update will be triggered to update the bar config */ 109 #define I3_IPC_EVENT_BARCONFIG_UPDATE (I3_IPC_EVENT_MASK | 4) 110 111 /** The binding event will be triggered when bindings run */ 112 #define I3_IPC_EVENT_BINDING (I3_IPC_EVENT_MASK | 5) 113 114 /** The shutdown event will be triggered when the ipc shuts down */ 115 #define I3_IPC_EVENT_SHUTDOWN (I3_IPC_EVENT_MASK | 6) 116 117 /** The tick event will be sent upon a tick IPC message */ 118 #define I3_IPC_EVENT_TICK (I3_IPC_EVENT_MASK | 7) 119