summaryrefslogtreecommitdiff
path: root/sway/commands.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/commands.c')
-rw-r--r--sway/commands.c40
1 files changed, 29 insertions, 11 deletions
diff --git a/sway/commands.c b/sway/commands.c
index efa72f19..322c9519 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -146,21 +146,38 @@ int cmd_set(struct sway_config *config, int argc, char **argv) {
return 0;
}
-int cmd_log_colors(struct sway_config *config, int argc, char **argv) {
- if (argc != 1) {
- sway_log(L_ERROR, "Invalid log_colors command (expected 1 argument, got %d)", argc);
- return 1;
- }
-
- if (strcasecmp(argv[0], "no") != 0 && strcasecmp(argv[0], "yes") != 0) {
- sway_log(L_ERROR, "Invalid log_colors command (expected `yes` or `no`, got '%s')", argv[0]);
+int _do_split(struct sway_config *config, int argc, char **argv, int layout) {
+ if (argc != 0) {
+ sway_log(L_ERROR, "Invalid splitv command (expected 0 arguments, got %d)", argc);
return 1;
}
-
- sway_log_colors(!strcasecmp(argv[0], "yes"));
+ swayc_t *focused = get_focused_container(&root_container);
+ swayc_t *parent = focused->parent;
+ sway_log(L_DEBUG, "Splitting %p vertically with %p", parent, focused);
+ int index = remove_container_from_parent(parent, focused);
+ swayc_t *new_container = create_container(parent, -1);
+ new_container->layout = layout;
+ new_container->weight = focused->weight;
+ new_container->width = focused->width;
+ new_container->height = focused->height;
+ new_container->x = focused->x;
+ new_container->y = focused->y;
+ focused->weight = 1;
+ focused->parent = new_container;
+ list_insert(parent->children, index, new_container);
+ list_add(new_container->children, focused);
+ focus_view(focused);
+ arrange_windows(parent, -1, -1);
return 0;
}
+int cmd_splitv(struct sway_config *config, int argc, char **argv) {
+ return _do_split(config, argc, argv, L_VERT);
+}
+
+int cmd_splith(struct sway_config *config, int argc, char **argv) {
+ return _do_split(config, argc, argv, L_HORIZ);
+}
/* Keep alphabetized */
struct cmd_handler handlers[] = {
@@ -169,8 +186,9 @@ struct cmd_handler handlers[] = {
{ "exit", cmd_exit },
{ "focus_follows_mouse", cmd_focus_follows_mouse },
{ "layout", cmd_layout },
- { "log_colors", cmd_log_colors },
{ "set", cmd_set },
+ { "splith", cmd_splith },
+ { "splitv", cmd_splitv }
};
char **split_directive(char *line, int *argc) {