diff --git a/src/apps/workspaces/Workspaces.cpp b/src/apps/workspaces/Workspaces.cpp index b2f1b42880..a5ec7527d2 100644 --- a/src/apps/workspaces/Workspaces.cpp +++ b/src/apps/workspaces/Workspaces.cpp @@ -1018,7 +1018,7 @@ WorkspacesApp::AboutRequested() void WorkspacesApp::Usage(const char *programName) { - printf(B_TRANSLATE("Usage: %s [options] [workspace]\n" + printf(B_TRANSLATE("Usage: %s [options] [workspace|movement]\n" "where \"options\" are:\n" " --notitle\t\ttitle bar removed, border and resize kept\n" " --noborder\t\ttitle, border, and resize removed\n" @@ -1029,8 +1029,10 @@ WorkspacesApp::Usage(const char *programName) " --autoraise\t\tauto-raise the workspace window when it's at the " "screen edge\n" " --help\t\tdisplay this help and exit\n" - "and \"workspace\" is the number of the Workspace to which to switch " - "(0-31)\n"), + " -i\t\t\tdisplay workspace layout and exit\n" + "\"workspace\" is the number of the Workspace to which to switch (0-31)\n" + "and \"movement\" is the move to find the Workspace to which to switch " + "(+|-left|right|top|down)\n"), programName); // quit only if we aren't running already @@ -1063,29 +1065,36 @@ WorkspacesApp::ArgvReceived(int32 argc, char **argv) Usage(programName); } - } else if (isdigit(*argv[i])) { - // check for a numeric arg, if not already given - activate_workspace(atoi(argv[i])); + } else { + uint32 columns, rows; + BPrivate::get_workspaces_layout(&columns, &rows); + if (isdigit(*argv[i])) { + // check for a numeric arg, if not already given + activate_workspace(atoi(argv[i])); + } else if (!strcmp(argv[i], "-i")) { + printf("layout (columns,rows): %" B_PRId32 "x%" B_PRId32 "\n", columns, rows); + } else if (!strcmp(argv[i], "-")) { + activate_workspace(current_workspace() - 1); + } else if (!strcmp(argv[i], "+")) { + activate_workspace(current_workspace() + 1); + } else if (!strcmp(argv[i], "up")) { + activate_workspace((current_workspace() - columns) % (columns * rows)); + } else if (!strcmp(argv[i], "down")) { + activate_workspace((current_workspace() + columns) % (columns * rows)); + } else if (!strcmp(argv[i], "left")) { + activate_workspace( + current_workspace() / rows * rows + ((current_workspace() - 1) % rows)); + } else if (!strcmp(argv[i], "right")) { + activate_workspace( + current_workspace() / rows * rows + ((current_workspace() + 1) % rows)); + } else { + // some unknown arguments were specified + fprintf(stderr, B_TRANSLATE("Invalid argument: %s\n"), argv[i]); + } // if the app is running, don't quit // but if it isn't, cancel the complete run, so it doesn't // open any window - if (IsLaunching()) - Quit(); - } else if (!strcmp(argv[i], "-")) { - activate_workspace(current_workspace() - 1); - - if (IsLaunching()) - Quit(); - } else if (!strcmp(argv[i], "+")) { - activate_workspace(current_workspace() + 1); - - if (IsLaunching()) - Quit(); - } else { - // some unknown arguments were specified - fprintf(stderr, B_TRANSLATE("Invalid argument: %s\n"), argv[i]); - if (IsLaunching()) Quit(); }