Introduce HANDLE_EMPTY_MATCH macro to simplify command handlers in cmdparse.y
This commit is contained in:
parent
d3e458bc78
commit
ca2e4199b5
|
@ -17,6 +17,20 @@
|
|||
|
||||
#include "all.h"
|
||||
|
||||
/** When the command did not include match criteria (!), we use the currently
|
||||
* focused command. Do not confuse this case with a command which included
|
||||
* criteria but which did not match any windows. This macro has to be called in
|
||||
* every command.
|
||||
*/
|
||||
#define HANDLE_EMPTY_MATCH do { \
|
||||
if (match_is_empty(¤t_match)) { \
|
||||
owindow *ow = smalloc(sizeof(owindow)); \
|
||||
ow->con = focused; \
|
||||
TAILQ_INIT(&owindows); \
|
||||
TAILQ_INSERT_TAIL(&owindows, ow, owindows); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
typedef struct yy_buffer_state *YY_BUFFER_STATE;
|
||||
extern int cmdyylex(struct context *context);
|
||||
extern int cmdyyparse(void);
|
||||
|
@ -451,17 +465,14 @@ fullscreen:
|
|||
printf("toggling fullscreen\n");
|
||||
owindow *current;
|
||||
|
||||
/* check if the match is empty, not if the result is empty */
|
||||
if (match_is_empty(¤t_match))
|
||||
con_toggle_fullscreen(focused);
|
||||
else {
|
||||
|
||||
HANDLE_EMPTY_MATCH;
|
||||
|
||||
TAILQ_FOREACH(current, &owindows, owindows) {
|
||||
printf("matching: %p / %s\n", current->con, current->con->name);
|
||||
con_toggle_fullscreen(current->con);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
;
|
||||
|
||||
next:
|
||||
|
@ -527,16 +538,13 @@ border:
|
|||
printf("border style should be changed to %d\n", $3);
|
||||
owindow *current;
|
||||
|
||||
/* check if the match is empty, not if the result is empty */
|
||||
if (match_is_empty(¤t_match))
|
||||
focused->border_style = $3;
|
||||
else {
|
||||
HANDLE_EMPTY_MATCH;
|
||||
|
||||
TAILQ_FOREACH(current, &owindows, owindows) {
|
||||
printf("matching: %p / %s\n", current->con, current->con->name);
|
||||
current->con->border_style = $3;
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
border_style:
|
||||
|
@ -576,16 +584,13 @@ move:
|
|||
Con *ws = workspace_get($5, NULL);
|
||||
free($5);
|
||||
|
||||
/* check if the match is empty, not if the result is empty */
|
||||
if (match_is_empty(¤t_match))
|
||||
con_move_to_workspace(focused, ws);
|
||||
else {
|
||||
HANDLE_EMPTY_MATCH;
|
||||
|
||||
TAILQ_FOREACH(current, &owindows, owindows) {
|
||||
printf("matching: %p / %s\n", current->con, current->con->name);
|
||||
con_move_to_workspace(current->con, ws);
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
restore:
|
||||
|
@ -603,17 +608,13 @@ layout:
|
|||
printf("changing layout to %d\n", $3);
|
||||
owindow *current;
|
||||
|
||||
/* check if the match is empty, not if the result is empty */
|
||||
if (match_is_empty(¤t_match))
|
||||
con_set_layout(focused->parent, $3);
|
||||
else {
|
||||
HANDLE_EMPTY_MATCH;
|
||||
|
||||
TAILQ_FOREACH(current, &owindows, owindows) {
|
||||
printf("matching: %p / %s\n", current->con, current->con->name);
|
||||
con_set_layout(current->con, $3);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
;
|
||||
|
||||
layout_mode:
|
||||
|
@ -628,15 +629,12 @@ mark:
|
|||
printf("marking window with str %s\n", $3);
|
||||
owindow *current;
|
||||
|
||||
/* check if the match is empty, not if the result is empty */
|
||||
if (match_is_empty(¤t_match))
|
||||
focused->mark = sstrdup($3);
|
||||
else {
|
||||
HANDLE_EMPTY_MATCH;
|
||||
|
||||
TAILQ_FOREACH(current, &owindows, owindows) {
|
||||
printf("matching: %p / %s\n", current->con, current->con->name);
|
||||
current->con->mark = sstrdup($3);
|
||||
}
|
||||
}
|
||||
|
||||
free($<string>3);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue