From: Reginald Kennedy Date: Wed, 29 Aug 2012 13:45:30 +0000 (+0800) Subject: Add focus region bindings 'rg_' X-Git-Tag: SPECTRWM_2_1_0~20 X-Git-Url: https://code.delx.au/spectrwm/commitdiff_plain/18f0dc2ad05ae2091e9a9a7946502c810b91b7ef Add focus region bindings 'rg_' Default is M-Keypad_<1-9> Add move window to region bindings 'mvrg_' Default is M-S-Keypad_<1-9> Add invisible input window to each region for handling region focus. On unfocused regions, set the bar border color to color_unfocus. Add function to handle MotionNotify events on region input windows. Fix default focus on (re)start. Fix region-related function and macro naming. Names referred to 'screen' instead of 'region' Rename screen_* bindings to rg_*. screen_* is now an alias for rg_*; old config files will still work. Fix screen/region wording in manpage. Sort setkeybinding calls in setup_keys. Cleanup redundant calls when setting up the bar. --- diff --git a/spectrwm.1 b/spectrwm.1 index f27d837..66ca98d 100644 --- a/spectrwm.1 +++ b/spectrwm.1 @@ -94,13 +94,14 @@ such as battery life. .It Ic bar_at_bottom Place the statusbar at the bottom of each region instead of the top. .It Ic bar_border Ns Bq Ar x -Color of the status bar border in screen +Border color of the status bar(s) in screen .Ar x . .It Ic bar_border_width Set status bar border thickness in pixels. Disable border by setting to 0. .It Ic bar_color Ns Bq Ar x -Color of the status bar window in screen +Background color of the status bar(s) in screen +.Ar x . .It Ic bar_enabled Set default .Ar bar_toggle @@ -219,7 +220,7 @@ This ratio is the screen size to what they will be resized. For example, 0.6 is 60% of the physical screen size. .It Ic disable_border Remove border when bar is disabled and there is only one window on the -screen. +region. .It Ic focus_close Window to put focus when the focused window is closed. Possible values are @@ -314,8 +315,8 @@ same space on the screen. Defined in the format screen[]:WIDTHxHEIGHT+X+Y, e.g.\& screen[1]:800x1200+0+0. .Pp -To make a screen span multiple monitors, create a region big enough to cover -them all, e.g. screen[1]:2048x768+0+0 makes the screen span two monitors with +To make a region span multiple monitors, create a region big enough to cover +them all, e.g. screen[1]:2048x768+0+0 makes the region span two monitors with 1024x768 resolution sitting one next to the other. .It Ic spawn_position Position in stack to place newly spawned windows. @@ -372,7 +373,7 @@ Enable or disable displaying the window name in the status bar. Enable by setting to 1. .Pp To prevent excessively large window names from pushing the remaining text off -the screen, it's limited to 64 characters, by default. +the bar, it's limited to 64 characters, by default. See the .Ic bar_format option for more details. @@ -522,6 +523,10 @@ wind_kill .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 Ar Keypad 1-9 +.Pf rg_ Aq Ar 1-9 +.It Cm M-S- Ns Aq Ar Keypad 1-9 +.Pf mvrg_ Aq Ar 1-9 .It Cm M- Ns Aq Cm Right ws_next .It Cm M- Ns Aq Cm Left @@ -533,9 +538,9 @@ ws_prev_all .It Cm M-a ws_prior .It Cm M-S- Ns Aq Cm Right -screen_next +rg_next .It Cm M-S- Ns Aq Cm Left -screen_prev +rg_prev .It Cm M-s screenshot_all .It Cm M-S-s @@ -649,6 +654,18 @@ Move current window to workspace where .Ar n is 1 through workspace_limit. +.It Cm rg_ Ns Ar n +Focus on region +.Ar n , +where +.Ar n +is 1 through 9. +.It Cm mvrg_ Ns Ar n +Move current window to region +.Ar n , +where +.Ar n +is 1 through 9. .It Cm ws_next Switch to next workspace with a window in it. .It Cm ws_prev @@ -659,10 +676,10 @@ Switch to next workspace. Switch to previous workspace. .It Cm ws_prior Switch to last visited workspace. -.It Cm screen_next -Move pointer to next region. -.It Cm screen_prev -Move pointer to previous region. +.It Cm rg_next +Switch to next region. +.It Cm rg_prev +Switch to previous region. .It Cm screenshot_all Take screenshot of entire screen (if enabled) (see @@ -831,7 +848,7 @@ Allow window to position itself, uncentered. .It XTERM_FONTADJ Adjust xterm fonts when resizing. .It FULLSCREEN -Remove border to allow window to use full screen size. +Remove border to allow window to use full region size. .It FOCUSPREV On exit force focus on previously focused application not previous application in the stack. diff --git a/spectrwm.c b/spectrwm.c index ee48397..91b5755 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -251,10 +251,11 @@ u_int32_t swm_debug = 0 #define SWM_FOCUS_MANUAL (2) #define SWM_CK_NONE 0 -#define SWM_CK_ALL 0x7 +#define SWM_CK_ALL 0xf #define SWM_CK_FOCUS 0x1 #define SWM_CK_POINTER 0x2 #define SWM_CK_FALLBACK 0x4 +#define SWM_CK_REGION 0x8 #define SWM_CONF_DEFAULT (0) #define SWM_CONF_KEYMAPPING (1) @@ -405,6 +406,7 @@ struct swm_bar { /* virtual "screens" */ struct swm_region { TAILQ_ENTRY(swm_region) entry; + xcb_window_t id; struct swm_geometry g; struct workspace *ws; /* current workspace on this region */ struct workspace *ws_prior; /* prior workspace on this region */ @@ -535,6 +537,7 @@ struct swm_screen { struct swm_region_list orl; /* list of old regions */ xcb_window_t root; struct workspace ws[SWM_WS_MAX]; + struct swm_region *r_focus; /* colors */ struct { @@ -566,8 +569,8 @@ union arg { #define SWM_ARG_ID_STACKINIT (31) #define SWM_ARG_ID_CYCLEWS_UP (40) #define SWM_ARG_ID_CYCLEWS_DOWN (41) -#define SWM_ARG_ID_CYCLESC_UP (42) -#define SWM_ARG_ID_CYCLESC_DOWN (43) +#define SWM_ARG_ID_CYCLERG_UP (42) +#define SWM_ARG_ID_CYCLERG_DOWN (43) #define SWM_ARG_ID_CYCLEWS_UP_ALL (44) #define SWM_ARG_ID_CYCLEWS_DOWN_ALL (45) #define SWM_ARG_ID_STACKINC (50) @@ -732,6 +735,15 @@ enum keyfuncid { KF_MOVE_LEFT, KF_MOVE_RIGHT, KF_MOVE_UP, + KF_MVRG_1, + KF_MVRG_2, + KF_MVRG_3, + KF_MVRG_4, + KF_MVRG_5, + KF_MVRG_6, + KF_MVRG_7, + KF_MVRG_8, + KF_MVRG_9, KF_MVWS_1, KF_MVWS_2, KF_MVWS_3, @@ -758,6 +770,17 @@ enum keyfuncid { KF_QUIT, KF_RAISE_TOGGLE, KF_RESTART, + KF_RG_1, + KF_RG_2, + KF_RG_3, + KF_RG_4, + KF_RG_5, + KF_RG_6, + KF_RG_7, + KF_RG_8, + KF_RG_9, + KF_RG_NEXT, + KF_RG_PREV, KF_SCREEN_NEXT, KF_SCREEN_PREV, KF_SEARCH_WIN, @@ -853,7 +876,7 @@ int count_win(struct workspace *, int); void cursors_cleanup(void); void cursors_load(void); void custom_region(char *); -void cyclescr(struct swm_region *, union arg *); +void cyclerg(struct swm_region *, union arg *); void cyclews(struct swm_region *, union arg *); void cycle_layout(struct swm_region *, union arg *); void destroynotify(xcb_destroy_notify_event_t *); @@ -882,6 +905,8 @@ void focusin(xcb_focus_in_event_t *); void focusout(xcb_focus_out_event_t *); #endif void focus_flush(void); +void focus_region(struct swm_region *); +void focusrg(struct swm_region *, union arg *); void focus_win(struct ws_win *); void fontset_init(void); void free_window(struct ws_win *); @@ -928,6 +953,7 @@ void map_window(struct ws_win *); void mapnotify(xcb_map_notify_event_t *); void mappingnotify(xcb_mapping_notify_event_t *); void maprequest(xcb_map_request_event_t *); +void motionnotify(xcb_motion_notify_event_t *); void move(struct ws_win *, union arg *); void move_step(struct swm_region *, union arg *); uint32_t name_to_pixel(const char *); @@ -962,7 +988,9 @@ void search_resp_uniconify(const char *, unsigned long); void search_win(struct swm_region *, union arg *); void search_win_cleanup(void); void search_workspace(struct swm_region *, union arg *); +void send_to_rg(struct swm_region *, union arg *); void send_to_ws(struct swm_region *, union arg *); +void set_region(struct swm_region *); int setautorun(char *, char *, int); int setconfbinding(char *, char *, int); int setconfcolor(char *, char *, int); @@ -2302,10 +2330,6 @@ bar_toggle(struct swm_region *r, union arg *args) void bar_extra_setup(void) { - struct swm_region *r; - uint32_t wa[2]; - int i, num_screens; - /* do this here because the conf file is in memory */ if (bar_extra && !bar_extra_running && bar_argv[0]) { /* launch external status app */ @@ -2341,20 +2365,6 @@ bar_extra_setup(void) atexit(kill_bar_extra_atexit); } - - num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); - for (i = 0; i < num_screens; i++) - TAILQ_FOREACH(r, &screens[i].rl, entry) { - if (r->bar == NULL) - continue; - wa[0] = screens[i].c[SWM_S_COLOR_BAR].pixel; - wa[1] = screens[i].c[SWM_S_COLOR_BAR_BORDER].pixel; - xcb_change_window_attributes(conn, r->bar->id, - XCB_CW_BACK_PIXEL | XCB_CW_BORDER_PIXEL, wa); - } - - bar_draw(); - xcb_flush(conn); } void @@ -2501,9 +2511,10 @@ bar_setup(struct swm_region *r) WIDTH(r->bar) = WIDTH(r) - 2 * bar_border_width; HEIGHT(r->bar) = bar_height - 2 * bar_border_width; + /* Assume region is unfocused when we create the bar. */ r->bar->id = xcb_generate_id(conn); wa[0] = r->s->c[SWM_S_COLOR_BAR].pixel; - wa[1] = r->s->c[SWM_S_COLOR_BAR_BORDER].pixel; + wa[1] = r->s->c[SWM_S_COLOR_UNFOCUS].pixel; wa[2] = XCB_EVENT_MASK_EXPOSURE; xcb_create_window(conn, XCB_COPY_FROM_PARENT, r->bar->id, r->s->root, @@ -2882,7 +2893,10 @@ root_to_region(xcb_window_t root, int check) if (screens[i].root == root) break; - if (check & SWM_CK_FOCUS) { + if (check & SWM_CK_REGION) + r = screens[i].r_focus; + + if (r == NULL && check & SWM_CK_FOCUS) { /* Try to find an actively focused window */ gifr = xcb_get_input_focus_reply(conn, xcb_get_input_focus(conn), NULL); @@ -3240,9 +3254,10 @@ focus_win(struct ws_win *win) TAILQ_FOREACH(w, &ws->winlist, entry) if (w->transient == win->id && !w->iconic) map_window(w); - } + set_region(ws->r); + xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win->s->root, ewmh[_NET_ACTIVE_WINDOW].atom, XCB_ATOM_WINDOW, 32, 1, &win->id); @@ -3303,6 +3318,66 @@ event_drain(uint8_t rt) } } +void +set_region(struct swm_region *r) +{ + struct swm_region *rf; + + if (r == NULL) + return; + + /* Skip if only one region on this screen. */ + rf = TAILQ_FIRST(&r->s->rl); + if (TAILQ_NEXT(rf, entry) == NULL) + goto out; + + rf = r->s->r_focus; + /* Unfocus old region bar. */ + if (rf) { + if (rf == r) + return; + + xcb_change_window_attributes(conn, rf->bar->id, + XCB_CW_BORDER_PIXEL, + &r->s->c[SWM_S_COLOR_UNFOCUS].pixel); + } + + /* Set region bar border to focus_color. */ + xcb_change_window_attributes(conn, r->bar->id, + XCB_CW_BORDER_PIXEL, &r->s->c[SWM_S_COLOR_BAR_BORDER].pixel); + +out: + r->s->r_focus = r; +} + +void +focus_region(struct swm_region *r) +{ + struct ws_win *nfw; + struct swm_region *old_r; + + if (r == NULL) + return; + + old_r = r->s->r_focus; + set_region(r); + + nfw = get_region_focus(r); + if (nfw) { + focus_win(nfw); + } else { + /* New region is empty; need to manually unfocus win. */ + if (old_r) + unfocus_win(old_r->ws->focus); + + xcb_set_input_focus(conn, XCB_INPUT_FOCUS_PARENT, r->s->root, + XCB_CURRENT_TIME); + + /* Clear bar since empty. */ + bar_draw(); + } +} + void switchws(struct swm_region *r, union arg *args) { @@ -3441,9 +3516,32 @@ priorws(struct swm_region *r, union arg *args) } void -cyclescr(struct swm_region *r, union arg *args) +focusrg(struct swm_region *r, union arg *args) +{ + int ridx = args->id, i, num_screens; + struct swm_region *rr = NULL; + + num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); + /* do nothing if we don't have more than one screen */ + if (!(num_screens > 1 || outputs > 1)) + return; + + DNPRINTF(SWM_D_FOCUS, "focusrg: id: %d\n", ridx); + + rr = TAILQ_FIRST(&r->s->rl); + for (i = 0; i < ridx; ++i) + rr = TAILQ_NEXT(rr, entry); + + if (rr == NULL) + return; + + focus_region(rr); + focus_flush(); +} + +void +cyclerg(struct swm_region *r, union arg *args) { - struct ws_win *nfw; struct swm_region *rr = NULL; int i, num_screens; @@ -3454,12 +3552,12 @@ cyclescr(struct swm_region *r, union arg *args) i = r->s->idx; switch (args->id) { - case SWM_ARG_ID_CYCLESC_UP: + case SWM_ARG_ID_CYCLERG_UP: rr = TAILQ_NEXT(r, entry); if (rr == NULL) rr = TAILQ_FIRST(&screens[i].rl); break; - case SWM_ARG_ID_CYCLESC_DOWN: + case SWM_ARG_ID_CYCLERG_DOWN: rr = TAILQ_PREV(r, swm_region_list, entry); if (rr == NULL) rr = TAILQ_LAST(&screens[i].rl, swm_region_list); @@ -3470,19 +3568,7 @@ cyclescr(struct swm_region *r, union arg *args) if (rr == NULL) return; - nfw = get_region_focus(rr); - if (nfw) { - focus_win(nfw); - } else { - /* New region is empty; unfocus old region and warp pointer. */ - unfocus_win(r->ws->focus); - xcb_set_input_focus(conn, XCB_INPUT_FOCUS_PARENT, - rr->s[i].root, XCB_CURRENT_TIME); - - /* Clear bar since empty. */ - bar_draw(); - } - + focus_region(rr); focus_flush(); } @@ -4427,6 +4513,32 @@ max_stack(struct workspace *ws, struct swm_geometry *g) } } +void +send_to_rg(struct swm_region *r, union arg *args) +{ + int ridx = args->id, i, num_screens; + struct swm_region *rr = NULL; + union arg a; + + num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); + /* do nothing if we don't have more than one screen */ + if (!(num_screens > 1 || outputs > 1)) + return; + + DNPRINTF(SWM_D_FOCUS, "send_to_rg: id: %d\n", ridx); + + rr = TAILQ_FIRST(&r->s->rl); + for (i = 0; i < ridx; ++i) + rr = TAILQ_NEXT(rr, entry); + + if (rr == NULL) + return; + + a.id = rr->ws->idx; + + send_to_ws(r, &a); +} + void send_to_ws(struct swm_region *r, union arg *args) { @@ -5497,6 +5609,15 @@ struct keyfunc { { "move_left", move_step, {.id = SWM_ARG_ID_MOVELEFT} }, { "move_right", move_step, {.id = SWM_ARG_ID_MOVERIGHT} }, { "move_up", move_step, {.id = SWM_ARG_ID_MOVEUP} }, + { "mvrg_1", send_to_rg, {.id = 0} }, + { "mvrg_2", send_to_rg, {.id = 1} }, + { "mvrg_3", send_to_rg, {.id = 2} }, + { "mvrg_4", send_to_rg, {.id = 3} }, + { "mvrg_5", send_to_rg, {.id = 4} }, + { "mvrg_6", send_to_rg, {.id = 5} }, + { "mvrg_7", send_to_rg, {.id = 6} }, + { "mvrg_8", send_to_rg, {.id = 7} }, + { "mvrg_9", send_to_rg, {.id = 8} }, { "mvws_1", send_to_ws, {.id = 0} }, { "mvws_2", send_to_ws, {.id = 1} }, { "mvws_3", send_to_ws, {.id = 2} }, @@ -5523,8 +5644,19 @@ struct keyfunc { { "quit", quit, {0} }, { "raise_toggle", raise_toggle, {0} }, { "restart", restart, {0} }, - { "screen_next", cyclescr, {.id = SWM_ARG_ID_CYCLESC_UP} }, - { "screen_prev", cyclescr, {.id = SWM_ARG_ID_CYCLESC_DOWN} }, + { "rg_1", focusrg, {.id = 0} }, + { "rg_2", focusrg, {.id = 1} }, + { "rg_3", focusrg, {.id = 2} }, + { "rg_4", focusrg, {.id = 3} }, + { "rg_5", focusrg, {.id = 4} }, + { "rg_6", focusrg, {.id = 5} }, + { "rg_7", focusrg, {.id = 6} }, + { "rg_8", focusrg, {.id = 7} }, + { "rg_9", focusrg, {.id = 8} }, + { "rg_next", cyclerg, {.id = SWM_ARG_ID_CYCLERG_UP} }, + { "rg_prev", cyclerg, {.id = SWM_ARG_ID_CYCLERG_DOWN} }, + { "screen_next", cyclerg, {.id = SWM_ARG_ID_CYCLERG_UP} }, + { "screen_prev", cyclerg, {.id = SWM_ARG_ID_CYCLERG_DOWN} }, { "search_win", search_win, {0} }, { "search_workspace", search_workspace, {0} }, { "spawn_custom", NULL, {0} }, @@ -6106,25 +6238,94 @@ void setup_keys(void) { #define MODKEY_SHIFT MODKEY | XCB_MOD_MASK_SHIFT + setkeybinding(MODKEY, XK_b, KF_BAR_TOGGLE, NULL); + setkeybinding(MODKEY_SHIFT, XK_b, KF_BAR_TOGGLE_WS,NULL); + setkeybinding(MODKEY, XK_v, KF_BUTTON2, NULL); setkeybinding(MODKEY, XK_space, KF_CYCLE_LAYOUT,NULL); setkeybinding(MODKEY_SHIFT, XK_backslash, KF_FLIP_LAYOUT, NULL); - setkeybinding(MODKEY_SHIFT, XK_space, KF_STACK_RESET, NULL); + setkeybinding(MODKEY, XK_t, KF_FLOAT_TOGGLE,NULL); + setkeybinding(MODKEY, XK_m, KF_FOCUS_MAIN, NULL); + setkeybinding(MODKEY, XK_j, KF_FOCUS_NEXT, NULL); + setkeybinding(MODKEY, XK_Tab, KF_FOCUS_NEXT, NULL); + setkeybinding(MODKEY, XK_k, KF_FOCUS_PREV, NULL); + setkeybinding(MODKEY_SHIFT, XK_Tab, KF_FOCUS_PREV, NULL); + setkeybinding(MODKEY_SHIFT, XK_equal, KF_HEIGHT_GROW,NULL); + setkeybinding(MODKEY_SHIFT, XK_minus, KF_HEIGHT_SHRINK,NULL); + setkeybinding(MODKEY, XK_w, KF_ICONIFY, NULL); setkeybinding(MODKEY, XK_h, KF_MASTER_SHRINK, NULL); setkeybinding(MODKEY, XK_l, KF_MASTER_GROW, NULL); setkeybinding(MODKEY, XK_comma, KF_MASTER_ADD, NULL); setkeybinding(MODKEY, XK_period, KF_MASTER_DEL, NULL); + setkeybinding(MODKEY_SHIFT, XK_bracketright,KF_MOVE_DOWN,NULL); + setkeybinding(MODKEY, XK_bracketleft, KF_MOVE_LEFT,NULL); + setkeybinding(MODKEY, XK_bracketright,KF_MOVE_RIGHT,NULL); + setkeybinding(MODKEY_SHIFT, XK_bracketleft, KF_MOVE_UP, NULL); + setkeybinding(MODKEY_SHIFT, XK_KP_End, KF_MVRG_1, NULL); + setkeybinding(MODKEY_SHIFT, XK_KP_Down, KF_MVRG_2, NULL); + setkeybinding(MODKEY_SHIFT, XK_KP_Next, KF_MVRG_3, NULL); + setkeybinding(MODKEY_SHIFT, XK_KP_Left, KF_MVRG_4, NULL); + setkeybinding(MODKEY_SHIFT, XK_KP_Begin, KF_MVRG_5, NULL); + setkeybinding(MODKEY_SHIFT, XK_KP_Right, KF_MVRG_6, NULL); + setkeybinding(MODKEY_SHIFT, XK_KP_Home, KF_MVRG_7, NULL); + setkeybinding(MODKEY_SHIFT, XK_KP_Up, KF_MVRG_8, NULL); + setkeybinding(MODKEY_SHIFT, XK_KP_Prior, KF_MVRG_9, NULL); + setkeybinding(MODKEY_SHIFT, XK_1, KF_MVWS_1, NULL); + setkeybinding(MODKEY_SHIFT, XK_2, KF_MVWS_2, NULL); + setkeybinding(MODKEY_SHIFT, XK_3, KF_MVWS_3, NULL); + setkeybinding(MODKEY_SHIFT, XK_4, KF_MVWS_4, NULL); + setkeybinding(MODKEY_SHIFT, XK_5, KF_MVWS_5, NULL); + setkeybinding(MODKEY_SHIFT, XK_6, KF_MVWS_6, NULL); + setkeybinding(MODKEY_SHIFT, XK_7, KF_MVWS_7, NULL); + setkeybinding(MODKEY_SHIFT, XK_8, KF_MVWS_8, NULL); + setkeybinding(MODKEY_SHIFT, XK_9, KF_MVWS_9, NULL); + setkeybinding(MODKEY_SHIFT, XK_0, KF_MVWS_10, NULL); + setkeybinding(MODKEY_SHIFT, XK_F1, KF_MVWS_11, NULL); + setkeybinding(MODKEY_SHIFT, XK_F2, KF_MVWS_12, NULL); + setkeybinding(MODKEY_SHIFT, XK_F3, KF_MVWS_13, NULL); + setkeybinding(MODKEY_SHIFT, XK_F4, KF_MVWS_14, NULL); + setkeybinding(MODKEY_SHIFT, XK_F5, KF_MVWS_15, NULL); + setkeybinding(MODKEY_SHIFT, XK_F6, KF_MVWS_16, NULL); + setkeybinding(MODKEY_SHIFT, XK_F7, KF_MVWS_17, NULL); + setkeybinding(MODKEY_SHIFT, XK_F8, KF_MVWS_18, NULL); + setkeybinding(MODKEY_SHIFT, XK_F9, KF_MVWS_19, NULL); + setkeybinding(MODKEY_SHIFT, XK_F10, KF_MVWS_20, NULL); + setkeybinding(MODKEY_SHIFT, XK_F11, KF_MVWS_21, NULL); + setkeybinding(MODKEY_SHIFT, XK_F12, KF_MVWS_22, NULL); + setkeybinding(MODKEY_SHIFT, XK_slash, KF_NAME_WORKSPACE,NULL); + setkeybinding(MODKEY_SHIFT, XK_q, KF_QUIT, NULL); + setkeybinding(MODKEY_SHIFT, XK_r, KF_RAISE_TOGGLE,NULL); + setkeybinding(MODKEY, XK_q, KF_RESTART, NULL); + setkeybinding(MODKEY, XK_KP_End, KF_RG_1, NULL); + setkeybinding(MODKEY, XK_KP_Down, KF_RG_2, NULL); + setkeybinding(MODKEY, XK_KP_Next, KF_RG_3, NULL); + setkeybinding(MODKEY, XK_KP_Left, KF_RG_4, NULL); + setkeybinding(MODKEY, XK_KP_Begin, KF_RG_5, NULL); + setkeybinding(MODKEY, XK_KP_Right, KF_RG_6, NULL); + setkeybinding(MODKEY, XK_KP_Home, KF_RG_7, NULL); + setkeybinding(MODKEY, XK_KP_Up, KF_RG_8, NULL); + setkeybinding(MODKEY, XK_KP_Prior, KF_RG_9, NULL); + setkeybinding(MODKEY_SHIFT, XK_Right, KF_RG_NEXT, NULL); + setkeybinding(MODKEY_SHIFT, XK_Left, KF_RG_PREV, NULL); + setkeybinding(MODKEY, XK_f, KF_SEARCH_WIN, NULL); + setkeybinding(MODKEY, XK_slash, KF_SEARCH_WORKSPACE,NULL); + setkeybinding(MODKEY_SHIFT, XK_i, KF_SPAWN_CUSTOM,"initscr"); + setkeybinding(MODKEY_SHIFT, XK_Delete, KF_SPAWN_CUSTOM,"lock"); + setkeybinding(MODKEY, XK_p, KF_SPAWN_CUSTOM,"menu"); + setkeybinding(MODKEY, XK_s, KF_SPAWN_CUSTOM,"screenshot_all"); + setkeybinding(MODKEY_SHIFT, XK_s, KF_SPAWN_CUSTOM,"screenshot_wind"); + setkeybinding(MODKEY_SHIFT, XK_Return, KF_SPAWN_CUSTOM,"term"); setkeybinding(MODKEY_SHIFT, XK_comma, KF_STACK_INC, NULL); setkeybinding(MODKEY_SHIFT, XK_period, KF_STACK_DEC, NULL); + setkeybinding(MODKEY_SHIFT, XK_space, KF_STACK_RESET, NULL); setkeybinding(MODKEY, XK_Return, KF_SWAP_MAIN, NULL); - setkeybinding(MODKEY, XK_j, KF_FOCUS_NEXT, NULL); - setkeybinding(MODKEY, XK_k, KF_FOCUS_PREV, NULL); setkeybinding(MODKEY_SHIFT, XK_j, KF_SWAP_NEXT, NULL); setkeybinding(MODKEY_SHIFT, XK_k, KF_SWAP_PREV, NULL); - setkeybinding(MODKEY_SHIFT, XK_Return, KF_SPAWN_CUSTOM,"term"); - setkeybinding(MODKEY, XK_p, KF_SPAWN_CUSTOM,"menu"); - setkeybinding(MODKEY_SHIFT, XK_q, KF_QUIT, NULL); - setkeybinding(MODKEY, XK_q, KF_RESTART, NULL); - setkeybinding(MODKEY, XK_m, KF_FOCUS_MAIN, NULL); + setkeybinding(MODKEY_SHIFT, XK_w, KF_UNICONIFY, NULL); + setkeybinding(MODKEY_SHIFT, XK_v, KF_VERSION, NULL); + setkeybinding(MODKEY, XK_equal, KF_WIDTH_GROW, NULL); + setkeybinding(MODKEY, XK_minus, KF_WIDTH_SHRINK,NULL); + setkeybinding(MODKEY, XK_x, KF_WIND_DEL, NULL); + setkeybinding(MODKEY_SHIFT, XK_x, KF_WIND_KILL, NULL); setkeybinding(MODKEY, XK_1, KF_WS_1, NULL); setkeybinding(MODKEY, XK_2, KF_WS_2, NULL); setkeybinding(MODKEY, XK_3, KF_WS_3, NULL); @@ -6152,57 +6353,6 @@ setup_keys(void) setkeybinding(MODKEY, XK_Up, KF_WS_NEXT_ALL, NULL); setkeybinding(MODKEY, XK_Down, KF_WS_PREV_ALL, NULL); setkeybinding(MODKEY, XK_a, KF_WS_PRIOR, NULL); - setkeybinding(MODKEY_SHIFT, XK_Right, KF_SCREEN_NEXT, NULL); - setkeybinding(MODKEY_SHIFT, XK_Left, KF_SCREEN_PREV, NULL); - setkeybinding(MODKEY_SHIFT, XK_1, KF_MVWS_1, NULL); - setkeybinding(MODKEY_SHIFT, XK_2, KF_MVWS_2, NULL); - setkeybinding(MODKEY_SHIFT, XK_3, KF_MVWS_3, NULL); - setkeybinding(MODKEY_SHIFT, XK_4, KF_MVWS_4, NULL); - setkeybinding(MODKEY_SHIFT, XK_5, KF_MVWS_5, NULL); - setkeybinding(MODKEY_SHIFT, XK_6, KF_MVWS_6, NULL); - setkeybinding(MODKEY_SHIFT, XK_7, KF_MVWS_7, NULL); - setkeybinding(MODKEY_SHIFT, XK_8, KF_MVWS_8, NULL); - setkeybinding(MODKEY_SHIFT, XK_9, KF_MVWS_9, NULL); - setkeybinding(MODKEY_SHIFT, XK_0, KF_MVWS_10, NULL); - setkeybinding(MODKEY_SHIFT, XK_F1, KF_MVWS_11, NULL); - setkeybinding(MODKEY_SHIFT, XK_F2, KF_MVWS_12, NULL); - setkeybinding(MODKEY_SHIFT, XK_F3, KF_MVWS_13, NULL); - setkeybinding(MODKEY_SHIFT, XK_F4, KF_MVWS_14, NULL); - setkeybinding(MODKEY_SHIFT, XK_F5, KF_MVWS_15, NULL); - setkeybinding(MODKEY_SHIFT, XK_F6, KF_MVWS_16, NULL); - setkeybinding(MODKEY_SHIFT, XK_F7, KF_MVWS_17, NULL); - setkeybinding(MODKEY_SHIFT, XK_F8, KF_MVWS_18, NULL); - setkeybinding(MODKEY_SHIFT, XK_F9, KF_MVWS_19, NULL); - setkeybinding(MODKEY_SHIFT, XK_F10, KF_MVWS_20, NULL); - setkeybinding(MODKEY_SHIFT, XK_F11, KF_MVWS_21, NULL); - setkeybinding(MODKEY_SHIFT, XK_F12, KF_MVWS_22, NULL); - setkeybinding(MODKEY, XK_b, KF_BAR_TOGGLE, NULL); - setkeybinding(MODKEY_SHIFT, XK_b, KF_BAR_TOGGLE_WS,NULL); - setkeybinding(MODKEY, XK_Tab, KF_FOCUS_NEXT, NULL); - setkeybinding(MODKEY_SHIFT, XK_Tab, KF_FOCUS_PREV, NULL); - setkeybinding(MODKEY_SHIFT, XK_x, KF_WIND_KILL, NULL); - setkeybinding(MODKEY, XK_x, KF_WIND_DEL, NULL); - setkeybinding(MODKEY, XK_s, KF_SPAWN_CUSTOM,"screenshot_all"); - setkeybinding(MODKEY_SHIFT, XK_s, KF_SPAWN_CUSTOM,"screenshot_wind"); - setkeybinding(MODKEY, XK_t, KF_FLOAT_TOGGLE,NULL); - setkeybinding(MODKEY_SHIFT, XK_v, KF_VERSION, NULL); - setkeybinding(MODKEY_SHIFT, XK_Delete, KF_SPAWN_CUSTOM,"lock"); - setkeybinding(MODKEY_SHIFT, XK_i, KF_SPAWN_CUSTOM,"initscr"); - setkeybinding(MODKEY, XK_w, KF_ICONIFY, NULL); - setkeybinding(MODKEY_SHIFT, XK_w, KF_UNICONIFY, NULL); - setkeybinding(MODKEY_SHIFT, XK_r, KF_RAISE_TOGGLE,NULL); - setkeybinding(MODKEY, XK_v, KF_BUTTON2, NULL); - setkeybinding(MODKEY, XK_equal, KF_WIDTH_GROW, NULL); - setkeybinding(MODKEY, XK_minus, KF_WIDTH_SHRINK,NULL); - setkeybinding(MODKEY_SHIFT, XK_equal, KF_HEIGHT_GROW,NULL); - setkeybinding(MODKEY_SHIFT, XK_minus, KF_HEIGHT_SHRINK,NULL); - setkeybinding(MODKEY, XK_bracketleft, KF_MOVE_LEFT,NULL); - setkeybinding(MODKEY, XK_bracketright,KF_MOVE_RIGHT,NULL); - setkeybinding(MODKEY_SHIFT, XK_bracketleft, KF_MOVE_UP, NULL); - setkeybinding(MODKEY_SHIFT, XK_bracketright,KF_MOVE_DOWN,NULL); - setkeybinding(MODKEY_SHIFT, XK_slash, KF_NAME_WORKSPACE,NULL); - setkeybinding(MODKEY, XK_slash, KF_SEARCH_WORKSPACE,NULL); - setkeybinding(MODKEY, XK_f, KF_SEARCH_WIN, NULL); #ifdef SWM_DEBUG setkeybinding(MODKEY_SHIFT, XK_d, KF_DUMPWINS, NULL); #endif @@ -7940,7 +8090,7 @@ void enternotify(xcb_enter_notify_event_t *e) { struct ws_win *win; - struct swm_region *old_r, *r; + struct swm_region *r; DNPRINTF(SWM_D_FOCUS, "enternotify: time: %u, win (x,y): 0x%x " "(%d,%d), mode: %s(%d), detail: %s(%d), root (x,y): 0x%x (%d,%d), " @@ -7969,29 +8119,17 @@ enternotify(xcb_enter_notify_event_t *e) return; } - if (TAILQ_EMPTY(&r->ws->winlist)) { - old_r = root_to_region(e->root, SWM_CK_FOCUS); - if (old_r && old_r != r) - unfocus_win(old_r->ws->focus); - - xcb_set_input_focus(conn, - XCB_INPUT_FOCUS_PARENT, e->root, e->time); - - /* Clear bar since empty. */ - bar_draw(); - - focus_flush(); - } + focus_region(r); } else { DNPRINTF(SWM_D_EVENT, "enternotify: window is NULL; " "ignoring\n"); + return; } - return; + } else { + focus_win(get_focus_magic(win)); } - focus_win(get_focus_magic(win)); - - xcb_flush(conn); + focus_flush(); } #ifdef SWM_DEBUG @@ -8084,6 +8222,35 @@ out: DNPRINTF(SWM_D_EVENT, "maprequest: done.\n"); } +void +motionnotify(xcb_motion_notify_event_t *e) +{ + struct swm_region *r; + int i, num_screens; + + DNPRINTF(SWM_D_FOCUS, "motionnotify: time: %u, win (x,y): 0x%x " + "(%d,%d), detail: %s(%d), root (x,y): 0x%x (%d,%d), " + "child: 0x%x, same_screen_focus: %s, state: %d\n", + e->time, e->event, e->event_x, e->event_y, + get_notify_detail_label(e->detail), e->detail, + e->root, e->root_x, e->root_y, e->child, + YESNO(e->same_screen), e->state); + + last_event_time = e->time; + + num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); + for (i = 0; i < num_screens; i++) + if (screens[i].root == e->root) + break; + + TAILQ_FOREACH(r, &screens[i].rl, entry) + if (X(r) <= e->root_x && e->root_x < MAX_X(r) && + Y(r) <= e->root_y && e->root_y < MAX_Y(r)) + break; + + focus_region(r); +} + #ifdef SWM_DEBUG char * get_atom_name(xcb_atom_t atom) @@ -8393,6 +8560,7 @@ new_region(struct swm_screen *s, int x, int y, int w, int h) struct swm_region *r, *n; struct workspace *ws = NULL; int i; + uint32_t wa[1]; DNPRINTF(SWM_D_MISC, "new region: screen[%d]:%dx%d+%d+%d\n", s->idx, w, h, x, y); @@ -8402,14 +8570,13 @@ new_region(struct swm_screen *s, int x, int y, int w, int h) while (n) { r = n; n = TAILQ_NEXT(r, entry); - if (X(r) < (x + w) && - (X(r) + WIDTH(r)) > x && - Y(r) < (y + h) && - (Y(r) + HEIGHT(r)) > y) { + if (X(r) < (x + w) && (X(r) + WIDTH(r)) > x && + Y(r) < (y + h) && (Y(r) + HEIGHT(r)) > y) { if (r->ws->r != NULL) r->ws->old_r = r->ws->r; r->ws->r = NULL; bar_cleanup(r); + xcb_destroy_window(conn, r->id); TAILQ_REMOVE(&s->rl, r, entry); TAILQ_INSERT_TAIL(&s->orl, r, entry); } @@ -8460,6 +8627,17 @@ new_region(struct swm_screen *s, int x, int y, int w, int h) ws->r = r; outputs++; TAILQ_INSERT_TAIL(&s->rl, r, entry); + + /* Invisible region window to detect pointer events on empty regions. */ + r->id = xcb_generate_id(conn); + wa[0] = XCB_EVENT_MASK_POINTER_MOTION | + XCB_EVENT_MASK_POINTER_MOTION_HINT; + + xcb_create_window(conn, XCB_COPY_FROM_PARENT, r->id, r->s->root, + X(r), Y(r), WIDTH(r), HEIGHT(r), 0, XCB_WINDOW_CLASS_INPUT_ONLY, + XCB_COPY_FROM_PARENT, XCB_CW_EVENT_MASK, wa); + + xcb_map_window(conn, r->id); } void @@ -8491,6 +8669,7 @@ scan_xrandr(int i) while ((r = TAILQ_FIRST(&screens[i].rl)) != NULL) { r->ws->old_r = r->ws->r = NULL; bar_cleanup(r); + xcb_destroy_window(conn, r->id); TAILQ_REMOVE(&screens[i].rl, r, entry); TAILQ_INSERT_TAIL(&screens[i].orl, r, entry); } @@ -8572,11 +8751,14 @@ screenchange(xcb_randr_screen_change_notify_event_t *e) TAILQ_FOREACH(r, &screens[i].rl, entry) bar_setup(r); stack(); + bar_draw(); + focus_flush(); } void grab_windows(void) { + struct swm_region *r = NULL; xcb_window_t *wins = NULL, trans; int no; int i, j, num_screens; @@ -8584,8 +8766,8 @@ grab_windows(void) xcb_query_tree_cookie_t qtc; xcb_query_tree_reply_t *qtr; - xcb_get_window_attributes_cookie_t c; - xcb_get_window_attributes_reply_t *r; + xcb_get_window_attributes_cookie_t gac; + xcb_get_window_attributes_reply_t *gar; xcb_get_property_cookie_t pc; DNPRINTF(SWM_D_INIT, "grab_windows: begin\n"); @@ -8601,17 +8783,30 @@ grab_windows(void) /* normal windows */ DNPRINTF(SWM_D_INIT, "grab_windows: grab top level windows.\n"); for (j = 0; j < no; j++) { - c = xcb_get_window_attributes(conn, wins[j]); - r = xcb_get_window_attributes_reply(conn, c, NULL); - if (!r) { + TAILQ_FOREACH(r, &screens[i].rl, entry) { + if (r->id == wins[j]) { + DNPRINTF(SWM_D_INIT, "grab_windows: " + "skip %#x; region input window.\n", + wins[j]); + break; + } + } + + if (r) + continue; + + gac = xcb_get_window_attributes(conn, wins[j]); + gar = xcb_get_window_attributes_reply(conn, gac, NULL); + if (!gar) { DNPRINTF(SWM_D_INIT, "grab_windows: skip %#x; " "doesn't exist.\n", wins[j]); continue; } - if (r->override_redirect) { + + if (gar->override_redirect) { DNPRINTF(SWM_D_INIT, "grab_windows: skip %#x; " "override_redirect set.\n", wins[j]); - free(r); + free(gar); continue; } @@ -8620,42 +8815,43 @@ grab_windows(void) &trans, NULL)) { DNPRINTF(SWM_D_INIT, "grab_windows: skip %#x; " "is transient for %#x.\n", wins[j], trans); - free(r); + free(gar); continue; } state = getstate(wins[j]); manage = state != XCB_ICCCM_WM_STATE_WITHDRAWN; - mapped = r->map_state != XCB_MAP_STATE_UNMAPPED; + mapped = gar->map_state != XCB_MAP_STATE_UNMAPPED; if (mapped || manage) manage_window(wins[j], mapped); - free(r); + free(gar); } /* transient windows */ DNPRINTF(SWM_D_INIT, "grab_windows: grab transient windows.\n"); for (j = 0; j < no; j++) { - c = xcb_get_window_attributes(conn, wins[j]); - r = xcb_get_window_attributes_reply(conn, c, NULL); - if (!r) { + gac = xcb_get_window_attributes(conn, wins[j]); + gar = xcb_get_window_attributes_reply(conn, gac, NULL); + if (!gar) { DNPRINTF(SWM_D_INIT, "grab_windows: skip %#x; " "doesn't exist.\n", wins[j]); continue; } - if (r->override_redirect) { + + if (gar->override_redirect) { DNPRINTF(SWM_D_INIT, "grab_windows: skip %#x; " "override_redirect set.\n", wins[j]); - free(r); + free(gar); continue; } state = getstate(wins[j]); manage = state != XCB_ICCCM_WM_STATE_WITHDRAWN; - mapped = r->map_state != XCB_MAP_STATE_UNMAPPED; + mapped = gar->map_state != XCB_MAP_STATE_UNMAPPED; pc = xcb_icccm_get_wm_transient_for(conn, wins[j]); if (xcb_icccm_get_wm_transient_for_reply(conn, pc, &trans, NULL) && manage) manage_window(wins[j], mapped); - free(r); + free(gar); } free(qtr); } @@ -8700,6 +8896,8 @@ setup_screens(void) for (i = 0; i < num_screens; i++) { DNPRINTF(SWM_D_WS, "setup_screens: init screen: %d\n", i); screens[i].idx = i; + screens[i].r_focus = NULL; + TAILQ_INIT(&screens[i].rl); TAILQ_INIT(&screens[i].orl); if ((screen = get_screen(i)) == NULL) @@ -8895,7 +9093,7 @@ event_handle(xcb_generic_event_t *evt) EVENT(XCB_MAP_NOTIFY, mapnotify); EVENT(XCB_MAP_REQUEST, maprequest); EVENT(XCB_MAPPING_NOTIFY, mappingnotify); - /*EVENT(XCB_MOTION_NOTIFY, );*/ + EVENT(XCB_MOTION_NOTIFY, motionnotify); /*EVENT(XCB_NO_EXPOSURE, );*/ EVENT(XCB_PROPERTY_NOTIFY, propertynotify); /*EVENT(XCB_REPARENT_NOTIFY, );*/ @@ -8914,11 +9112,10 @@ event_handle(xcb_generic_event_t *evt) int main(int argc, char *argv[]) { - struct swm_region *r, *rr; - struct ws_win *winfocus = NULL; + struct swm_region *r; char conf[PATH_MAX], *cfile = NULL; struct stat sb; - int xfd, i, num_screens; + int xfd, i, num_screens, startup = 1; struct sigaction sact; xcb_generic_event_t *evt; struct timeval tv; @@ -9044,14 +9241,12 @@ noconfig: /* setup all bars */ num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); for (i = 0; i < num_screens; i++) - TAILQ_FOREACH(r, &screens[i].rl, entry) { - if (winfocus == NULL) - winfocus = TAILQ_FIRST(&r->ws->winlist); + TAILQ_FOREACH(r, &screens[i].rl, entry) bar_setup(r); - } grabkeys(); stack(); + bar_draw(); xcb_ungrab_server(conn); xcb_flush(conn); @@ -9067,18 +9262,17 @@ noconfig: } /* If just (re)started, set default focus if needed. */ - if (winfocus && focus_mode != SWM_FOCUS_FOLLOW) { - rr = winfocus->ws->r; - if (rr == NULL) { - /* not a visible window */ - winfocus = NULL; + if (startup) { + startup = 0; + + if (focus_mode != SWM_FOCUS_FOLLOW) { + r = TAILQ_FIRST(&screens[0].rl); + if (r) { + focus_region(r); + focus_flush(); + } continue; } - - focus_win(get_region_focus(rr)); - focus_flush(); - winfocus = NULL; - continue; } FD_ZERO(&rd); diff --git a/spectrwm_cz.conf b/spectrwm_cz.conf index 802e75e..654f43d 100644 --- a/spectrwm_cz.conf +++ b/spectrwm_cz.conf @@ -46,8 +46,6 @@ bind[ws_prev] = MOD+Left bind[ws_next_all] = MOD+Up bind[ws_prev_all] = MOD+Down bind[ws_prior] = MOD+a -bind[screen_next] = MOD+Shift+Right -bind[screen_prev] = MOD+Shift+Left bind[mvws_1] = MOD+Shift+plus bind[mvws_2] = MOD+Shift+ecaron bind[mvws_3] = MOD+Shift+scaron @@ -70,6 +68,26 @@ 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[rg_1] = MOD+KP_End +bind[rg_2] = MOD+KP_Down +bind[rg_3] = MOD+KP_Next +bind[rg_4] = MOD+KP_Left +bind[rg_5] = MOD+KP_Begin +bind[rg_6] = MOD+KP_Right +bind[rg_7] = MOD+KP_Home +bind[rg_8] = MOD+KP_Up +bind[rg_9] = MOD+KP_Prior +bind[rg_next] = MOD+Shift+Right +bind[rg_prev] = MOD+Shift+Left +bind[mvrg_1] = MOD+Shift+KP_End +bind[mvrg_2] = MOD+Shift+KP_Down +bind[mvrg_3] = MOD+Shift+KP_Next +bind[mvrg_4] = MOD+Shift+KP_Left +bind[mvrg_5] = MOD+Shift+KP_Begin +bind[mvrg_6] = MOD+Shift+KP_Right +bind[mvrg_7] = MOD+Shift+KP_Home +bind[mvrg_8] = MOD+Shift+KP_Up +bind[mvrg_9] = MOD+Shift+KP_Prior bind[bar_toggle] = MOD+b bind[focus_next] = MOD+Tab bind[focus_prev] = MOD+Shift+Tab diff --git a/spectrwm_es.conf b/spectrwm_es.conf index 1eaa404..351a2e5 100644 --- a/spectrwm_es.conf +++ b/spectrwm_es.conf @@ -46,8 +46,6 @@ bind[ws_prev] = MOD+Left bind[ws_next_all] = MOD+Up bind[ws_prev_all] = MOD+Down bind[ws_prior] = MOD+a -bind[screen_next] = MOD+Shift+Right -bind[screen_prev] = MOD+Shift+Left bind[mvws_1] = MOD+Shift+1 bind[mvws_2] = MOD+Shift+2 bind[mvws_3] = MOD+Shift+3 @@ -70,6 +68,26 @@ 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[rg_1] = MOD+KP_End +bind[rg_2] = MOD+KP_Down +bind[rg_3] = MOD+KP_Next +bind[rg_4] = MOD+KP_Left +bind[rg_5] = MOD+KP_Begin +bind[rg_6] = MOD+KP_Right +bind[rg_7] = MOD+KP_Home +bind[rg_8] = MOD+KP_Up +bind[rg_9] = MOD+KP_Prior +bind[rg_next] = MOD+Shift+Right +bind[rg_prev] = MOD+Shift+Left +bind[mvrg_1] = MOD+Shift+KP_End +bind[mvrg_2] = MOD+Shift+KP_Down +bind[mvrg_3] = MOD+Shift+KP_Next +bind[mvrg_4] = MOD+Shift+KP_Left +bind[mvrg_5] = MOD+Shift+KP_Begin +bind[mvrg_6] = MOD+Shift+KP_Right +bind[mvrg_7] = MOD+Shift+KP_Home +bind[mvrg_8] = MOD+Shift+KP_Up +bind[mvrg_9] = MOD+Shift+KP_Prior bind[bar_toggle] = MOD+b bind[focus_next] = MOD+Tab bind[focus_prev] = MOD+Shift+Tab diff --git a/spectrwm_fr.conf b/spectrwm_fr.conf index ace7e2c..9fc9778 100644 --- a/spectrwm_fr.conf +++ b/spectrwm_fr.conf @@ -46,8 +46,6 @@ bind[ws_prev] = MOD+Left bind[ws_next_all] = MOD+Up bind[ws_prev_all] = MOD+Down bind[ws_prior] = MOD+a -bind[screen_next] = MOD+Shift+Right -bind[screen_prev] = MOD+Shift+Left bind[mvws_1] = MOD+Shift+ampersand bind[mvws_2] = MOD+Shift+eacute bind[mvws_3] = MOD+Shift+quotedbl @@ -70,6 +68,26 @@ 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[rg_1] = MOD+KP_End +bind[rg_2] = MOD+KP_Down +bind[rg_3] = MOD+KP_Next +bind[rg_4] = MOD+KP_Left +bind[rg_5] = MOD+KP_Begin +bind[rg_6] = MOD+KP_Right +bind[rg_7] = MOD+KP_Home +bind[rg_8] = MOD+KP_Up +bind[rg_9] = MOD+KP_Prior +bind[rg_next] = MOD+Shift+Right +bind[rg_prev] = MOD+Shift+Left +bind[mvrg_1] = MOD+Shift+KP_End +bind[mvrg_2] = MOD+Shift+KP_Down +bind[mvrg_3] = MOD+Shift+KP_Next +bind[mvrg_4] = MOD+Shift+KP_Left +bind[mvrg_5] = MOD+Shift+KP_Begin +bind[mvrg_6] = MOD+Shift+KP_Right +bind[mvrg_7] = MOD+Shift+KP_Home +bind[mvrg_8] = MOD+Shift+KP_Up +bind[mvrg_9] = MOD+Shift+KP_Prior bind[bar_toggle] = MOD+b bind[focus_next] = MOD+Tab bind[focus_prev] = MOD+Shift+Tab diff --git a/spectrwm_fr_ch.conf b/spectrwm_fr_ch.conf index 5923a1c..264f611 100644 --- a/spectrwm_fr_ch.conf +++ b/spectrwm_fr_ch.conf @@ -46,8 +46,6 @@ bind[ws_prev] = MOD+Left bind[ws_next_all] = MOD+Up bind[ws_prev_all] = MOD+Down bind[ws_prior] = MOD+a -bind[screen_next] = MOD+Shift+Right -bind[screen_prev] = MOD+Shift+Left bind[mvws_1] = MOD+Shift+1 bind[mvws_2] = MOD+Shift+2 bind[mvws_3] = MOD+Shift+3 @@ -70,6 +68,26 @@ 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[rg_1] = MOD+KP_End +bind[rg_2] = MOD+KP_Down +bind[rg_3] = MOD+KP_Next +bind[rg_4] = MOD+KP_Left +bind[rg_5] = MOD+KP_Begin +bind[rg_6] = MOD+KP_Right +bind[rg_7] = MOD+KP_Home +bind[rg_8] = MOD+KP_Up +bind[rg_9] = MOD+KP_Prior +bind[rg_next] = MOD+Shift+Right +bind[rg_prev] = MOD+Shift+Left +bind[mvrg_1] = MOD+Shift+KP_End +bind[mvrg_2] = MOD+Shift+KP_Down +bind[mvrg_3] = MOD+Shift+KP_Next +bind[mvrg_4] = MOD+Shift+KP_Left +bind[mvrg_5] = MOD+Shift+KP_Begin +bind[mvrg_6] = MOD+Shift+KP_Right +bind[mvrg_7] = MOD+Shift+KP_Home +bind[mvrg_8] = MOD+Shift+KP_Up +bind[mvrg_9] = MOD+Shift+KP_Prior bind[bar_toggle] = MOD+b bind[focus_next] = MOD+Tab bind[focus_prev] = MOD+Shift+Tab diff --git a/spectrwm_se.conf b/spectrwm_se.conf index 1234670..7293925 100644 --- a/spectrwm_se.conf +++ b/spectrwm_se.conf @@ -46,8 +46,6 @@ bind[ws_prev] = MOD+Left bind[ws_next_all] = MOD+Up bind[ws_prev_all] = MOD+Down bind[ws_prior] = MOD+a -bind[screen_next] = MOD+Shift+Right -bind[screen_prev] = MOD+Shift+Left bind[mvws_1] = MOD+Shift+1 bind[mvws_2] = MOD+Shift+2 bind[mvws_3] = MOD+Shift+3 @@ -70,6 +68,26 @@ 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[rg_1] = MOD+KP_End +bind[rg_2] = MOD+KP_Down +bind[rg_3] = MOD+KP_Next +bind[rg_4] = MOD+KP_Left +bind[rg_5] = MOD+KP_Begin +bind[rg_6] = MOD+KP_Right +bind[rg_7] = MOD+KP_Home +bind[rg_8] = MOD+KP_Up +bind[rg_9] = MOD+KP_Prior +bind[rg_next] = MOD+Shift+Right +bind[rg_prev] = MOD+Shift+Left +bind[mvrg_1] = MOD+Shift+KP_End +bind[mvrg_2] = MOD+Shift+KP_Down +bind[mvrg_3] = MOD+Shift+KP_Next +bind[mvrg_4] = MOD+Shift+KP_Left +bind[mvrg_5] = MOD+Shift+KP_Begin +bind[mvrg_6] = MOD+Shift+KP_Right +bind[mvrg_7] = MOD+Shift+KP_Home +bind[mvrg_8] = MOD+Shift+KP_Up +bind[mvrg_9] = MOD+Shift+KP_Prior bind[bar_toggle] = MOD+b bind[focus_next] = MOD+Tab bind[focus_prev] = MOD+Shift+Tab diff --git a/spectrwm_us.conf b/spectrwm_us.conf index 9cdcaed..89b4ebd 100644 --- a/spectrwm_us.conf +++ b/spectrwm_us.conf @@ -46,8 +46,6 @@ bind[ws_prev] = MOD+Left bind[ws_next_all] = MOD+Up bind[ws_prev_all] = MOD+Down bind[ws_prior] = MOD+a -bind[screen_next] = MOD+Shift+Right -bind[screen_prev] = MOD+Shift+Left bind[mvws_1] = MOD+Shift+1 bind[mvws_2] = MOD+Shift+2 bind[mvws_3] = MOD+Shift+3 @@ -70,6 +68,26 @@ 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[rg_1] = MOD+KP_End +bind[rg_2] = MOD+KP_Down +bind[rg_3] = MOD+KP_Next +bind[rg_4] = MOD+KP_Left +bind[rg_5] = MOD+KP_Begin +bind[rg_6] = MOD+KP_Right +bind[rg_7] = MOD+KP_Home +bind[rg_8] = MOD+KP_Up +bind[rg_9] = MOD+KP_Prior +bind[rg_next] = MOD+Shift+Right +bind[rg_prev] = MOD+Shift+Left +bind[mvrg_1] = MOD+Shift+KP_End +bind[mvrg_2] = MOD+Shift+KP_Down +bind[mvrg_3] = MOD+Shift+KP_Next +bind[mvrg_4] = MOD+Shift+KP_Left +bind[mvrg_5] = MOD+Shift+KP_Begin +bind[mvrg_6] = MOD+Shift+KP_Right +bind[mvrg_7] = MOD+Shift+KP_Home +bind[mvrg_8] = MOD+Shift+KP_Up +bind[mvrg_9] = MOD+Shift+KP_Prior bind[bar_toggle] = MOD+b bind[focus_next] = MOD+Tab bind[focus_prev] = MOD+Shift+Tab