mirror of
https://github.com/mintycube/dwm.git
synced 2024-10-22 14:05:45 +02:00
Adding nametag patch
This commit is contained in:
parent
91cb32c3ed
commit
c438eabdc2
@ -19,6 +19,8 @@ Browsing patches? There is a [map of patches](https://coggle.it/diagram/X9IiSSM6
|
|||||||
|
|
||||||
### Changelog:
|
### Changelog:
|
||||||
|
|
||||||
|
2022-08-12 - Added the nametag patch
|
||||||
|
|
||||||
2022-08-02 - Added the bidi patch
|
2022-08-02 - Added the bidi patch
|
||||||
|
|
||||||
2022-07-05 - Added the tagpreview patch
|
2022-07-05 - Added the tagpreview patch
|
||||||
@ -528,6 +530,9 @@ Browsing patches? There is a [map of patches](https://coggle.it/diagram/X9IiSSM6
|
|||||||
- [movestack](https://dwm.suckless.org/patches/movestack/)
|
- [movestack](https://dwm.suckless.org/patches/movestack/)
|
||||||
- allows you to move clients around in the stack and swap them with the master
|
- allows you to move clients around in the stack and swap them with the master
|
||||||
|
|
||||||
|
- [nametag](https://dwm.suckless.org/patches/nametag/)
|
||||||
|
- allows the names of tags to be changed during runtime
|
||||||
|
|
||||||
- [netclientliststacking](https://github.com/bakkeby/patches/wiki/netclientliststacking)
|
- [netclientliststacking](https://github.com/bakkeby/patches/wiki/netclientliststacking)
|
||||||
- adds support for the \_NET\_CLIENT\_LIST\_STACKING atom, needed by certain applications
|
- adds support for the \_NET\_CLIENT\_LIST\_STACKING atom, needed by certain applications
|
||||||
like the Zoom video conferencing application
|
like the Zoom video conferencing application
|
||||||
|
32
config.def.h
32
config.def.h
@ -106,6 +106,22 @@ static const unsigned int ulinevoffset = 0; /* how far above the bottom of t
|
|||||||
static const int ulineall = 0; /* 1 to show underline on all tags, 0 for just the active ones */
|
static const int ulineall = 0; /* 1 to show underline on all tags, 0 for just the active ones */
|
||||||
#endif // BAR_UNDERLINETAGS_PATCH
|
#endif // BAR_UNDERLINETAGS_PATCH
|
||||||
|
|
||||||
|
#if NAMETAG_PATCH
|
||||||
|
#if NAMETAG_PREPEND_PATCH
|
||||||
|
/* The format in which the tag is written when named. E.g. %d: %.12s will write the tag number
|
||||||
|
* followed the first 12 characters of the given string. You can also just use "%d: %s" here. */
|
||||||
|
#define NAMETAG_FORMAT "%d: %.12s"
|
||||||
|
#else
|
||||||
|
#define NAMETAG_FORMAT "%s"
|
||||||
|
#endif // NAMETAG_PREPEND_PATCH
|
||||||
|
/* The maximum amount of bytes reserved for each tag text. */
|
||||||
|
#define MAX_TAGLEN 16
|
||||||
|
/* The command to run (via popen). This can be tailored by adding a prompt, passing other command
|
||||||
|
* line arguments or providing name options. Optionally you can use other dmenu like alternatives
|
||||||
|
* like rofi -dmenu. */
|
||||||
|
#define NAMETAG_COMMAND "dmenu < /dev/null"
|
||||||
|
#endif // NAMETAG_PATCH
|
||||||
|
|
||||||
/* Indicators: see patch/bar_indicators.h for options */
|
/* Indicators: see patch/bar_indicators.h for options */
|
||||||
static int tagindicatortype = INDICATOR_TOP_LEFT_SQUARE;
|
static int tagindicatortype = INDICATOR_TOP_LEFT_SQUARE;
|
||||||
static int tiledindicatortype = INDICATOR_NONE;
|
static int tiledindicatortype = INDICATOR_NONE;
|
||||||
@ -411,7 +427,12 @@ static Sp scratchpads[] = {
|
|||||||
* until it an icon matches. Similarly if there are two tag icons then it would alternate between
|
* until it an icon matches. Similarly if there are two tag icons then it would alternate between
|
||||||
* them. This works seamlessly with alternative tags and alttagsdecoration patches.
|
* them. This works seamlessly with alternative tags and alttagsdecoration patches.
|
||||||
*/
|
*/
|
||||||
static char *tagicons[][NUMTAGS] = {
|
#if NAMETAG_PATCH
|
||||||
|
static char tagicons[][NUMTAGS][MAX_TAGLEN] =
|
||||||
|
#else
|
||||||
|
static char *tagicons[][NUMTAGS] =
|
||||||
|
#endif // NAMETAG_PATCH
|
||||||
|
{
|
||||||
[DEFAULT_TAGS] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" },
|
[DEFAULT_TAGS] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" },
|
||||||
[ALTERNATIVE_TAGS] = { "A", "B", "C", "D", "E", "F", "G", "H", "I" },
|
[ALTERNATIVE_TAGS] = { "A", "B", "C", "D", "E", "F", "G", "H", "I" },
|
||||||
[ALT_TAGS_DECORATION] = { "<1>", "<2>", "<3>", "<4>", "<5>", "<6>", "<7>", "<8>", "<9>" },
|
[ALT_TAGS_DECORATION] = { "<1>", "<2>", "<3>", "<4>", "<5>", "<6>", "<7>", "<8>", "<9>" },
|
||||||
@ -1140,6 +1161,9 @@ static Key keys[] = {
|
|||||||
#if BAR_ALTERNATIVE_TAGS_PATCH
|
#if BAR_ALTERNATIVE_TAGS_PATCH
|
||||||
{ MODKEY, XK_n, togglealttag, {0} },
|
{ MODKEY, XK_n, togglealttag, {0} },
|
||||||
#endif // BAR_ALTERNATIVE_TAGS_PATCH
|
#endif // BAR_ALTERNATIVE_TAGS_PATCH
|
||||||
|
#if NAMETAG_PATCH
|
||||||
|
{ MODKEY|ShiftMask, XK_n, nametag, {0} },
|
||||||
|
#endif // NAMETAG_PATCH
|
||||||
#if BAR_TAGGRID_PATCH
|
#if BAR_TAGGRID_PATCH
|
||||||
{ MODKEY|ControlMask, XK_Up, switchtag, { .ui = SWITCHTAG_UP | SWITCHTAG_VIEW } },
|
{ MODKEY|ControlMask, XK_Up, switchtag, { .ui = SWITCHTAG_UP | SWITCHTAG_VIEW } },
|
||||||
{ MODKEY|ControlMask, XK_Down, switchtag, { .ui = SWITCHTAG_DOWN | SWITCHTAG_VIEW } },
|
{ MODKEY|ControlMask, XK_Down, switchtag, { .ui = SWITCHTAG_DOWN | SWITCHTAG_VIEW } },
|
||||||
@ -1410,6 +1434,9 @@ static Signal signals[] = {
|
|||||||
#if MOVEPLACE_PATCH
|
#if MOVEPLACE_PATCH
|
||||||
{ "moveplace", moveplace },
|
{ "moveplace", moveplace },
|
||||||
#endif // MOVEPLACE_PATCH
|
#endif // MOVEPLACE_PATCH
|
||||||
|
#if NAMETAG_PATCH
|
||||||
|
{ "nametag", nametag },
|
||||||
|
#endif // NAMETAG_PATCH
|
||||||
#if EXRESIZE_PATCH
|
#if EXRESIZE_PATCH
|
||||||
{ "explace", explace },
|
{ "explace", explace },
|
||||||
{ "togglehorizontalexpand", togglehorizontalexpand },
|
{ "togglehorizontalexpand", togglehorizontalexpand },
|
||||||
@ -1624,6 +1651,9 @@ static IPCCommand ipccommands[] = {
|
|||||||
#if MOVERESIZE_PATCH
|
#if MOVERESIZE_PATCH
|
||||||
IPCCOMMAND( moveresize, 1, {ARG_TYPE_STR} ),
|
IPCCOMMAND( moveresize, 1, {ARG_TYPE_STR} ),
|
||||||
#endif // MOVERESIZE_PATCH
|
#endif // MOVERESIZE_PATCH
|
||||||
|
#if NAMETAG_PATCH
|
||||||
|
IPCCOMMAND( nametag, 1, {ARG_TYPE_NONE} ),
|
||||||
|
#endif // NAMETAG_PATCH
|
||||||
#if RIODRAW_PATCH
|
#if RIODRAW_PATCH
|
||||||
IPCCOMMAND( rioresize, 1, {ARG_TYPE_NONE} ),
|
IPCCOMMAND( rioresize, 1, {ARG_TYPE_NONE} ),
|
||||||
#endif // RIODRAW_PATCH
|
#endif // RIODRAW_PATCH
|
||||||
|
@ -10,6 +10,7 @@ case $# in
|
|||||||
focusurgent) ;&
|
focusurgent) ;&
|
||||||
mirrorlayout) ;&
|
mirrorlayout) ;&
|
||||||
mpdcontrol) ;&
|
mpdcontrol) ;&
|
||||||
|
nametag) ;&
|
||||||
pushdown) ;&
|
pushdown) ;&
|
||||||
pushup) ;&
|
pushup) ;&
|
||||||
self_restart) ;&
|
self_restart) ;&
|
||||||
|
@ -193,6 +193,9 @@
|
|||||||
#if MOVESTACK_PATCH
|
#if MOVESTACK_PATCH
|
||||||
#include "movestack.c"
|
#include "movestack.c"
|
||||||
#endif
|
#endif
|
||||||
|
#if NAMETAG_PATCH
|
||||||
|
#include "nametag.c"
|
||||||
|
#endif
|
||||||
#if NO_MOD_BUTTONS_PATCH
|
#if NO_MOD_BUTTONS_PATCH
|
||||||
#include "nomodbuttons.c"
|
#include "nomodbuttons.c"
|
||||||
#endif
|
#endif
|
||||||
|
@ -192,6 +192,9 @@
|
|||||||
#if MOVESTACK_PATCH
|
#if MOVESTACK_PATCH
|
||||||
#include "movestack.h"
|
#include "movestack.h"
|
||||||
#endif
|
#endif
|
||||||
|
#if NAMETAG_PATCH
|
||||||
|
#include "nametag.h"
|
||||||
|
#endif
|
||||||
#if NO_MOD_BUTTONS_PATCH
|
#if NO_MOD_BUTTONS_PATCH
|
||||||
#include "nomodbuttons.h"
|
#include "nomodbuttons.h"
|
||||||
#endif
|
#endif
|
||||||
|
61
patch/nametag.c
Normal file
61
patch/nametag.c
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
void
|
||||||
|
nametag(const Arg *arg)
|
||||||
|
{
|
||||||
|
char *p, name[MAX_TAGLEN];
|
||||||
|
FILE *f;
|
||||||
|
int i, group;
|
||||||
|
int tagindex;
|
||||||
|
Monitor *m = selmon;
|
||||||
|
#if BAR_ALTTAGSDECORATION_PATCH
|
||||||
|
Client *c;
|
||||||
|
int occ = 0;
|
||||||
|
|
||||||
|
for (c = m->clients; c; c = c->next)
|
||||||
|
occ |= c->tags == 255 ? 0 : c->tags;
|
||||||
|
#endif // BAR_ALTTAGSDECORATION_PATCH
|
||||||
|
|
||||||
|
errno = 0; // popen(3p) says on failure it "may" set errno
|
||||||
|
if (!(f = popen(NAMETAG_COMMAND, "r"))) {
|
||||||
|
fprintf(stderr, "dwm: popen command failed%s%s\n", errno ? ": " : "", errno ? strerror(errno) : "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(p = fgets(name, MAX_TAGLEN, f)) && (i = errno) && ferror(f))
|
||||||
|
fprintf(stderr, "dwm: fgets failed: %s\n", strerror(i));
|
||||||
|
|
||||||
|
pclose(f);
|
||||||
|
|
||||||
|
if (!p)
|
||||||
|
return;
|
||||||
|
if ((p = strchr(name, '\n')))
|
||||||
|
*p = '\0';
|
||||||
|
|
||||||
|
for (i = 0; i < NUMTAGS; i++) {
|
||||||
|
if (m->tagset[m->seltags] & (1 << i)) {
|
||||||
|
|
||||||
|
tagindex = i + NUMTAGS * m->num;
|
||||||
|
if (tagindex >= LENGTH(tagicons[DEFAULT_TAGS]))
|
||||||
|
tagindex = tagindex % LENGTH(tagicons[DEFAULT_TAGS]);
|
||||||
|
|
||||||
|
#if BAR_ALTTAGSDECORATION_PATCH
|
||||||
|
if (occ & 1 << i)
|
||||||
|
group = ALT_TAGS_DECORATION;
|
||||||
|
else
|
||||||
|
#endif // BAR_ALTTAGSDECORATION_PATCH
|
||||||
|
#if BAR_ALTERNATIVE_TAGS_PATCH
|
||||||
|
if (m->alttag)
|
||||||
|
group = ALTERNATIVE_TAGS;
|
||||||
|
else
|
||||||
|
#endif // BAR_ALTERNATIVE_TAGS_PATCH
|
||||||
|
group = DEFAULT_TAGS;
|
||||||
|
|
||||||
|
#if NAMETAG_PREPEND_PATCH
|
||||||
|
if (snprintf(tagicons[group][i], MAX_TAGLEN, NAMETAG_FORMAT, i+1, name) < 0)
|
||||||
|
fprintf(stderr, "nametag: if statement to avoid -Wformat-truncation= warnings\n");
|
||||||
|
#else
|
||||||
|
snprintf(tagicons[group][i], MAX_TAGLEN, NAMETAG_FORMAT, name);
|
||||||
|
#endif // NAMETAG_PREPEND_PATCH
|
||||||
|
}
|
||||||
|
}
|
||||||
|
drawbars();
|
||||||
|
}
|
1
patch/nametag.h
Normal file
1
patch/nametag.h
Normal file
@ -0,0 +1 @@
|
|||||||
|
static void nametag(const Arg *arg);
|
@ -782,6 +782,32 @@
|
|||||||
*/
|
*/
|
||||||
#define MOVESTACK_PATCH 0
|
#define MOVESTACK_PATCH 0
|
||||||
|
|
||||||
|
/* This patch allows you to change the names of tags during runtime.
|
||||||
|
*
|
||||||
|
* This is a bespoke version implemented specifically in relation to tagicons, which is integrated
|
||||||
|
* into dwm-flexipatch. By default it uses dmenu to retrieve the new name, but this can be
|
||||||
|
* customised via config along with the maximum text length and the format string.
|
||||||
|
*
|
||||||
|
* Special behaviour:
|
||||||
|
* - if more than one tag is selected then the name change applies to all selected tags
|
||||||
|
* - if tagicons is configured to have unique tags per monitor then the change only applies
|
||||||
|
* for the current monitor
|
||||||
|
* - the name change applies to the tag set that is active for the current tag:
|
||||||
|
* * if used in combination with BAR_ALTTAGSDECORATION_PATCH and there are clients on the
|
||||||
|
* given tag then the name change only applies to the ALT_TAGS_DECORATION tag set
|
||||||
|
* * if used in combination with the BAR_ALTERNATIVE_TAGS_PATCH and alternative tags are
|
||||||
|
* shown then the name change only applies to the ALTERNATIVE_TAGS tag set
|
||||||
|
* * if used in combination with both then BAR_ALTTAGSDECORATION_PATCH takes precedence
|
||||||
|
* * otherwise the name change applies to the DEFAULT_TAGS tag set
|
||||||
|
*
|
||||||
|
* https://dwm.suckless.org/patches/nametag/
|
||||||
|
*/
|
||||||
|
#define NAMETAG_PATCH 0
|
||||||
|
|
||||||
|
/* Variant of the above which prepends the tag number to the given string.
|
||||||
|
* The toggle does nothing on its own and need to be enabled in combination with the above. */
|
||||||
|
#define NAMETAG_PREPEND_PATCH 0
|
||||||
|
|
||||||
/* Adds support for the _NET_CLIENT_LIST_STACKING atom, needed by certain applications like the
|
/* Adds support for the _NET_CLIENT_LIST_STACKING atom, needed by certain applications like the
|
||||||
* Zoom video conferencing application.
|
* Zoom video conferencing application.
|
||||||
* https://github.com/bakkeby/patches/wiki/netclientliststacking/
|
* https://github.com/bakkeby/patches/wiki/netclientliststacking/
|
||||||
|
Loading…
Reference in New Issue
Block a user