aboutsummaryrefslogtreecommitdiffstats
path: root/sway
diff options
context:
space:
mode:
authorLibravatar S. Christoffer Eliesen <christoffer@eliesen.no>2015-10-24 16:55:21 +0200
committerLibravatar S. Christoffer Eliesen <christoffer@eliesen.no>2015-10-25 13:19:48 +0100
commitc49e5340db64d9e8018696ecca55cacd14ee638a (patch)
tree0e6c0cd57399ca8ea94235dd749e1e58f3c6983a /sway
parentlog: Add swayc_log, use at a few key places. (diff)
downloadsway-c49e5340db64d9e8018696ecca55cacd14ee638a.tar.gz
sway-c49e5340db64d9e8018696ecca55cacd14ee638a.tar.zst
sway-c49e5340db64d9e8018696ecca55cacd14ee638a.zip
commands: cmd_move: Fix "move container to workspace _number_ n"
This is an undocumented feature (the word "number" is just ignored anyway), but it exists to be compatible with i3 config syntax. Plus some code cleanup at the same time.
Diffstat (limited to 'sway')
-rw-r--r--sway/commands.c45
1 files changed, 24 insertions, 21 deletions
diff --git a/sway/commands.c b/sway/commands.c
index 8c45dabe..0102fc5a 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -494,6 +494,8 @@ static struct cmd_results *cmd_move(int argc, char **argv) {
494 if ((error = checkarg(argc, "move", EXPECTED_AT_LEAST, 1))) { 494 if ((error = checkarg(argc, "move", EXPECTED_AT_LEAST, 1))) {
495 return error; 495 return error;
496 } 496 }
497 const char* expected_syntax = "Expected 'move <left|right|up|down>' or "
498 "'move <container|window> to workspace <name>'";
497 swayc_t *view = get_focused_container(&root_container); 499 swayc_t *view = get_focused_container(&root_container);
498 500
499 if (strcasecmp(argv[0], "left") == 0) { 501 if (strcasecmp(argv[0], "left") == 0) {
@@ -505,31 +507,33 @@ static struct cmd_results *cmd_move(int argc, char **argv) {
505 } else if (strcasecmp(argv[0], "down") == 0) { 507 } else if (strcasecmp(argv[0], "down") == 0) {
506 move_container(view, MOVE_DOWN); 508 move_container(view, MOVE_DOWN);
507 } else if (strcasecmp(argv[0], "container") == 0 || strcasecmp(argv[0], "window") == 0) { 509 } else if (strcasecmp(argv[0], "container") == 0 || strcasecmp(argv[0], "window") == 0) {
508 // "move container to workspace x" 510 // "move container ...
509 if ((error = checkarg(argc, "move container/window", EXPECTED_EQUAL_TO, 4))) { 511 if ((error = checkarg(argc, "move container/window", EXPECTED_AT_LEAST, 4))) {
510 return error; 512 return error;
511 } else if ( strcasecmp(argv[1], "to") != 0 || strcasecmp(argv[2], "workspace") != 0) { 513 } else if ( strcasecmp(argv[1], "to") == 0 && strcasecmp(argv[2], "workspace") == 0) {
512 return cmd_results_new(CMD_INVALID, "move", "Expected 'move %s to workspace <name>'", argv[0]); 514 // move container to workspace x
513 } 515 if (view->type != C_CONTAINER && view->type != C_VIEW) {
514 516 return cmd_results_new(CMD_FAILURE, "move", "Can only move containers and views.");
515 if (view->type != C_CONTAINER && view->type != C_VIEW) { 517 }
516 return cmd_results_new(CMD_FAILURE, "move", "Can only move containers and views.");
517 }
518 518
519 const char *ws_name = argv[3]; 519 const char *ws_name = argv[3];
520 if (argc == 5) { 520 if (argc == 5) {
521 // move "container to workspace number x" 521 // move "container to workspace number x"
522 ws_name = argv[4]; 522 ws_name = argv[4];
523 } 523 }
524 524
525 swayc_t *ws = workspace_by_name(ws_name); 525 swayc_t *ws = workspace_by_name(ws_name);
526 if (ws == NULL) { 526 if (ws == NULL) {
527 ws = workspace_create(ws_name); 527 ws = workspace_create(ws_name);
528 }
529 move_container_to(view, get_focused_container(ws));
530 } else {
531 return cmd_results_new(CMD_INVALID, "move", expected_syntax);
528 } 532 }
529 move_container_to(view, get_focused_container(ws));
530 } else if (strcasecmp(argv[0], "scratchpad") == 0) { 533 } else if (strcasecmp(argv[0], "scratchpad") == 0) {
534 // move scratchpad ...
531 if (view->type != C_CONTAINER && view->type != C_VIEW) { 535 if (view->type != C_CONTAINER && view->type != C_VIEW) {
532 return cmd_results_new(CMD_FAILURE, "move", "Can only move containers and views."); 536 return cmd_results_new(CMD_FAILURE, "move scratchpad", "Can only move containers and views.");
533 } 537 }
534 swayc_t *view = get_focused_container(&root_container); 538 swayc_t *view = get_focused_container(&root_container);
535 int i; 539 int i;
@@ -554,8 +558,7 @@ static struct cmd_results *cmd_move(int argc, char **argv) {
554 } 558 }
555 set_focused_container(focused); 559 set_focused_container(focused);
556 } else { 560 } else {
557 return cmd_results_new(CMD_INVALID, "move", 561 return cmd_results_new(CMD_INVALID, "move", expected_syntax);
558 "Expected 'move <left|right|up|down>' or 'move <container|window> to workspace <name>'");
559 } 562 }
560 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 563 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
561} 564}