]> code.delx.au - spectrwm/commitdiff
Increase workspace hard limit to 22.
authorReginald Kennedy <rk@rejii.com>
Sat, 7 Apr 2012 17:59:41 +0000 (01:59 +0800)
committerReginald Kennedy <rk@rejii.com>
Sat, 7 Apr 2012 22:56:13 +0000 (06:56 +0800)
Add new keybindings for workspaces 11 through 22.
Defaults for ws_n and mvws_n are NOD+(F1-F12) and MOD+Shift+(F1-F12),
respectively.

Add a new configuration option 'workspace_limit' to make it possible for
the user to adjust the number of available workspaces.  Default is 10.

ok marco

spectrwm.1
spectrwm.c
spectrwm.conf
spectrwm_us.conf

index 67aa5513789dd40dece7c16497efc4fe9f666b29..f2df9c9855614a7b09c36e95203fe1be78ff188c 100644 (file)
@@ -241,6 +241,8 @@ Enable by setting to 1.
 .It Ic window_name_enabled
 Enable or disable displaying the window name in the status bar.
 Enable by setting to 1.
 .It Ic window_name_enabled
 Enable or disable displaying the window name in the status bar.
 Enable by setting to 1.
+.It Ic workspace_limit
+Set the total number of workspaces available.  Minimum is 1, maximum is 20.
 .El
 .Pp
 Colors need to be specified per the
 .El
 .Pp
 Colors need to be specified per the
@@ -343,7 +345,7 @@ Resize window while maintaining it centered
 .Pp
 The default key bindings are described below:
 .Pp
 .Pp
 The default key bindings are described below:
 .Pp
-.Bl -tag -width "M-j, M-<TAB>XXX" -offset indent -compact
+.Bl -tag -width "M-j, M-<TAB>XXXXXX" -offset indent -compact
 .It Cm M-S- Ns Aq Cm Return
 term
 .It Cm M-p
 .It Cm M-S- Ns Aq Cm Return
 term
 .It Cm M-p
@@ -394,10 +396,10 @@ bar_toggle
 wind_del
 .It Cm M-S-x
 wind_kill
 wind_del
 .It Cm M-S-x
 wind_kill
-.It Cm M- Ns Aq Ar n
-.Pf ws_ Ar n
-.It Cm M-S- Ns Aq Ar n
-.Pf mvws_ Ar n
+.It Cm M- Ns Aq Ar 1-9,0,F1-F12
+.Pf ws_ Aq Ar 1-22
+.It Cm M-S- Ns Aq Ar 1-9,0,F1-F12
+.Pf mvws_ Ns Aq Ar 1-22
 .It Cm M- Ns Aq Cm Right
 ws_next
 .It Cm M- Ns Aq Cm Left
 .It Cm M- Ns Aq Cm Right
 ws_next
 .It Cm M- Ns Aq Cm Left
@@ -516,13 +518,13 @@ Switch to workspace
 .Ar n ,
 where
 .Ar n
 .Ar n ,
 where
 .Ar n
-is 1 through 10.
+is 1 through workspace_limit.
 .It Cm mvws_ Ns Ar n
 Move current window to workspace
 .Ar n ,
 where
 .Ar n
 .It Cm mvws_ Ns Ar n
 Move current window to workspace
 .Ar n ,
 where
 .Ar n
-is 1 through 10.
+is 1 through workspace_limit.
 .It Cm ws_next
 Switch to next workspace with a window in it.
 .It Cm ws_prev
 .It Cm ws_next
 Switch to next workspace with a window in it.
 .It Cm ws_prev
index b527e918a8fbc316a16f7befb5d630811b9eebf7..9a61347ac0b692782f5aee43676092b8d525dd65 100644 (file)
@@ -446,7 +446,9 @@ enum        { SWM_S_COLOR_BAR, SWM_S_COLOR_BAR_BORDER, SWM_S_COLOR_BAR_FONT,
          SWM_S_COLOR_FOCUS, SWM_S_COLOR_UNFOCUS, SWM_S_COLOR_MAX };
 
 /* physical screen mapping */
          SWM_S_COLOR_FOCUS, SWM_S_COLOR_UNFOCUS, SWM_S_COLOR_MAX };
 
 /* physical screen mapping */
-#define SWM_WS_MAX             (10)
+#define SWM_WS_MAX             (22)    /* hard limit */
+int            workspace_limit = 10;   /* soft limit */
+
 struct swm_screen {
        int                     idx;    /* screen index */
        struct swm_region_list  rl;     /* list of regions on this screen */
 struct swm_screen {
        int                     idx;    /* screen index */
        struct swm_region_list  rl;     /* list of regions on this screen */
@@ -1402,11 +1404,11 @@ bar_urgent(char *s, ssize_t sz)
        if (urgent_enabled == 0)
                return;
 
        if (urgent_enabled == 0)
                return;
 
-       for (i = 0; i < SWM_WS_MAX; i++)
+       for (i = 0; i < workspace_limit; i++)
                urgent[i] = 0;
 
        for (i = 0; i < ScreenCount(display); i++)
                urgent[i] = 0;
 
        for (i = 0; i < ScreenCount(display); i++)
-               for (j = 0; j < SWM_WS_MAX; j++)
+               for (j = 0; j < workspace_limit; j++)
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry) {
                                wmh = XGetWMHints(display, win->id);
                                if (wmh == NULL)
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry) {
                                wmh = XGetWMHints(display, win->id);
                                if (wmh == NULL)
@@ -1418,7 +1420,7 @@ bar_urgent(char *s, ssize_t sz)
                        }
 
        strlcat(s, "* ", sz);
                        }
 
        strlcat(s, "* ", sz);
-       for (i = 0; i < SWM_WS_MAX; i++) {
+       for (i = 0; i < workspace_limit; i++) {
                if (urgent[i])
                        snprintf(b, sizeof b, "%d ", i + 1);
                else
                if (urgent[i])
                        snprintf(b, sizeof b, "%d ", i + 1);
                else
@@ -1847,7 +1849,7 @@ unmap_all(void)
        int                     i, j;
 
        for (i = 0; i < ScreenCount(display); i++)
        int                     i, j;
 
        for (i = 0; i < ScreenCount(display); i++)
-               for (j = 0; j < SWM_WS_MAX; j++)
+               for (j = 0; j < workspace_limit; j++)
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
                                unmap_window(win);
 }
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
                                unmap_window(win);
 }
@@ -1936,7 +1938,7 @@ find_unmanaged_window(Window id)
        int                     i, j;
 
        for (i = 0; i < ScreenCount(display); i++)
        int                     i, j;
 
        for (i = 0; i < ScreenCount(display); i++)
-               for (j = 0; j < SWM_WS_MAX; j++)
+               for (j = 0; j < workspace_limit; j++)
                        TAILQ_FOREACH(win, &screens[i].ws[j].unmanagedlist,
                            entry)
                                if (id == win->id)
                        TAILQ_FOREACH(win, &screens[i].ws[j].unmanagedlist,
                            entry)
                                if (id == win->id)
@@ -1953,7 +1955,7 @@ find_window(Window id)
        unsigned int            nc;
 
        for (i = 0; i < ScreenCount(display); i++)
        unsigned int            nc;
 
        for (i = 0; i < ScreenCount(display); i++)
-               for (j = 0; j < SWM_WS_MAX; j++)
+               for (j = 0; j < workspace_limit; j++)
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
                                if (id == win->id)
                                        return (win);
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
                                if (id == win->id)
                                        return (win);
@@ -1970,7 +1972,7 @@ find_window(Window id)
 
        /* look for parent */
        for (i = 0; i < ScreenCount(display); i++)
 
        /* look for parent */
        for (i = 0; i < ScreenCount(display); i++)
-               for (j = 0; j < SWM_WS_MAX; j++)
+               for (j = 0; j < workspace_limit; j++)
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
                                if (wpr == win->id)
                                        return (win);
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
                                if (wpr == win->id)
                                        return (win);
@@ -2058,7 +2060,7 @@ kill_refs(struct ws_win *win)
 
        for (i = 0; i < ScreenCount(display); i++)
                TAILQ_FOREACH(r, &screens[i].rl, entry)
 
        for (i = 0; i < ScreenCount(display); i++)
                TAILQ_FOREACH(r, &screens[i].rl, entry)
-                       for (x = 0; x < SWM_WS_MAX; x++) {
+                       for (x = 0; x < workspace_limit; x++) {
                                ws = &r->s->ws[x];
                                if (win == ws->focus)
                                        ws->focus = NULL;
                                ws = &r->s->ws[x];
                                if (win == ws->focus)
                                        ws->focus = NULL;
@@ -2080,7 +2082,7 @@ validate_win(struct ws_win *testwin)
 
        for (i = 0; i < ScreenCount(display); i++)
                TAILQ_FOREACH(r, &screens[i].rl, entry)
 
        for (i = 0; i < ScreenCount(display); i++)
                TAILQ_FOREACH(r, &screens[i].rl, entry)
-                       for (x = 0; x < SWM_WS_MAX; x++) {
+                       for (x = 0; x < workspace_limit; x++) {
                                ws = &r->s->ws[x];
                                TAILQ_FOREACH(win, &ws->winlist, entry)
                                        if (win == testwin)
                                ws = &r->s->ws[x];
                                TAILQ_FOREACH(win, &ws->winlist, entry)
                                        if (win == testwin)
@@ -2099,7 +2101,7 @@ validate_ws(struct workspace *testws)
        /* validate all ws */
        for (i = 0; i < ScreenCount(display); i++)
                TAILQ_FOREACH(r, &screens[i].rl, entry)
        /* validate all ws */
        for (i = 0; i < ScreenCount(display); i++)
                TAILQ_FOREACH(r, &screens[i].rl, entry)
-                       for (x = 0; x < SWM_WS_MAX; x++) {
+                       for (x = 0; x < workspace_limit; x++) {
                                ws = &r->s->ws[x];
                                if (ws == testws)
                                        return (0);
                                ws = &r->s->ws[x];
                                if (ws == testws)
                                        return (0);
@@ -2167,7 +2169,7 @@ unfocus_all(void)
        DNPRINTF(SWM_D_FOCUS, "unfocus_all\n");
 
        for (i = 0; i < ScreenCount(display); i++)
        DNPRINTF(SWM_D_FOCUS, "unfocus_all\n");
 
        for (i = 0; i < ScreenCount(display); i++)
-               for (j = 0; j < SWM_WS_MAX; j++)
+               for (j = 0; j < workspace_limit; j++)
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
                                unfocus_win(win);
 }
                        TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry)
                                unfocus_win(win);
 }
@@ -2249,6 +2251,9 @@ switchws(struct swm_region *r, union arg *args)
        if (!(r && r->s))
                return;
 
        if (!(r && r->s))
                return;
 
+       if (wsid >= workspace_limit)
+               return;
+
        this_r = r;
        old_ws = this_r->ws;
        new_ws = &this_r->s->ws[wsid];
        this_r = r;
        old_ws = this_r->ws;
        new_ws = &this_r->s->ws[wsid];
@@ -2311,7 +2316,7 @@ cyclews(struct swm_region *r, union arg *args)
                        cycle_all = 1;
                        /* FALLTHROUGH */
                case SWM_ARG_ID_CYCLEWS_UP:
                        cycle_all = 1;
                        /* FALLTHROUGH */
                case SWM_ARG_ID_CYCLEWS_UP:
-                       if (a.id < SWM_WS_MAX - 1)
+                       if (a.id < workspace_limit - 1)
                                a.id++;
                        else
                                a.id = 0;
                                a.id++;
                        else
                                a.id = 0;
@@ -2323,7 +2328,7 @@ cyclews(struct swm_region *r, union arg *args)
                        if (a.id > 0)
                                a.id--;
                        else
                        if (a.id > 0)
                                a.id--;
                        else
-                               a.id = SWM_WS_MAX - 1;
+                               a.id = workspace_limit - 1;
                        break;
                default:
                        return;
                        break;
                default:
                        return;
@@ -3239,6 +3244,9 @@ send_to_ws(struct swm_region *r, union arg *args)
        unsigned char           ws_idx_str[SWM_PROPLEN];
        union arg               a;
 
        unsigned char           ws_idx_str[SWM_PROPLEN];
        union arg               a;
 
+       if (wsid >= workspace_limit)
+               return;
+
        if (r && r->ws && r->ws->focus)
                win = r->ws->focus;
        else
        if (r && r->ws && r->ws->focus)
                win = r->ws->focus;
        else
@@ -3437,7 +3445,7 @@ search_workspace(struct swm_region *r, union arg *args)
        if ((lfile = fdopen(select_list_pipe[1], "w")) == NULL)
                return;
 
        if ((lfile = fdopen(select_list_pipe[1], "w")) == NULL)
                return;
 
-       for (i = 0; i < SWM_WS_MAX; i++) {
+       for (i = 0; i < workspace_limit; i++) {
                ws = &r->s->ws[i];
                if (ws == NULL)
                        continue;
                ws = &r->s->ws[i];
                if (ws == NULL)
                        continue;
@@ -3605,7 +3613,7 @@ search_resp_search_workspace(char *resp, unsigned long len)
        p = strchr(q, ':');
        if (p != NULL)
                *p = '\0';
        p = strchr(q, ':');
        if (p != NULL)
                *p = '\0';
-       ws_idx = strtonum(q, 1, SWM_WS_MAX, &errstr);
+       ws_idx = strtonum(q, 1, workspace_limit, &errstr);
        if (errstr) {
                DNPRINTF(SWM_D_MISC, "workspace idx is %s: %s",
                    errstr, q);
        if (errstr) {
                DNPRINTF(SWM_D_MISC, "workspace idx is %s: %s",
                    errstr, q);
@@ -4184,6 +4192,18 @@ enum keyfuncid {
        kf_ws_8,
        kf_ws_9,
        kf_ws_10,
        kf_ws_8,
        kf_ws_9,
        kf_ws_10,
+       kf_ws_11,
+       kf_ws_12,
+       kf_ws_13,
+       kf_ws_14,
+       kf_ws_15,
+       kf_ws_16,
+       kf_ws_17,
+       kf_ws_18,
+       kf_ws_19,
+       kf_ws_20,
+       kf_ws_21,
+       kf_ws_22,
        kf_ws_next,
        kf_ws_prev,
        kf_ws_next_all,
        kf_ws_next,
        kf_ws_prev,
        kf_ws_next_all,
@@ -4201,6 +4221,18 @@ enum keyfuncid {
        kf_mvws_8,
        kf_mvws_9,
        kf_mvws_10,
        kf_mvws_8,
        kf_mvws_9,
        kf_mvws_10,
+       kf_mvws_11,
+       kf_mvws_12,
+       kf_mvws_13,
+       kf_mvws_14,
+       kf_mvws_15,
+       kf_mvws_16,
+       kf_mvws_17,
+       kf_mvws_18,
+       kf_mvws_19,
+       kf_mvws_20,
+       kf_mvws_21,
+       kf_mvws_22,
        kf_bar_toggle,
        kf_wind_kill,
        kf_wind_del,
        kf_bar_toggle,
        kf_wind_kill,
        kf_wind_del,
@@ -4276,6 +4308,18 @@ struct keyfunc {
        { "ws_8",               switchws,       {.id = 7} },
        { "ws_9",               switchws,       {.id = 8} },
        { "ws_10",              switchws,       {.id = 9} },
        { "ws_8",               switchws,       {.id = 7} },
        { "ws_9",               switchws,       {.id = 8} },
        { "ws_10",              switchws,       {.id = 9} },
+       { "ws_11",              switchws,       {.id = 10} },
+       { "ws_12",              switchws,       {.id = 11} },
+       { "ws_13",              switchws,       {.id = 12} },
+       { "ws_14",              switchws,       {.id = 13} },
+       { "ws_15",              switchws,       {.id = 14} },
+       { "ws_16",              switchws,       {.id = 15} },
+       { "ws_17",              switchws,       {.id = 16} },
+       { "ws_18",              switchws,       {.id = 17} },
+       { "ws_19",              switchws,       {.id = 18} },
+       { "ws_20",              switchws,       {.id = 19} },
+       { "ws_21",              switchws,       {.id = 20} },
+       { "ws_22",              switchws,       {.id = 21} },
        { "ws_next",            cyclews,        {.id = SWM_ARG_ID_CYCLEWS_UP} },
        { "ws_prev",            cyclews,        {.id = SWM_ARG_ID_CYCLEWS_DOWN} },
        { "ws_next_all",        cyclews,        {.id = SWM_ARG_ID_CYCLEWS_UP_ALL} },
        { "ws_next",            cyclews,        {.id = SWM_ARG_ID_CYCLEWS_UP} },
        { "ws_prev",            cyclews,        {.id = SWM_ARG_ID_CYCLEWS_DOWN} },
        { "ws_next_all",        cyclews,        {.id = SWM_ARG_ID_CYCLEWS_UP_ALL} },
@@ -4293,6 +4337,18 @@ struct keyfunc {
        { "mvws_8",             send_to_ws,     {.id = 7} },
        { "mvws_9",             send_to_ws,     {.id = 8} },
        { "mvws_10",            send_to_ws,     {.id = 9} },
        { "mvws_8",             send_to_ws,     {.id = 7} },
        { "mvws_9",             send_to_ws,     {.id = 8} },
        { "mvws_10",            send_to_ws,     {.id = 9} },
+       { "mvws_11",            send_to_ws,     {.id = 10} },
+       { "mvws_12",            send_to_ws,     {.id = 11} },
+       { "mvws_13",            send_to_ws,     {.id = 12} },
+       { "mvws_14",            send_to_ws,     {.id = 13} },
+       { "mvws_15",            send_to_ws,     {.id = 14} },
+       { "mvws_16",            send_to_ws,     {.id = 15} },
+       { "mvws_17",            send_to_ws,     {.id = 16} },
+       { "mvws_18",            send_to_ws,     {.id = 17} },
+       { "mvws_19",            send_to_ws,     {.id = 18} },
+       { "mvws_20",            send_to_ws,     {.id = 19} },
+       { "mvws_21",            send_to_ws,     {.id = 20} },
+       { "mvws_22",            send_to_ws,     {.id = 21} },
        { "bar_toggle",         bar_toggle,     {0} },
        { "wind_kill",          wkill,          {.id = SWM_ARG_ID_KILLWINDOW} },
        { "wind_del",           wkill,          {.id = SWM_ARG_ID_DELETEWINDOW} },
        { "bar_toggle",         bar_toggle,     {0} },
        { "wind_kill",          wkill,          {.id = SWM_ARG_ID_KILLWINDOW} },
        { "wind_del",           wkill,          {.id = SWM_ARG_ID_DELETEWINDOW} },
@@ -4886,6 +4942,18 @@ setup_keys(void)
        setkeybinding(MODKEY,           XK_8,           kf_ws_8,        NULL);
        setkeybinding(MODKEY,           XK_9,           kf_ws_9,        NULL);
        setkeybinding(MODKEY,           XK_0,           kf_ws_10,       NULL);
        setkeybinding(MODKEY,           XK_8,           kf_ws_8,        NULL);
        setkeybinding(MODKEY,           XK_9,           kf_ws_9,        NULL);
        setkeybinding(MODKEY,           XK_0,           kf_ws_10,       NULL);
+       setkeybinding(MODKEY,           XK_F1,          kf_ws_11,       NULL);
+       setkeybinding(MODKEY,           XK_F2,          kf_ws_12,       NULL);
+       setkeybinding(MODKEY,           XK_F3,          kf_ws_13,       NULL);
+       setkeybinding(MODKEY,           XK_F4,          kf_ws_14,       NULL);
+       setkeybinding(MODKEY,           XK_F5,          kf_ws_15,       NULL);
+       setkeybinding(MODKEY,           XK_F6,          kf_ws_16,       NULL);
+       setkeybinding(MODKEY,           XK_F7,          kf_ws_17,       NULL);
+       setkeybinding(MODKEY,           XK_F8,          kf_ws_18,       NULL);
+       setkeybinding(MODKEY,           XK_F9,          kf_ws_19,       NULL);
+       setkeybinding(MODKEY,           XK_F10,         kf_ws_20,       NULL);
+       setkeybinding(MODKEY,           XK_F11,         kf_ws_21,       NULL);
+       setkeybinding(MODKEY,           XK_F12,         kf_ws_22,       NULL);
        setkeybinding(MODKEY,           XK_Right,       kf_ws_next,     NULL);
        setkeybinding(MODKEY,           XK_Left,        kf_ws_prev,     NULL);
        setkeybinding(MODKEY,           XK_Up,          kf_ws_next_all, NULL);
        setkeybinding(MODKEY,           XK_Right,       kf_ws_next,     NULL);
        setkeybinding(MODKEY,           XK_Left,        kf_ws_prev,     NULL);
        setkeybinding(MODKEY,           XK_Up,          kf_ws_next_all, NULL);
@@ -4903,6 +4971,18 @@ setup_keys(void)
        setkeybinding(MODKEY|ShiftMask, XK_8,           kf_mvws_8,      NULL);
        setkeybinding(MODKEY|ShiftMask, XK_9,           kf_mvws_9,      NULL);
        setkeybinding(MODKEY|ShiftMask, XK_0,           kf_mvws_10,     NULL);
        setkeybinding(MODKEY|ShiftMask, XK_8,           kf_mvws_8,      NULL);
        setkeybinding(MODKEY|ShiftMask, XK_9,           kf_mvws_9,      NULL);
        setkeybinding(MODKEY|ShiftMask, XK_0,           kf_mvws_10,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F1,          kf_mvws_11,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F2,          kf_mvws_12,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F3,          kf_mvws_13,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F4,          kf_mvws_14,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F5,          kf_mvws_15,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F6,          kf_mvws_16,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F7,          kf_mvws_17,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F8,          kf_mvws_18,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F9,          kf_mvws_19,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F10,         kf_mvws_20,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F11,         kf_mvws_21,     NULL);
+       setkeybinding(MODKEY|ShiftMask, XK_F12,         kf_mvws_22,     NULL);
        setkeybinding(MODKEY,           XK_b,           kf_bar_toggle,  NULL);
        setkeybinding(MODKEY,           XK_Tab,         kf_focus_next,  NULL);
        setkeybinding(MODKEY|ShiftMask, XK_Tab,         kf_focus_prev,  NULL);
        setkeybinding(MODKEY,           XK_b,           kf_bar_toggle,  NULL);
        setkeybinding(MODKEY,           XK_Tab,         kf_focus_next,  NULL);
        setkeybinding(MODKEY|ShiftMask, XK_Tab,         kf_focus_prev,  NULL);
@@ -5197,8 +5277,8 @@ setup_quirks(void)
 
 enum   { SWM_S_BAR_DELAY, SWM_S_BAR_ENABLED, SWM_S_BAR_BORDER_WIDTH,
          SWM_S_STACK_ENABLED, SWM_S_CLOCK_ENABLED, SWM_S_CLOCK_FORMAT,
 
 enum   { SWM_S_BAR_DELAY, SWM_S_BAR_ENABLED, SWM_S_BAR_BORDER_WIDTH,
          SWM_S_STACK_ENABLED, SWM_S_CLOCK_ENABLED, SWM_S_CLOCK_FORMAT,
-         SWM_S_CYCLE_EMPTY, SWM_S_CYCLE_VISIBLE, SWM_S_SS_ENABLED,
-         SWM_S_TERM_WIDTH, SWM_S_TITLE_CLASS_ENABLED,
+         SWM_S_CYCLE_EMPTY, SWM_S_CYCLE_VISIBLE, SWM_S_WORKSPACE_LIMIT,
+         SWM_S_SS_ENABLED, SWM_S_TERM_WIDTH, SWM_S_TITLE_CLASS_ENABLED,
          SWM_S_TITLE_NAME_ENABLED, SWM_S_WINDOW_NAME_ENABLED, SWM_S_URGENT_ENABLED,
          SWM_S_FOCUS_MODE, SWM_S_DISABLE_BORDER, SWM_S_BORDER_WIDTH,
          SWM_S_BAR_FONT, SWM_S_BAR_ACTION, SWM_S_SPAWN_TERM,
          SWM_S_TITLE_NAME_ENABLED, SWM_S_WINDOW_NAME_ENABLED, SWM_S_URGENT_ENABLED,
          SWM_S_FOCUS_MODE, SWM_S_DISABLE_BORDER, SWM_S_BORDER_WIDTH,
          SWM_S_BAR_FONT, SWM_S_BAR_ACTION, SWM_S_SPAWN_TERM,
@@ -5254,6 +5334,13 @@ setconfvalue(char *selector, char *value, int flags)
        case SWM_S_CYCLE_VISIBLE:
                cycle_visible = atoi(value);
                break;
        case SWM_S_CYCLE_VISIBLE:
                cycle_visible = atoi(value);
                break;
+       case SWM_S_WORKSPACE_LIMIT:
+               workspace_limit = atoi(value);
+               if (workspace_limit > SWM_WS_MAX)
+                       workspace_limit = SWM_WS_MAX;
+               else if (workspace_limit < 1)
+                       workspace_limit = 1;
+               break;
        case SWM_S_SS_ENABLED:
                ss_enabled = atoi(value);
                break;
        case SWM_S_SS_ENABLED:
                ss_enabled = atoi(value);
                break;
@@ -5376,7 +5463,7 @@ setautorun(char *selector, char *value, int flags)
        if (sscanf(value, "ws[%d]:%1023c", &ws_id, s) != 2)
                errx(1, "invalid autorun entry, should be 'ws[<idx>]:command'");
        ws_id--;
        if (sscanf(value, "ws[%d]:%1023c", &ws_id, s) != 2)
                errx(1, "invalid autorun entry, should be 'ws[<idx>]:command'");
        ws_id--;
-       if (ws_id < 0 || ws_id >= SWM_WS_MAX)
+       if (ws_id < 0 || ws_id >= workspace_limit)
                errx(1, "autorun: invalid workspace %d", ws_id + 1);
 
        /*
                errx(1, "autorun: invalid workspace %d", ws_id + 1);
 
        /*
@@ -5441,7 +5528,7 @@ setlayout(char *selector, char *value, int flags)
                    "<master_grow>:<master_add>:<stack_inc>:<always_raise>:"
                    "<type>'");
        ws_id--;
                    "<master_grow>:<master_add>:<stack_inc>:<always_raise>:"
                    "<type>'");
        ws_id--;
-       if (ws_id < 0 || ws_id >= SWM_WS_MAX)
+       if (ws_id < 0 || ws_id >= workspace_limit)
                errx(1, "layout: invalid workspace %d", ws_id + 1);
 
        if (!strcasecmp(s, "vertical"))
                errx(1, "layout: invalid workspace %d", ws_id + 1);
 
        if (!strcasecmp(s, "vertical"))
@@ -5515,6 +5602,7 @@ struct config_option configopt[] = {
        { "color_unfocus",              setconfcolor,   SWM_S_COLOR_UNFOCUS },
        { "cycle_empty",                setconfvalue,   SWM_S_CYCLE_EMPTY },
        { "cycle_visible",              setconfvalue,   SWM_S_CYCLE_VISIBLE },
        { "color_unfocus",              setconfcolor,   SWM_S_COLOR_UNFOCUS },
        { "cycle_empty",                setconfvalue,   SWM_S_CYCLE_EMPTY },
        { "cycle_visible",              setconfvalue,   SWM_S_CYCLE_VISIBLE },
+       { "workspace_limit",            setconfvalue,   SWM_S_WORKSPACE_LIMIT },
        { "dialog_ratio",               setconfvalue,   SWM_S_DIALOG_RATIO },
        { "verbose_layout",             setconfvalue,   SWM_S_VERBOSE_LAYOUT },
        { "modkey",                     setconfmodkey,  0 },
        { "dialog_ratio",               setconfvalue,   SWM_S_DIALOG_RATIO },
        { "verbose_layout",             setconfvalue,   SWM_S_VERBOSE_LAYOUT },
        { "modkey",                     setconfmodkey,  0 },
@@ -5832,7 +5920,8 @@ manage_window(Window id)
                p = NULL;
        } else if (prop && win->transient == 0) {
                DNPRINTF(SWM_D_PROP, "manage_window: get _SWM_WS: %s\n", prop);
                p = NULL;
        } else if (prop && win->transient == 0) {
                DNPRINTF(SWM_D_PROP, "manage_window: get _SWM_WS: %s\n", prop);
-               ws_idx = strtonum((const char *)prop, 0, 9, &errstr);
+               ws_idx = strtonum((const char *)prop, 0, workspace_limit - 1,
+                   &errstr);
                if (errstr) {
                        DNPRINTF(SWM_D_EVENT, "manage_window: window: #%s: %s",
                            errstr, prop);
                if (errstr) {
                        DNPRINTF(SWM_D_EVENT, "manage_window: window: #%s: %s",
                            errstr, prop);
@@ -6634,7 +6723,7 @@ new_region(struct swm_screen *s, int x, int y, int w, int h)
 
        /* if we don't have a workspace already, find one */
        if (ws == NULL) {
 
        /* if we don't have a workspace already, find one */
        if (ws == NULL) {
-               for (i = 0; i < SWM_WS_MAX; i++)
+               for (i = 0; i < workspace_limit; i++)
                        if (s->ws[i].r == NULL) {
                                ws = &s->ws[i];
                                break;
                        if (s->ws[i].r == NULL) {
                                ws = &s->ws[i];
                                break;
@@ -6838,7 +6927,7 @@ setup_screens(void)
 
                /* init all workspaces */
                /* XXX these should be dynamically allocated too */
 
                /* init all workspaces */
                /* XXX these should be dynamically allocated too */
-               for (j = 0; j < SWM_WS_MAX; j++) {
+               for (j = 0; j < workspace_limit; j++) {
                        ws = &screens[i].ws[j];
                        ws->idx = j;
                        ws->name = NULL;
                        ws = &screens[i].ws[j];
                        ws->idx = j;
                        ws->name = NULL;
index 5e460d5ccbec3e03e143865fafe450ff2f29b936..69ae88396b8ff3d6e6edd0c1e533c1d8aff4e3f6 100644 (file)
@@ -1,11 +1,18 @@
 # PLEASE READ THE MAN PAGE BEFORE EDITING THIS FILE!
 # http://opensource.conformal.com/cgi-bin/man-cgi?spectrwm
 # PLEASE READ THE MAN PAGE BEFORE EDITING THIS FILE!
 # http://opensource.conformal.com/cgi-bin/man-cgi?spectrwm
-
-# colors for focussed and unfocussed window borders
 # NOTE: all colors in this file are in hex! see XQueryColor for examples
 # NOTE: all colors in this file are in hex! see XQueryColor for examples
+
+# workspace_limit      = 22
+# focus_mode           = default
+
+# window decoration
+# border_width         = 1
 # color_focus          = red
 # color_unfocus                = rgb:88/88/88
 
 # color_focus          = red
 # color_unfocus                = rgb:88/88/88
 
+# Remove window border when bar is disabled and there is only one window in workspace
+# disable_border               = 1
+
 # bar settings
 # bar_enabled          = 1
 # bar_border_width     = 1
 # bar settings
 # bar_enabled          = 1
 # bar_border_width     = 1
@@ -24,9 +31,6 @@
 # title_class_enabled  = 0
 # window_name_enabled  = 0
 # verbose_layout               = 1
 # title_class_enabled  = 0
 # window_name_enabled  = 0
 # verbose_layout               = 1
-# focus_mode           = default
-# disable_border               = 1
-# border_width         = 1
 # urgent_enabled               = 1
 
 # spawn app
 # urgent_enabled               = 1
 
 # spawn app
index f2ce3927bf4177c12b8d51d38848a18fde4ab43e..6b54d1c84aa0c2d7d945dbf270128738a1d00372 100644 (file)
@@ -29,6 +29,18 @@ bind[ws_7]           = MOD+7
 bind[ws_8]             = MOD+8
 bind[ws_9]             = MOD+9
 bind[ws_10]            = MOD+0
 bind[ws_8]             = MOD+8
 bind[ws_9]             = MOD+9
 bind[ws_10]            = MOD+0
+bind[ws_11]            = MOD+F1
+bind[ws_12]            = MOD+F2
+bind[ws_13]            = MOD+F3
+bind[ws_14]            = MOD+F4
+bind[ws_15]            = MOD+F5
+bind[ws_16]            = MOD+F6
+bind[ws_17]            = MOD+F7
+bind[ws_18]            = MOD+F8
+bind[ws_19]            = MOD+F9
+bind[ws_20]            = MOD+F10
+bind[ws_21]            = MOD+F11
+bind[ws_22]            = MOD+F12
 bind[ws_next]          = MOD+Right
 bind[ws_prev]          = MOD+Left
 bind[ws_next_all]      = MOD+Up
 bind[ws_next]          = MOD+Right
 bind[ws_prev]          = MOD+Left
 bind[ws_next_all]      = MOD+Up
@@ -46,6 +58,18 @@ bind[mvws_7]         = MOD+Shift+7
 bind[mvws_8]           = MOD+Shift+8
 bind[mvws_9]           = MOD+Shift+9
 bind[mvws_10]          = MOD+Shift+0
 bind[mvws_8]           = MOD+Shift+8
 bind[mvws_9]           = MOD+Shift+9
 bind[mvws_10]          = MOD+Shift+0
+bind[mvws_11]          = MOD+Shift+F1
+bind[mvws_12]          = MOD+Shift+F2
+bind[mvws_13]          = MOD+Shift+F3
+bind[mvws_14]          = MOD+Shift+F4
+bind[mvws_15]          = MOD+Shift+F5
+bind[mvws_16]          = MOD+Shift+F6
+bind[mvws_17]          = MOD+Shift+F7
+bind[mvws_18]          = MOD+Shift+F8
+bind[mvws_19]          = MOD+Shift+F9
+bind[mvws_20]          = MOD+Shift+F10
+bind[mvws_21]          = MOD+Shift+F11
+bind[mvws_22]          = MOD+Shift+F12
 bind[bar_toggle]       = MOD+b
 bind[focus_next]       = MOD+Tab
 bind[focus_prev]       = MOD+Shift+Tab
 bind[bar_toggle]       = MOD+b
 bind[focus_next]       = MOD+Tab
 bind[focus_prev]       = MOD+Shift+Tab