]> git.lizzy.rs Git - bspwm.git/blob - parse.c
Update the documentation regarding query/restore
[bspwm.git] / parse.c
1 #include <errno.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "helpers.h"
5 #include "parse.h"
6
7 bool parse_bool(char *value, bool *b)
8 {
9         if (streq("true", value) || streq("on", value)) {
10                 *b = true;
11                 return true;
12         } else if (streq("false", value) || streq("off", value)) {
13                 *b = false;
14                 return true;
15         }
16         return false;
17 }
18
19 bool parse_split_type(char *s, split_type_t *t)
20 {
21         if (streq("horizontal", s)) {
22                 *t = TYPE_HORIZONTAL;
23                 return true;
24         } else if (streq("vertical", s)) {
25                 *t = TYPE_VERTICAL;
26                 return true;
27         }
28         return false;
29 }
30
31 bool parse_split_mode(char *s, split_mode_t *m)
32 {
33         if (streq("automatic", s)) {
34                 *m = MODE_AUTOMATIC;
35                 return true;
36         } else if (streq("vertical", s)) {
37                 *m = MODE_MANUAL;
38                 return true;
39         }
40         return false;
41 }
42
43 bool parse_layout(char *s, layout_t *l)
44 {
45         if (streq("monocle", s)) {
46                 *l = LAYOUT_MONOCLE;
47                 return true;
48         } else if (streq("tiled", s)) {
49                 *l = LAYOUT_TILED;
50                 return true;
51         }
52         return false;
53 }
54
55 bool parse_client_state(char *s, client_state_t *t)
56 {
57         if (streq("tiled", s)) {
58                 *t = STATE_TILED;
59                 return true;
60         } else if (streq("pseudo_tiled", s)) {
61                 *t = STATE_PSEUDO_TILED;
62                 return true;
63         } else if (streq("floating", s)) {
64                 *t = STATE_FLOATING;
65                 return true;
66         } else if (streq("fullscreen", s)) {
67                 *t = STATE_FULLSCREEN;
68                 return true;
69         }
70         return false;
71 }
72
73 bool parse_stack_layer(char *s, stack_layer_t *l)
74 {
75         if (streq("below", s)) {
76                 *l = LAYER_BELOW;
77                 return true;
78         } else if (streq("normal", s)) {
79                 *l = LAYER_NORMAL;
80                 return true;
81         } else if (streq("above", s)) {
82                 *l = LAYER_ABOVE;
83                 return true;
84         }
85         return false;
86 }
87
88 bool parse_direction(char *s, direction_t *d)
89 {
90         if (streq("right", s)) {
91                 *d = DIR_RIGHT;
92                 return true;
93         } else if (streq("down", s)) {
94                 *d = DIR_DOWN;
95                 return true;
96         } else if (streq("left", s)) {
97                 *d = DIR_LEFT;
98                 return true;
99         } else if (streq("up", s)) {
100                 *d = DIR_UP;
101                 return true;
102         }
103         return false;
104 }
105
106 bool parse_cycle_direction(char *s, cycle_dir_t *d)
107 {
108         if (streq("next", s)) {
109                 *d = CYCLE_NEXT;
110                 return true;
111         } else if (streq("prev", s)) {
112                 *d = CYCLE_PREV;
113                 return true;
114         }
115         return false;
116 }
117
118 bool parse_circulate_direction(char *s, circulate_dir_t *d)
119 {
120         if (streq("forward", s)) {
121                 *d = CIRCULATE_FORWARD;
122                 return true;
123         } else if (streq("backward", s)) {
124                 *d = CIRCULATE_BACKWARD;
125                 return true;
126         }
127         return false;
128 }
129
130 bool parse_history_direction(char *s, history_dir_t *d)
131 {
132         if (streq("older", s)) {
133                 *d = HISTORY_OLDER;
134                 return true;
135         } else if (streq("newer", s)) {
136                 *d = HISTORY_NEWER;
137                 return true;
138         }
139         return false;
140 }
141
142
143 bool parse_flip(char *s, flip_t *f)
144 {
145         if (streq("horizontal", s)) {
146                 *f = FLIP_HORIZONTAL;
147                 return true;
148         } else if (streq("vertical", s)) {
149                 *f = FLIP_VERTICAL;
150                 return true;
151         }
152         return false;
153 }
154
155 bool parse_pointer_action(char *s, pointer_action_t *a)
156 {
157         if (streq("move", s)) {
158                 *a = ACTION_MOVE;
159                 return true;
160         } else if (streq("resize_corner", s)) {
161                 *a = ACTION_RESIZE_CORNER;
162                 return true;
163         } else if (streq("resize_side", s)) {
164                 *a = ACTION_RESIZE_SIDE;
165                 return true;
166         } else if (streq("focus", s)) {
167                 *a = ACTION_FOCUS;
168                 return true;
169         }
170         return false;
171 }
172
173 bool parse_child_polarity(char *s, child_polarity_t *p)
174 {
175         if (streq("first_child", s)) {
176                 *p = FIRST_CHILD;
177                 return true;
178         } else if (streq("second_child", s)) {
179                 *p = SECOND_CHILD;
180                 return true;
181         }
182         return false;
183 }
184
185 bool parse_degree(char *s, int *d)
186 {
187         int i = atoi(s);
188         while (i < 0)
189                 i += 360;
190         while (i > 359)
191                 i -= 360;
192         if ((i % 90) != 0) {
193                 return false;
194         } else {
195                 *d = i;
196                 return true;
197         }
198 }
199
200 bool parse_window_id(char *s, long int *i)
201 {
202         char *end;
203         errno = 0;
204         long int ret = strtol(s, &end, 0);
205         if (errno != 0 || *end != '\0')
206                 return false;
207         else
208                 *i = ret;
209         return true;
210 }
211
212 bool parse_bool_declaration(char *s, char **key, bool *value, alter_state_t *state)
213 {
214         *key = strtok(s, EQL_TOK);
215         char *v = strtok(NULL, EQL_TOK);
216         if (v == NULL) {
217                 *state = ALTER_TOGGLE;
218                 return true;
219         } else {
220                 if (parse_bool(v, value)) {
221                         *state = ALTER_SET;
222                         return true;
223                 } else {
224                         return false;
225                 }
226         }
227         return false;
228 }
229
230 bool parse_index(char *s, int *i)
231 {
232         int idx;
233         if (sscanf(s, "^%i", &idx) != 1 || idx < 1)
234                 return false;
235         *i = idx;
236         return true;
237 }