shift-tools-scratchpads.c - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
shift-tools-scratchpads.c (4274B) | |
--- | |
1 /* Sends a window to the next/prev tag */ | |
2 void | |
3 shifttag(const Arg *arg) | |
4 { | |
5 Arg shifted; | |
6 shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; | |
7 | |
8 | |
9 if (arg->i > 0) /* left circular shift */ | |
10 shifted.ui = ((shifted.ui << arg->i) | (shifted.ui >> (L… | |
11 else /* right circular shift */ | |
12 shifted.ui = (shifted.ui >> (- arg->i) | shifted.ui << (… | |
13 tag(&shifted); | |
14 } | |
15 /* Sends a window to the next/prev tag that has a client, else it moves … | |
16 void | |
17 shifttagclients(const Arg *arg) | |
18 { | |
19 | |
20 Arg shifted; | |
21 Client *c; | |
22 unsigned int tagmask = 0; | |
23 shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; | |
24 | |
25 for (c = selmon->clients; c; c = c->next) | |
26 if (!(c->tags & SPTAGMASK)) | |
27 tagmask = tagmask | c->tags; | |
28 | |
29 | |
30 if (arg->i > 0) /* left circular shift */ | |
31 do { | |
32 shifted.ui = (shifted.ui << arg->i) | |
33 | (shifted.ui >> (LENGTH(tags) - arg->i)); | |
34 shifted.ui &= ~SPTAGMASK; | |
35 } while (tagmask && !(shifted.ui & tagmask)); | |
36 else /* right circular shift */ | |
37 do { | |
38 shifted.ui = (shifted.ui >> (- arg->i) | |
39 | shifted.ui << (LENGTH(tags) + arg->i)); | |
40 shifted.ui &= ~SPTAGMASK; | |
41 } while (tagmask && !(shifted.ui & tagmask)); | |
42 tag(&shifted); | |
43 } | |
44 /* Navigate to the next/prev tag */ | |
45 void | |
46 shiftview(const Arg *arg) | |
47 { | |
48 Arg shifted; | |
49 shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; | |
50 | |
51 if (arg->i > 0) {/* left circular shift */ | |
52 shifted.ui = (shifted.ui << arg->i) | (shifted.ui >> (LE… | |
53 shifted.ui &= ~SPTAGMASK; | |
54 } else { /* right circular shift */ | |
55 shifted.ui = (shifted.ui >> (- arg->i) | shifted.ui << (… | |
56 shifted.ui &= ~SPTAGMASK; | |
57 } | |
58 view(&shifted); | |
59 } | |
60 /* Navigate to the next/prev tag that has a client, else moves it to the… | |
61 void | |
62 shiftviewclients(const Arg *arg) | |
63 { | |
64 Arg shifted; | |
65 Client *c; | |
66 unsigned int tagmask = 0; | |
67 shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; | |
68 | |
69 for (c = selmon->clients; c; c = c->next) | |
70 if (!(c->tags & SPTAGMASK)) | |
71 tagmask = tagmask | c->tags; | |
72 | |
73 | |
74 if (arg->i > 0) /* left circular shift */ | |
75 do { | |
76 shifted.ui = (shifted.ui << arg->i) | |
77 | (shifted.ui >> (LENGTH(tags) - arg->i)); | |
78 shifted.ui &= ~SPTAGMASK; | |
79 } while (tagmask && !(shifted.ui & tagmask)); | |
80 else /* right circular shift */ | |
81 do { | |
82 shifted.ui = (shifted.ui >> (- arg->i) | |
83 | shifted.ui << (LENGTH(tags) + arg->i)); | |
84 shifted.ui &= ~SPTAGMASK; | |
85 } while (tagmask && !(shifted.ui & tagmask)); | |
86 view(&shifted); | |
87 } | |
88 /* move the current active window to the next/prev tag and view it. More… | |
89 void | |
90 shiftboth(const Arg *arg) | |
91 { | |
92 Arg shifted; | |
93 shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; | |
94 | |
95 if (arg->i > 0) /* left circular shift */ | |
96 shifted.ui = ((shifted.ui << arg->i) | (shifted.ui >> (L… | |
97 else /* right circular shift */ | |
98 shifted.ui = ((shifted.ui >> (- arg->i) | shifted.ui << … | |
99 tag(&shifted); | |
100 view(&shifted); | |
101 } | |
102 //helper function for shiftswaptags found on: | |
103 //https://github.com/moizifty/DWM-Build/blob/65379c62640788881486401a0d8… | |
104 // modified to work with scratchpad | |
105 void | |
106 swaptags(const Arg *arg) | |
107 { | |
108 Client *c; | |
109 unsigned int newtag = arg->ui & TAGMASK; | |
110 unsigned int curtag = selmon->tagset[selmon->seltags] & ~SPTAGMA… | |
111 | |
112 if (newtag == curtag || !curtag || (curtag & (curtag-1))) | |
113 return; | |
114 | |
115 for (c = selmon->clients; c != NULL; c = c->next) { | |
116 if ((c->tags & newtag) || (c->tags & curtag)) | |
117 c->tags ^= curtag ^ newtag; | |
118 | |
119 if (!c->tags) | |
120 c->tags = newtag; | |
121 } | |
122 | |
123 //move to the swaped tag | |
124 //selmon->tagset[selmon->seltags] = newtag; | |
125 | |
126 focus(NULL); | |
127 arrange(selmon); | |
128 } | |
129 /* swaps "tags" (all the clients) with the next/prev tag. */ | |
130 void | |
131 shiftswaptags(const Arg *arg) | |
132 { | |
133 Arg shifted; | |
134 shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; | |
135 | |
136 if (arg->i > 0) /* left circular shift */ | |
137 shifted.ui = ((shifted.ui << arg->i) | (shifted.ui >> (L… | |
138 else /* right circular shift */ | |
139 shifted.ui = ((shifted.ui >> (- arg->i) | shifted.ui << … | |
140 swaptags(&shifted); | |
141 // uncomment if you also want to "go" (view) the tag where the t… | |
142 //view(&shifted); | |
143 } |