added patches for suckless stuff

This commit is contained in:
2021-05-21 13:45:08 +05:30
parent 63262b85ff
commit dadc9192ff
8 changed files with 1184 additions and 264 deletions

View File

@@ -33,8 +33,8 @@ jobs:
strategy: strategy:
matrix: matrix:
host: host:
- Marisa #- Marisa
# - Satori #- Satori
steps: steps:
- uses: actions/checkout@v2.3.4 - uses: actions/checkout@v2.3.4
- uses: cachix/install-nix-action@v13 - uses: cachix/install-nix-action@v13
@@ -53,8 +53,9 @@ jobs:
strategy: strategy:
matrix: matrix:
home: home:
#- natto
homeaarch:
- ottan - ottan
# - natto
steps: steps:
- uses: actions/checkout@v2.3.4 - uses: actions/checkout@v2.3.4
- uses: cachix/install-nix-action@v13 - uses: cachix/install-nix-action@v13
@@ -66,5 +67,12 @@ jobs:
with: with:
name: natto1784 name: natto1784
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- uses: uraimo/run-on-arch-action@v2.0.5
name: Run commands
id: runcmd
with:
arch: aarch64
distro: ubuntu-latest
run: nix build -L .#hm-configs.${{ matrix.homeaarch }}.activationPackage
- run: nix build -L .#hm-configs.${{ matrix.home }}.activationPackage - run: nix build -L .#hm-configs.${{ matrix.home }}.activationPackage

View File

@@ -19,15 +19,21 @@ in
age = { age = {
sshKeyPaths = [ "${home}/.ssh/id_ed25519" ]; sshKeyPaths = [ "${home}/.ssh/id_ed25519" ];
secrets = { secrets = {
fish_variables = { /* fish_variables = {
file = ./secrets/fish_variables.age; file = ./secrets/fish_variables.age;
path = "${home}/.config/fish/fish_variables"; path = "${home}/.config/fish/fish_variables";
mode = "660"; mode = "660";
}; };
*/
mpdasrc = { mpdasrc = {
file = ./secrets/mpdasrc.age; file = ./secrets/mpdasrc.age;
path = "${home}/.config/mpdasrc"; path = "${home}/.config/mpdasrc";
}; };
zshrc = {
file = ./secrets/.zshrc.age;
path = "${home}/.zshrc";
mode = "660";
};
}; };
}; };
home = { home = {

12
home/secrets/.zshrc.age Normal file
View File

@@ -0,0 +1,12 @@
age-encryption.org/v1
-> ssh-ed25519 kIk5ZQ d7rjGwJPo5zOXvqh2gYgTE08d6NaXXPNNiYlJLAotns
ZmolHuoLbsi/Oql88ZCBk4QgSKwPltDJoBD8cigfBkQ
-> Tf/-grease Ca3wR, S?z
VDYunDSnXz6uPifwdoPfACLpk3a6oVgmcbPH5MeHQ3RgYZHqd0DBRMPCuvZY7YW7
1L3FuDfLWlUJKMiqSuRnK2R7x6RIg3oumWKjyl1d9jtZWQ3JSmQRqsr2qi7FGA
--- N47PibVyn76ZSrO8etxah5ZiSZcjc+Fi2a1IFlbVZtY
<<3C><>Cq <1B>S<EFBFBD><53>G\<5C><03>וt<D795>\I<>}ʂ
<EFBFBD><EFBFBD><07><>y$$<04><14><>`!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<08>ó<EFBFBD>c[W<><57><EFBFBD>(<28><><EFBFBD>=A<>װ<EFBFBD><01><><EFBFBD>h<><68>)~<7E>47<34>g<03><><EFBFBD><EFBFBD>H<EFBFBD> .$<24><>S<EFBFBD>m<EFBFBD>X<EFBFBD><58><03><>(<28><><1D>4<EFBFBD><34> A<><41><EFBFBD>|%<25> 1<>h/A<><41>I̱a<CCB1>)<29>ŽW<C5BD><57><EFBFBD><EFBFBD><EFBFBD>-Z<><14>,V<>p <0B><><EFBFBD>ޙ<0E><>&<26>ע<15>X<EFBFBD>k<EFBFBD>ˈ&<11><>
j<><6A>n<>[<5B><><EFBFBD><EFBFBD>d 
<EFBFBD><EFBFBD><1A>/u<>tqi<71>ױ<EFBFBD>6<10><>&<26>%W<><57>&<26><><31>V<EFBFBD><56><EFBFBD><EFBFBD>s <0B>
ءF<EFBFBD>Wa<1D>_<EFBFBD><5F><EFBFBD><EFBFBD>g<EFBFBD>FO<46><05><><EFBFBD>)`4<>]<5D>N<EFBFBD><4E> 5<>݈<EFBFBD><DD88>{<7B><EFBFBD>&<26><1C><>|A<><><DCB8><EFBFBD><EFBFBD>߶<EFBFBD>&<1B><><EFBFBD><EFBFBD>v<EFBFBD>w

View File

@@ -1,30 +0,0 @@
/* See LICENSE file for copyright and license details. */
/* Default settings; can be overriden by command line. */
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
static int centered = 1; /* -c option; centers dmenu on screen */
static int min_width = 500; /* minimum width when centered */
/* -fn option overrides fonts[0]; default X11 font or font set */
static const char *fonts[] = {
"Consolas:pixelsize=15"
};
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
static const char *colors[SchemeLast][2] = {
/* fg bg */
[SchemeNorm] = { "#bbbbbb", "#1d2021" },
[SchemeSel] = { "#1d2021", "#ebdbb2" },
// [SchemeSelHighlight] = { "#000080", "#ebdbb2" },
// [SchemeNormHighlight] = { "#ffc978", "#1d2021" },
[SchemeOut] = { "#000000", "#00ffff" },
// Settings[SchemeOutHighlight] = { "#ffc978", "#00ffff" },
};
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
static unsigned int lines = 0;
/*
* Characters not considered part of a word while deleting words
* for example: " /?\"&[]"
*/
static const char worddelimiters[] = " ";
/* Size of the window border */
static const unsigned int border_width = 4;

View File

@@ -1,32 +1,27 @@
final: prev: { final: prev: {
dmenu = prev.dmenu.overrideAttrs (oldAttrs: rec { dmenu = prev.dmenu.overrideAttrs (oldAttrs: rec {
configFile = prev.writeText "config.def.h" (builtins.readFile ./dmenu/config.def.h); src = builtins.fetchTarball {
url = "https://dl.suckless.org/tools/dmenu-5.0.tar.gz";
sha256 = "0gjjbh49j85rpbmiqj236g4c1zb1h8xh41mcjsvnzgwn72893mk6";
};
patches = [./suckless/dmenu.patch];
}); });
ncmpcpp = prev.ncmpcpp.override {
visualizerSupport = true;
clockSupport = true;
};
dwm = prev.dwm.overrideAttrs (oldAttrs: rec { dwm = prev.dwm.overrideAttrs (oldAttrs: rec {
src = prev.fetchFromGitHub { src = builtins.fetchTarball {
owner = "natto1784"; url = "https://dl.suckless.org/dwm/dwm-6.2.tar.gz";
repo = "dwm"; sha256 = "0qdh8amfkjpvbwffar0byybcqi5w7v1wdqb39h75521haa6mh8xg";
rev = "a3896f13d20218ce07a7b646459cd5ce6ed2f27d";
sha256 = "sha256-iyUFeZwqZ6veMs+3lBcpBLENN4r27QlkARfAL3OJvks=";
}; };
patches = [./suckless/dwm.patch];
}); });
st = prev.st.overrideAttrs (oldAttrs: rec { st = prev.st.overrideAttrs (oldAttrs: rec {
src = prev.fetchFromGitHub { src = builtins.fetchTarball {
owner = "natto1784"; url = "https://dl.suckless.org/st/st-0.8.4.tar.gz";
repo = "st"; sha256 = "01z6i60fmdi5h6g80rgvqr6d00jxszphrldx07w4v6nq8cq2r4nr";
rev = "0cd1e394e6d07c5f605ae23070c40de9690bafb1";
sha256 = "sha256-EY5Amz16Drc4i0uEAYTPEHcGex0s3pzHDqfDp4Z5OGY=";
}; };
# patch = prev.writeText "st.patch" (builtins.readFile ./st.patch); patches = [./suckless/st.patch];
# patchPhase = "patch -t < ${patch}";
}); });
kbd = prev.kbd.overrideAttrs (oldAttrs: rec{ kbd = prev.kbd.overrideAttrs (oldAttrs: rec{
@@ -35,6 +30,11 @@ final: prev: {
postInstall = "${oldAttrs.postInstall}\n cp ${colemak-dh} $out/share/keymaps/i386/colemak/colemak-dh.map\n gzip $out/share/keymaps/i386/colemak/colemak-dh.map"; postInstall = "${oldAttrs.postInstall}\n cp ${colemak-dh} $out/share/keymaps/i386/colemak/colemak-dh.map\n gzip $out/share/keymaps/i386/colemak/colemak-dh.map";
}); });
ncmpcpp = prev.ncmpcpp.override {
visualizerSupport = true;
clockSupport = true;
};
picom = prev.picom.overrideAttrs (oldAttrs: rec{ picom = prev.picom.overrideAttrs (oldAttrs: rec{
version = "Next"; version = "Next";
src = prev.fetchFromGitHub { src = prev.fetchFromGitHub {

338
overlays/suckless/dmenu.patch Executable file
View File

@@ -0,0 +1,338 @@
diff --color -u a/config.def.h b/config.def.h
--- a/config.def.h 2020-09-02 22:07:07.000000000 +0530
+++ b/config.def.h 2021-05-21 00:20:28.562140000 +0530
@@ -2,16 +2,21 @@
/* Default settings; can be overriden by command line. */
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
+static int centered = 1; /* -c option; centers dmenu on screen */
+static int min_width = 500; /* minimum width when centered */
/* -fn option overrides fonts[0]; default X11 font or font set */
static const char *fonts[] = {
- "monospace:size=10"
+ "Consolas:pixelsize=15"
};
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
static const char *colors[SchemeLast][2] = {
/* fg bg */
- [SchemeNorm] = { "#bbbbbb", "#222222" },
- [SchemeSel] = { "#eeeeee", "#005577" },
+ [SchemeNorm] = { "#bbbbbb", "#1d2021" },
+ [SchemeSel] = { "#1d2021", "#ebdbb2" },
+ [SchemeSelHighlight] = { "#000080", "#ebdbb2" },
+ [SchemeNormHighlight] = { "#ffc978", "#1d2021" },
[SchemeOut] = { "#000000", "#00ffff" },
+ [SchemeOutHighlight] = { "#ffc978", "#00ffff" },
};
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
static unsigned int lines = 0;
@@ -21,3 +26,5 @@
* for example: " /?\"&[]"
*/
static const char worddelimiters[] = " ";
+/* Size of the window border */
+static const unsigned int border_width = 4;
Only in b: config.def.h.orig
diff --color -u a/dmenu.1 b/dmenu.1
--- a/dmenu.1 2020-09-02 22:07:07.000000000 +0530
+++ b/dmenu.1 2020-12-29 02:11:41.804718200 +0530
@@ -40,6 +40,9 @@
.B \-b
dmenu appears at the bottom of the screen.
.TP
+.B \-c
+dmenu appears centered on the screen.
+.TP
.B \-f
dmenu grabs the keyboard before reading stdin if not reading from a tty. This
is faster, but will lock up X until stdin reaches end\-of\-file.
diff --color -u a/dmenu.c b/dmenu.c
--- a/dmenu.c 2020-09-02 22:07:07.000000000 +0530
+++ b/dmenu.c 2020-12-29 02:24:03.168766600 +0530
@@ -26,8 +26,7 @@
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
/* enums */
-enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */
-
+enum { SchemeNorm, SchemeSel, SchemeOut, SchemeNormHighlight, SchemeSelHighlight, SchemeOutHighlight, SchemeLast }; /* color schemes */
struct item {
char *text;
struct item *left, *right;
@@ -89,6 +88,15 @@
break;
}
+static int
+max_textw(void)
+{
+ int len = 0;
+ for (struct item *item = items; item && item->text; item++)
+ len = MAX(TEXTW(item->text), len);
+ return len;
+}
+
static void
cleanup(void)
{
@@ -113,6 +121,43 @@
return NULL;
}
+static void
+drawhighlights(struct item *item, int x, int y, int maxw)
+{
+ char restorechar, tokens[sizeof text], *highlight, *token;
+ int indentx, highlightlen;
+
+ drw_setscheme(drw, scheme[item == sel ? SchemeSelHighlight : item->out ? SchemeOutHighlight : SchemeNormHighlight]);
+ strcpy(tokens, text);
+ for (token = strtok(tokens, " "); token; token = strtok(NULL, " ")) {
+ highlight = fstrstr(item->text, token);
+ while (highlight) {
+ // Move item str end, calc width for highlight indent, & restore
+ highlightlen = highlight - item->text;
+ restorechar = *highlight;
+ item->text[highlightlen] = '\0';
+ indentx = TEXTW(item->text);
+ item->text[highlightlen] = restorechar;
+
+ // Move highlight str end, draw highlight, & restore
+ restorechar = highlight[strlen(token)];
+ highlight[strlen(token)] = '\0';
+ if (indentx - (lrpad / 2) - 1 < maxw)
+ drw_text(
+ drw,
+ x + indentx - (lrpad / 2) - 1,
+ y,
+ MIN(maxw - indentx, TEXTW(highlight) - lrpad),
+ bh, 0, highlight, 0
+ );
+ highlight[strlen(token)] = restorechar;
+
+ if (strlen(highlight) - strlen(token) < strlen(token)) break;
+ highlight = fstrstr(highlight + strlen(token), token);
+ }
+ }
+}
+
static int
drawitem(struct item *item, int x, int y, int w)
{
@@ -123,7 +168,9 @@
else
drw_setscheme(drw, scheme[SchemeNorm]);
- return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
+ int r = drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
+ drawhighlights(item, x, y, w);
+ return r;
}
static void
@@ -501,6 +548,119 @@
}
static void
+buttonpress(XEvent *e)
+{
+ struct item *item;
+ XButtonPressedEvent *ev = &e->xbutton;
+ int x = 0, y = 0, h = bh, w;
+
+ if (ev->window != win)
+ return;
+
+ /* right-click: exit */
+ if (ev->button == Button3)
+ exit(1);
+
+ if (prompt && *prompt)
+ x += promptw;
+
+ /* input field */
+ w = (lines > 0 || !matches) ? mw - x : inputw;
+
+ /* left-click on input: clear input,
+ * NOTE: if there is no left-arrow the space for < is reserved so
+ * add that to the input width */
+ if (ev->button == Button1 &&
+ ((lines <= 0 && ev->x >= 0 && ev->x <= x + w +
+ ((!prev || !curr->left) ? TEXTW("<") : 0)) ||
+ (lines > 0 && ev->y >= y && ev->y <= y + h))) {
+ insert(NULL, -cursor);
+ drawmenu();
+ return;
+ }
+ /* middle-mouse click: paste selection */
+ if (ev->button == Button2) {
+ XConvertSelection(dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY,
+ utf8, utf8, win, CurrentTime);
+ drawmenu();
+ return;
+ }
+ /* scroll up */
+ if (ev->button == Button4 && prev) {
+ sel = curr = prev;
+ calcoffsets();
+ drawmenu();
+ return;
+ }
+ /* scroll down */
+ if (ev->button == Button5 && next) {
+ sel = curr = next;
+ calcoffsets();
+ drawmenu();
+ return;
+ }
+ if (ev->button != Button1)
+ return;
+ if (ev->state & ~ControlMask)
+ return;
+ if (lines > 0) {
+ /* vertical list: (ctrl)left-click on item */
+ w = mw - x;
+ for (item = curr; item != next; item = item->right) {
+ y += h;
+ if (ev->y >= y && ev->y <= (y + h)) {
+ puts(item->text);
+ if (!(ev->state & ControlMask))
+ exit(0);
+ sel = item;
+ if (sel) {
+ sel->out = 1;
+ drawmenu();
+ }
+ return;
+ }
+ }
+ } else if (matches) {
+ /* left-click on left arrow */
+ x += inputw;
+ w = TEXTW("<");
+ if (prev && curr->left) {
+ if (ev->x >= x && ev->x <= x + w) {
+ sel = curr = prev;
+ calcoffsets();
+ drawmenu();
+ return;
+ }
+ }
+ /* horizontal list: (ctrl)left-click on item */
+ for (item = curr; item != next; item = item->right) {
+ x += w;
+ w = MIN(TEXTW(item->text), mw - x - TEXTW(">"));
+ if (ev->x >= x && ev->x <= x + w) {
+ puts(item->text);
+ if (!(ev->state & ControlMask))
+ exit(0);
+ sel = item;
+ if (sel) {
+ sel->out = 1;
+ drawmenu();
+ }
+ return;
+ }
+ }
+ /* left-click on right arrow */
+ w = TEXTW(">");
+ x = mw - w;
+ if (next && ev->x >= x && ev->x <= x + w) {
+ sel = curr = next;
+ calcoffsets();
+ drawmenu();
+ return;
+ }
+ }
+}
+
+static void
paste(void)
{
char *p, *q;
@@ -561,6 +721,9 @@
break;
cleanup();
exit(1);
+ case ButtonPress:
+ buttonpress(&ev);
+ break;
case Expose:
if (ev.xexpose.count == 0)
drw_map(drw, win, 0, 0, mw, mh);
@@ -611,6 +774,7 @@
bh = drw->fonts->h + 2;
lines = MAX(lines, 0);
mh = (lines + 1) * bh;
+ promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
#ifdef XINERAMA
i = 0;
if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
@@ -637,9 +801,16 @@
if (INTERSECT(x, y, 1, 1, info[i]))
break;
- x = info[i].x_org;
- y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
- mw = info[i].width;
+ if (centered) {
+ mw = MIN(MAX(max_textw() + promptw, min_width), info[i].width);
+ x = info[i].x_org + ((info[i].width - mw) / 2);
+ y = info[i].y_org + ((info[i].height - mh) / 2);
+ } else {
+ x = info[i].x_org;
+ y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
+ mw = info[i].width;
+ }
+
XFree(info);
} else
#endif
@@ -647,21 +818,30 @@
if (!XGetWindowAttributes(dpy, parentwin, &wa))
die("could not get embedding window attributes: 0x%lx",
parentwin);
- x = 0;
- y = topbar ? 0 : wa.height - mh;
- mw = wa.width;
+
+ if (centered) {
+ mw = MIN(MAX(max_textw() + promptw, min_width), wa.width);
+ x = (wa.width - mw) / 2;
+ y = (wa.height - mh) / 2;
+ } else {
+ x = 0;
+ y = topbar ? 0 : wa.height - mh;
+ mw = wa.width;
+ }
}
- promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
inputw = MIN(inputw, mw/3);
match();
/* create menu window */
swa.override_redirect = True;
swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
+ swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask |
+ ButtonPressMask;
swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
- win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0,
+ win = XCreateWindow(dpy, parentwin, x, y, mw, mh, border_width,
CopyFromParent, CopyFromParent, CopyFromParent,
CWOverrideRedirect | CWBackPixel | CWEventMask, &swa);
+ XSetWindowBorder(dpy, win, scheme[SchemeSel][ColBg].pixel);
XSetClassHint(dpy, win, &ch);
@@ -709,6 +889,8 @@
topbar = 0;
else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */
fast = 1;
+ else if (!strcmp(argv[i], "-c")) /* centers dmenu on screen */
+ centered = 1;
else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
fstrncmp = strncasecmp;
fstrstr = cistrstr;
Only in b: dmenu.c.orig
Only in a: dmenu_path
Only in a: dmenu_run

602
overlays/suckless/dwm.patch Executable file
View File

@@ -0,0 +1,602 @@
diff --color -u a/config.def.h b/config.def.h
--- a/config.def.h 2019-02-02 18:25:28.000000000 +0530
+++ b/config.def.h 2021-05-21 00:15:46.365943100 +0530
@@ -1,50 +1,55 @@
/* See LICENSE file for copyright and license details. */
/* appearance */
-static const unsigned int borderpx = 1; /* border pixel of windows */
+static const unsigned int borderpx = 4; /* border pixel of windows */
+static const unsigned int gappx = 6; /* gaps between windows */
static const unsigned int snap = 32; /* snap pixel */
static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */
-static const char *fonts[] = { "monospace:size=10" };
-static const char dmenufont[] = "monospace:size=10";
-static const char col_gray1[] = "#222222";
-static const char col_gray2[] = "#444444";
-static const char col_gray3[] = "#bbbbbb";
-static const char col_gray4[] = "#eeeeee";
-static const char col_cyan[] = "#005577";
-static const char *colors[][3] = {
- /* fg bg border */
- [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
- [SchemeSel] = { col_gray4, col_cyan, col_cyan },
+static const char *fonts[] = {"Consolas:pixelsize=15",
+ "Font Awesome 5 Free Solid:pixelsize=15",
+ "Font Awesome 5 Brands:pixelsize=15"};
+static const char col_1[] = "#1d2021";
+static const char col_2[] = "#444444";
+static const char col_3[] = "#bbbbbb";
+static const char col_4[] = "#1d2021";
+static const char col_5[] = "#ebdbb2";
+static const char *colors[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = {col_3, col_1, col_2},
+ [SchemeSel] = {col_4, col_5, col_5},
};
-
/* tagging */
-static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
-static const Rule rules[] = {
+static const char *tags[] = {"", "", "", "", "", "", "", "", ""};
+
+static const Rule rules[0];// = {
/* xprop(1):
* WM_CLASS(STRING) = instance, class
* WM_NAME(STRING) = title
*/
/* class instance title tags mask isfloating monitor */
- { "Gimp", NULL, NULL, 0, 1, -1 },
- { "Firefox", NULL, NULL, 1 << 8, 0, -1 },
-};
+// { "Gimp", NULL, NULL, 0, 1, -1 },
+// { "Firefox", NULL, NULL, 1 << 8, 0, -1 },
+//};
/* layout(s) */
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
-static const int nmaster = 1; /* number of clients in master area */
-static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
+static const int nmaster = 0; /* number of clients in master area */
+static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */
static const Layout layouts[] = {
/* symbol arrange function */
- { "[]=", tile }, /* first entry is default */
- { "><>", NULL }, /* no layout function means floating behavior */
+ { "|M|", centeredmaster },
+ { "><>", NULL },
{ "[M]", monocle },
+ { "[]=", tile },
+ { ">M>", centeredfloatingmaster },
};
/* key definitions */
-#define MODKEY Mod1Mask
+#define MODKEY Mod4Mask
+#define Print 0x0000ff61
#define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
@@ -55,45 +60,66 @@
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */
-static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
-static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
-static const char *termcmd[] = { "st", NULL };
-
+static char dmenumon[2] = "0";
+static const char *dmenucmd[] = { "dmenu_run","-l","20", NULL};
+static const char *termcmd[] = { "st",NULL };
+static const char *ss1[] ={"flameshot", "full" ,"-p","/home/natto/Pictures",NULL};
+static const char *ss2[] ={"flameshot", "gui" ,"-p","/home/natto/Pictures",NULL};
+static const char *ss3[] ={"flameshot", "full" ,"-p","/home/natto/Pictures","-d","10000",NULL};
+static const char *mpc1[] = {"mpc", "next",NULL};
+static const char *mpc2[] = {"mpc", "prev",NULL};
+static const char *mpc3[] = {"mpc", "toggle",NULL};
+static const char *mpc4[] = {"mpc", "seek","+00:00:05",NULL};
+static const char *mpc5[] = {"mpc", "seek","-00:00:05",NULL};
+static const char *volinc[] = {"pamixer", "-i","5",NULL};
+static const char *voldec[] = {"pamixer", "-d", "5",NULL};
static Key keys[] = {
/* modifier key function argument */
- { MODKEY, XK_p, spawn, {.v = dmenucmd } },
- { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
+ { MODKEY, XK_d, spawn, {.v = dmenucmd } },
+ { MODKEY, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
- { MODKEY, XK_d, incnmaster, {.i = -1 } },
+ { MODKEY, XK_o, incnmaster, {.i = -1 } },
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
- { MODKEY, XK_Return, zoom, {0} },
+ { MODKEY|ShiftMask, XK_Return, zoom, {0} },
{ MODKEY, XK_Tab, view, {0} },
- { MODKEY|ShiftMask, XK_c, killclient, {0} },
- { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
- { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
+ { MODKEY|ShiftMask, XK_q, killclient, {0} },
+ { MODKEY, XK_t, setlayout, {.v = &layouts[3]} },
+ { MODKEY|ShiftMask, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
+ { MODKEY, XK_u, setlayout, {.v = &layouts[0]} },
+ { MODKEY|ShiftMask, XK_u, setlayout, {.v = &layouts[4]} },
+ { MODKEY, XK_f, togglefullscr, {0} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY, XK_0, view, {.ui = ~0 } },
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
- { MODKEY, XK_comma, focusmon, {.i = -1 } },
- { MODKEY, XK_period, focusmon, {.i = +1 } },
- { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
- { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
+ {0, Print, spawn, {.v = ss1} },
+ {ShiftMask, Print, spawn, {.v = ss2} },
+ {Mod1Mask, Print, spawn, {.v = ss3} },
+ {MODKEY, XK_p, spawn, {.v = mpc3} },
+ {MODKEY|ShiftMask, XK_h, spawn, {.v = mpc1} },
+ {MODKEY|ShiftMask, XK_k, spawn, {.v = mpc2} },
+ {MODKEY|ShiftMask, XK_r, spawn, {.v = mpc4} },
+ {MODKEY|ShiftMask, XK_a, spawn, {.v = mpc5} },
+ {MODKEY|ShiftMask, XK_period, spawn, {.v = volinc} },
+ {MODKEY|ShiftMask, XK_comma, spawn, {.v = voldec} },
+ //{ MODKEY, XK_comma, focusmon, {.i = -1 } },
+ //{ MODKEY, XK_period, focusmon, {.i = +1 } },
+ //{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
+ //{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
- TAGKEYS( XK_3, 2)
- TAGKEYS( XK_4, 3)
+ TAGKEYS( XK_3, 2) TAGKEYS( XK_4, 3)
TAGKEYS( XK_5, 4)
TAGKEYS( XK_6, 5)
TAGKEYS( XK_7, 6)
TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8)
- { MODKEY|ShiftMask, XK_q, quit, {0} },
+ { MODKEY|ShiftMask, XK_e, quit, {0} },
};
/* button definitions */
Only in b: config.def.h.orig
diff --color -u a/config.mk b/config.mk
--- a/config.mk 2019-02-02 18:25:28.000000000 +0530
+++ b/config.mk 2021-05-21 00:15:46.366562100 +0530
@@ -25,7 +25,7 @@
LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS}
# flags
-CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
+CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=200809L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
#CFLAGS = -g -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS}
CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os ${INCS} ${CPPFLAGS}
LDFLAGS = ${LIBS}
diff --color -u a/drw.c b/drw.c
--- a/drw.c 2019-02-02 18:25:28.000000000 +0530
+++ b/drw.c 2021-05-21 00:15:46.366998100 +0530
@@ -95,6 +95,7 @@
{
XFreePixmap(drw->dpy, drw->drawable);
XFreeGC(drw->dpy, drw->gc);
+ drw_fontset_free(drw->fonts);
free(drw);
}
diff --color -u a/dwm.1 b/dwm.1
--- a/dwm.1 2019-02-02 18:25:28.000000000 +0530
+++ b/dwm.1 2021-05-21 00:15:46.367636200 +0530
@@ -33,7 +33,7 @@
.SH OPTIONS
.TP
.B \-v
-prints version information to standard output, then exits.
+prints version information to stderr, then exits.
.SH USAGE
.SS Status bar
.TP
diff --color -u a/dwm.c b/dwm.c
--- a/dwm.c 2019-02-02 18:25:28.000000000 +0530
+++ b/dwm.c 2021-05-21 00:15:46.368968400 +0530
@@ -52,8 +52,8 @@
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
#define LENGTH(X) (sizeof X / sizeof X[0])
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
-#define WIDTH(X) ((X)->w + 2 * (X)->bw)
-#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
+#define WIDTH(X) ((X)->w + 2 * (X)->bw + gappx)
+#define HEIGHT(X) ((X)->h + 2 * (X)->bw + gappx)
#define TAGMASK ((1 << LENGTH(tags)) - 1)
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
@@ -169,6 +169,7 @@
static void focusin(XEvent *e);
static void focusmon(const Arg *arg);
static void focusstack(const Arg *arg);
+static Atom getatomprop(Client *c, Atom prop);
static int getrootptr(int *x, int *y);
static long getstate(Window w);
static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
@@ -193,6 +194,7 @@
static void resizemouse(const Arg *arg);
static void restack(Monitor *m);
static void run(void);
+static void runAutostart(void);
static void scan(void);
static int sendevent(Client *c, Atom proto);
static void sendmon(Client *c, Monitor *m);
@@ -211,6 +213,7 @@
static void tile(Monitor *);
static void togglebar(const Arg *arg);
static void togglefloating(const Arg *arg);
+static void togglefullscr(const Arg *arg);
static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg);
static void unfocus(Client *c, int setfocus);
@@ -233,6 +236,8 @@
static int xerrordummy(Display *dpy, XErrorEvent *ee);
static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void zoom(const Arg *arg);
+static void centeredmaster(Monitor *m);
+static void centeredfloatingmaster(Monitor *m);
/* variables */
static const char broken[] = "broken";
@@ -416,7 +421,7 @@
void
buttonpress(XEvent *e)
{
- unsigned int i, x, click;
+ unsigned int i, x, click, occ = 0;
Arg arg = {0};
Client *c;
Monitor *m;
@@ -431,15 +436,20 @@
}
if (ev->window == selmon->barwin) {
i = x = 0;
- do
+ for (c = m->clients; c; c = c->next)
+ occ |= c->tags == 255 ? 0 : c->tags;
+ do {
+ /* do not reserve space for vacant tags */
+ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
+ continue;
x += TEXTW(tags[i]);
- while (ev->x >= x && ++i < LENGTH(tags));
+ } while (ev->x >= x && ++i < LENGTH(tags));
if (i < LENGTH(tags)) {
click = ClkTagBar;
arg.ui = 1 << i;
} else if (ev->x < x + blw)
click = ClkLtSymbol;
- else if (ev->x > selmon->ww - TEXTW(stext))
+ else if (ev->x > selmon->ww - (int)TEXTW(stext))
click = ClkStatusText;
else
click = ClkWinTitle;
@@ -695,7 +705,7 @@
void
drawbar(Monitor *m)
{
- int x, w, sw = 0;
+ int x, w, tw = 0;
int boxs = drw->fonts->h / 9;
int boxw = drw->fonts->h / 6 + 2;
unsigned int i, occ = 0, urg = 0;
@@ -704,31 +714,31 @@
/* draw status first so it can be overdrawn by tags later */
if (m == selmon) { /* status is only drawn on selected monitor */
drw_setscheme(drw, scheme[SchemeNorm]);
- sw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
- drw_text(drw, m->ww - sw, 0, sw, bh, 0, stext, 0);
+ tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
+ drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
}
for (c = m->clients; c; c = c->next) {
- occ |= c->tags;
+ occ |= c->tags == 255 ? 0 : c->tags;
if (c->isurgent)
urg |= c->tags;
}
x = 0;
for (i = 0; i < LENGTH(tags); i++) {
+ /* do not draw vacant tags */
+ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
+ continue;
+
w = TEXTW(tags[i]);
drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
- if (occ & 1 << i)
- drw_rect(drw, x + boxs, boxs, boxw, boxw,
- m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
- urg & 1 << i);
x += w;
}
w = blw = TEXTW(m->ltsymbol);
drw_setscheme(drw, scheme[SchemeNorm]);
x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
- if ((w = m->ww - sw - x) > bh) {
+ if ((w = m->ww - tw - x) > bh) {
if (m->sel) {
drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
@@ -1276,12 +1286,46 @@
resizeclient(Client *c, int x, int y, int w, int h)
{
XWindowChanges wc;
+ unsigned int n;
+ unsigned int gapoffset;
+ unsigned int gapincr;
+ Client *nbc;
+
+ wc.border_width = c->bw;
+
+ /* Get number of clients for the client's monitor */
+ for (n = 0, nbc = nexttiled(c->mon->clients); nbc; nbc = nexttiled(nbc->next), n++);
- c->oldx = c->x; c->x = wc.x = x;
- c->oldy = c->y; c->y = wc.y = y;
+ /* Do nothing if layout is floating */
+ if (c->isfloating || c->mon->lt[c->mon->sellt]->arrange == NULL) {
+ gapincr = gapoffset = 0;
+ } else {
+ /* Remove border and gap if layout is monocle or only one client */
+ if (c->mon->lt[c->mon->sellt]->arrange == monocle || n == 1) {
+ gapoffset = 0;
+ gapincr = -2 * borderpx;
+ wc.border_width = 0;
+ } else {
+ gapoffset = gappx;
+ gapincr = 2 * gappx;
+ }
+ }
+
+ c->oldx = c->x; c->x = wc.x = x + gapoffset;
+ c->oldy = c->y; c->y = wc.y = y + gapoffset;
+ c->oldw = c->w; c->w = wc.width = w - gapincr;
+ c->oldh = c->h; c->h = wc.height = h - gapincr;
c->oldw = c->w; c->w = wc.width = w;
c->oldh = c->h; c->h = wc.height = h;
wc.border_width = c->bw;
+ if (((nexttiled(c->mon->clients) == c && !nexttiled(c->next))
+ || &monocle == c->mon->lt[c->mon->sellt]->arrange)
+ && !c->isfullscreen && !c->isfloating
+ && NULL != c->mon->lt[c->mon->sellt]->arrange) {
+ c->w = wc.width += c->bw * 2;
+ c->h = wc.height += c->bw * 2;
+ wc.border_width = 0;
+ }
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
configure(c);
XSync(dpy, False);
@@ -1381,6 +1425,12 @@
}
void
+runAutostart(void) {
+ system("cd ~/.dwm; ./autostart_blocking.sh");
+ system("cd ~/.dwm; ./autostart.sh &");
+}
+
+void
scan(void)
{
unsigned int i, num;
@@ -1520,7 +1570,7 @@
if (!arg || !selmon->lt[selmon->sellt]->arrange)
return;
f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
- if (f < 0.1 || f > 0.9)
+ if (f < 0.05 || f > 0.95)
return;
selmon->mfact = f;
arrange(selmon);
@@ -1688,11 +1738,13 @@
if (i < m->nmaster) {
h = (m->wh - my) / (MIN(n, m->nmaster) - i);
resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
- my += HEIGHT(c);
+ if (my + HEIGHT(c) < m->wh)
+ my += HEIGHT(c);
} else {
h = (m->wh - ty) / (n - i);
resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
- ty += HEIGHT(c);
+ if (ty + HEIGHT(c) < m->wh)
+ ty += HEIGHT(c);
}
}
@@ -1720,6 +1772,13 @@
}
void
+togglefullscr(const Arg *arg)
+{
+ if(selmon->sel)
+ setfullscreen(selmon->sel, !selmon->sel->isfullscreen);
+}
+
+void
toggletag(const Arg *arg)
{
unsigned int newtags;
@@ -2142,8 +2201,112 @@
die("pledge");
#endif /* __OpenBSD__ */
scan();
+ runAutostart();
run();
cleanup();
XCloseDisplay(dpy);
return EXIT_SUCCESS;
}
+
+void
+centeredmaster(Monitor *m)
+{
+ unsigned int i, n, h, mw, mx, my, oty, ety, tw;
+ Client *c;
+
+ /* count number of clients in the selected monitor */
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if (n == 0)
+ return;
+
+ /* initialize areas */
+ mw = m->ww;
+ mx = 0;
+ my = 0;
+ tw = mw;
+
+ if (n > m->nmaster) {
+ /* go mfact box in the center if more than nmaster clients */
+ mw = m->nmaster ? m->ww * m->mfact : 0;
+ tw = m->ww - mw;
+
+ if (n - m->nmaster > 1) {
+ /* only one client */
+ mx = (m->ww - mw) / 2;
+ tw = (m->ww - mw) / 2;
+ }
+ }
+
+ oty = 0;
+ ety = 0;
+ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
+ if (i < m->nmaster) {
+ /* nmaster clients are stacked vertically, in the center
+ * of the screen */
+ h = (m->wh - my) / (MIN(n, m->nmaster) - i);
+ resize(c, m->wx + mx, m->wy + my, mw - (2*c->bw),
+ h - (2*c->bw), 0);
+ my += HEIGHT(c);
+ } else {
+ /* stack clients are stacked vertically */
+ if ((i - m->nmaster) % 2 ) {
+ h = (m->wh - ety) / ( (1 + n - i) / 2);
+ resize(c, m->wx, m->wy + ety, tw - (2*c->bw),
+ h - (2*c->bw), 0);
+ ety += HEIGHT(c);
+ } else {
+ h = (m->wh - oty) / ((1 + n - i) / 2);
+ resize(c, m->wx + mx + mw, m->wy + oty,
+ tw - (2*c->bw), h - (2*c->bw), 0);
+ oty += HEIGHT(c);
+ }
+ }
+}
+
+void
+centeredfloatingmaster(Monitor *m)
+{
+ unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx;
+ Client *c;
+
+ /* count number of clients in the selected monitor */
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if (n == 0)
+ return;
+
+ /* initialize nmaster area */
+ if (n > m->nmaster) {
+ /* go mfact box in the center if more than nmaster clients */
+ if (m->ww > m->wh) {
+ mw = m->nmaster ? m->ww * m->mfact : 0;
+ mh = m->nmaster ? m->wh * 0.9 : 0;
+ } else {
+ mh = m->nmaster ? m->wh * m->mfact : 0;
+ mw = m->nmaster ? m->ww * 0.9 : 0;
+ }
+ mx = mxo = (m->ww - mw) / 2;
+ my = myo = (m->wh - mh) / 2;
+ } else {
+ /* go fullscreen if all clients are in the master area */
+ mh = m->wh;
+ mw = m->ww;
+ mx = mxo = 0;
+ my = myo = 0;
+ }
+
+ for(i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
+ if (i < m->nmaster) {
+ /* nmaster clients are stacked horizontally, in the center
+ * of the screen */
+ w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i);
+ resize(c, m->wx + mx, m->wy + my, w - (2*c->bw),
+ mh - (2*c->bw), 0);
+ mx += WIDTH(c);
+ } else {
+ /* stack clients are stacked horizontally */
+ w = (m->ww - tx) / (n - i);
+ resize(c, m->wx + tx, m->wy, w - (2*c->bw),
+ m->wh - (2*c->bw), 0);
+ tx += WIDTH(c);
+ }
+}
Only in b: dwm.c.orig
Only in b: .git
Only in a: LICENSE
diff --color -u a/README b/README
--- a/README 2019-02-02 18:25:28.000000000 +0530
+++ b/README 2021-05-21 00:15:46.365490600 +0530
@@ -1,48 +1 @@
-dwm - dynamic window manager
-============================
-dwm is an extremely fast, small, and dynamic window manager for X.
-
-
-Requirements
-------------
-In order to build dwm you need the Xlib header files.
-
-
-Installation
-------------
-Edit config.mk to match your local setup (dwm is installed into
-the /usr/local namespace by default).
-
-Afterwards enter the following command to build and install dwm (if
-necessary as root):
-
- make clean install
-
-
-Running dwm
------------
-Add the following line to your .xinitrc to start dwm using startx:
-
- exec dwm
-
-In order to connect dwm to a specific display, make sure that
-the DISPLAY environment variable is set correctly, e.g.:
-
- DISPLAY=foo.bar:1 exec dwm
-
-(This will start dwm on display :1 of the host foo.bar.)
-
-In order to display status info in the bar, you can do something
-like this in your .xinitrc:
-
- while xsetroot -name "`date` `uptime | sed 's/.*,//'`"
- do
- sleep 1
- done &
- exec dwm
-
-
-Configuration
--------------
-The configuration of dwm is done by creating a custom config.h
-and (re)compiling the source code.
+Forked from dwm https://git.suckless.org/dwm and applied official patches

View File

@@ -1,7 +1,7 @@
diff '--color=auto' -u a/config.def.h b/config.def.h diff --color -u a/config.def.h b/config.def.h
--- a/config.def.h 2021-05-18 08:15:14.270294000 +0530 --- a/config.def.h 2020-06-19 14:59:45.000000000 +0530
+++ b/config.def.h 2021-05-18 07:53:37.126991600 +0530 +++ b/config.def.h 2021-05-21 05:21:13.476454500 +0530
@@ -3,9 +3,8 @@ @@ -3,9 +3,10 @@
/* /*
* appearance * appearance
* *
@@ -9,10 +9,12 @@ diff '--color=auto' -u a/config.def.h b/config.def.h
*/ */
-static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true"; -static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
+static char *font = "Fira Mono:style=Regular:pixelsize=16"; +static char *font = "Fira Mono:style=Regular:pixelsize=16";
+static char *font2[] = { "Font Awesome 5 Free Solid:pixelsize=15",
+ "Font Awesome 5 Brands:pixelsize=15" };
static int borderpx = 2; static int borderpx = 2;
/* /*
@@ -16,7 +15,7 @@ @@ -16,7 +17,7 @@
* 4: value of shell in /etc/passwd * 4: value of shell in /etc/passwd
* 5: value of shell in config.h * 5: value of shell in config.h
*/ */
@@ -21,7 +23,7 @@ diff '--color=auto' -u a/config.def.h b/config.def.h
char *utmp = NULL; char *utmp = NULL;
/* scroll program: to enable use a string like "scroll" */ /* scroll program: to enable use a string like "scroll" */
char *scroll = NULL; char *scroll = NULL;
@@ -95,42 +94,37 @@ @@ -95,42 +96,37 @@
/* Terminal colors (16 first used in escape sequence) */ /* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = { static const char *colorname[] = {
@@ -90,7 +92,7 @@ diff '--color=auto' -u a/config.def.h b/config.def.h
/* /*
* Default shape of cursor * Default shape of cursor
@@ -154,7 +148,6 @@ @@ -154,7 +150,6 @@
static unsigned int mouseshape = XC_xterm; static unsigned int mouseshape = XC_xterm;
static unsigned int mousefg = 7; static unsigned int mousefg = 7;
static unsigned int mousebg = 0; static unsigned int mousebg = 0;
@@ -98,7 +100,7 @@ diff '--color=auto' -u a/config.def.h b/config.def.h
/* /*
* Color used to display font attributes when fontconfig selected a font which * Color used to display font attributes when fontconfig selected a font which
* doesn't match the ones requested. * doesn't match the ones requested.
@@ -173,32 +166,36 @@ @@ -173,32 +168,36 @@
* Beware that overloading Button1 will disable the selection. * Beware that overloading Button1 will disable the selection.
*/ */
static MouseShortcut mshortcuts[] = { static MouseShortcut mshortcuts[] = {
@@ -155,7 +157,7 @@ diff '--color=auto' -u a/config.def.h b/config.def.h
}; };
/* /*
@@ -226,229 +223,229 @@ @@ -226,229 +225,229 @@
* If you want keys other than the X11 function keys (0xFD00 - 0xFFFF) * If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
* to be mapped below, add them to this array. * to be mapped below, add them to this array.
*/ */
@@ -597,7 +599,7 @@ diff '--color=auto' -u a/config.def.h b/config.def.h
}; };
/* /*
@@ -459,14 +456,13 @@ @@ -459,14 +458,13 @@
* If no match is found, regular selection is used. * If no match is found, regular selection is used.
*/ */
static uint selmasks[] = { static uint selmasks[] = {
@@ -616,9 +618,11 @@ diff '--color=auto' -u a/config.def.h b/config.def.h
+static char ascii_printable[] = " !\"#$%&'()*+,-./0123456789:;<=>?" +static char ascii_printable[] = " !\"#$%&'()*+,-./0123456789:;<=>?"
+ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+ "`abcdefghijklmnopqrstuvwxyz{|}~"; + "`abcdefghijklmnopqrstuvwxyz{|}~";
diff '--color=auto' -u a/st.c b/st.c Only in b: config.def.h.orig
--- a/st.c 2021-05-18 08:15:14.274578800 +0530 Only in b: config.def.h.rej
+++ b/st.c 2021-03-19 01:52:39.516045300 +0530 diff --color -u a/st.c b/st.c
--- a/st.c 2020-06-19 14:59:45.000000000 +0530
+++ b/st.c 2021-05-21 05:07:22.806708800 +0530
@@ -35,6 +35,7 @@ @@ -35,6 +35,7 @@
#define ESC_ARG_SIZ 16 #define ESC_ARG_SIZ 16
#define STR_BUF_SIZ ESC_BUF_SIZ #define STR_BUF_SIZ ESC_BUF_SIZ
@@ -647,67 +651,18 @@ diff '--color=auto' -u a/st.c b/st.c
int *dirty; /* dirtyness of lines */ int *dirty; /* dirtyness of lines */
TCursor c; /* cursor */ TCursor c; /* cursor */
int ocx; /* old cursor col */ int ocx; /* old cursor col */
@@ -184,20 +191,20 @@ @@ -184,8 +191,8 @@
static void tputtab(int); static void tputtab(int);
static void tputc(Rune); static void tputc(Rune);
static void treset(void); static void treset(void);
-static void tscrollup(int, int); -static void tscrollup(int, int);
-static void tscrolldown(int, int); -static void tscrolldown(int, int);
-static void tsetattr(const int *, int);
-static void tsetchar(Rune, const Glyph *, int, int);
+static void tscrollup(int, int, int); +static void tscrollup(int, int, int);
+static void tscrolldown(int, int, int); +static void tscrolldown(int, int, int);
+static void tsetattr(int *, int); static void tsetattr(int *, int);
+static void tsetchar(Rune, Glyph *, int, int); static void tsetchar(Rune, Glyph *, int, int);
static void tsetdirt(int, int); static void tsetdirt(int, int);
static void tsetscroll(int, int); @@ -414,10 +421,10 @@
static void tswapscreen(void);
-static void tsetmode(int, int, const int *, int);
+static void tsetmode(int, int, int *, int);
static int twrite(const char *, int, int);
static void tfulldirt(void);
static void tcontrolcode(uchar );
static void tdectest(char );
static void tdefutf8(char);
-static int32_t tdefcolor(const int *, int *, int);
+static int32_t tdefcolor(int *, int *, int);
static void tdeftran(char);
static void tstrsequence(uchar);
@@ -226,10 +233,10 @@
static int cmdfd;
static pid_t pid;
-static const uchar utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0};
-static const uchar utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
-static const Rune utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800, 0x10000};
-static const Rune utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF};
+static uchar utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0};
+static uchar utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
+static Rune utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800, 0x10000};
+static Rune utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF};
ssize_t
xwrite(int fd, const char *s, size_t len)
@@ -269,14 +276,12 @@
}
char *
-xstrdup(const char *s)
+xstrdup(char *s)
{
- char *p;
-
- if ((p = strdup(s)) == NULL)
+ if ((s = strdup(s)) == NULL)
die("strdup: %s\n", strerror(errno));
- return p;
+ return s;
}
size_t
@@ -416,10 +421,10 @@
{ {
int i = term.col; int i = term.col;
@@ -720,16 +675,7 @@ diff '--color=auto' -u a/st.c b/st.c
--i; --i;
return i; return i;
@@ -520,7 +525,7 @@ @@ -526,7 +533,7 @@
{
int newx, newy, xt, yt;
int delim, prevdelim;
- const Glyph *gp, *prevgp;
+ Glyph *gp, *prevgp;
switch (sel.snap) {
case SNAP_WORD:
@@ -528,7 +533,7 @@
* Snap around if the word wraps around at the end or * Snap around if the word wraps around at the end or
* beginning of a line. * beginning of a line.
*/ */
@@ -738,7 +684,7 @@ diff '--color=auto' -u a/st.c b/st.c
prevdelim = ISDELIM(prevgp->u); prevdelim = ISDELIM(prevgp->u);
for (;;) { for (;;) {
newx = *x + direction; newx = *x + direction;
@@ -543,14 +548,14 @@ @@ -541,14 +548,14 @@
yt = *y, xt = *x; yt = *y, xt = *x;
else else
yt = newy, xt = newx; yt = newy, xt = newx;
@@ -755,7 +701,7 @@ diff '--color=auto' -u a/st.c b/st.c
delim = ISDELIM(gp->u); delim = ISDELIM(gp->u);
if (!(gp->mode & ATTR_WDUMMY) && (delim != prevdelim if (!(gp->mode & ATTR_WDUMMY) && (delim != prevdelim
|| (delim && gp->u != prevgp->u))) || (delim && gp->u != prevgp->u)))
@@ -571,14 +576,14 @@ @@ -569,14 +576,14 @@
*x = (direction < 0) ? 0 : term.col - 1; *x = (direction < 0) ? 0 : term.col - 1;
if (direction < 0) { if (direction < 0) {
for (; *y > 0; *y += direction) { for (; *y > 0; *y += direction) {
@@ -772,16 +718,7 @@ diff '--color=auto' -u a/st.c b/st.c
& ATTR_WRAP)) { & ATTR_WRAP)) {
break; break;
} }
@@ -593,7 +598,7 @@ @@ -607,13 +614,13 @@
{
char *str, *ptr;
int y, bufsize, lastx, linelen;
- const Glyph *gp, *last;
+ Glyph *gp, *last;
if (sel.ob.x == -1)
return NULL;
@@ -609,13 +614,13 @@
} }
if (sel.type == SEL_RECTANGULAR) { if (sel.type == SEL_RECTANGULAR) {
@@ -798,16 +735,7 @@ diff '--color=auto' -u a/st.c b/st.c
while (last >= gp && last->u == ' ') while (last >= gp && last->u == ' ')
--last; --last;
@@ -760,7 +765,7 @@ @@ -848,6 +855,9 @@
}
int
-ttynew(const char *line, char *cmd, const char *out, char **args)
+ttynew(char *line, char *cmd, char *out, char **args)
{
int m, s;
@@ -850,6 +855,9 @@
ttywrite(const char *s, size_t n, int may_echo) ttywrite(const char *s, size_t n, int may_echo)
{ {
const char *next; const char *next;
@@ -817,7 +745,7 @@ diff '--color=auto' -u a/st.c b/st.c
if (may_echo && IS_SET(MODE_ECHO)) if (may_echo && IS_SET(MODE_ECHO))
twrite(s, n, 1); twrite(s, n, 1);
@@ -1061,13 +1069,53 @@ @@ -1059,13 +1069,53 @@
} }
void void
@@ -872,7 +800,7 @@ diff '--color=auto' -u a/st.c b/st.c
tsetdirt(orig, term.bot-n); tsetdirt(orig, term.bot-n);
tclearregion(0, term.bot-n+1, term.col-1, term.bot); tclearregion(0, term.bot-n+1, term.col-1, term.bot);
@@ -1077,17 +1125,28 @@ @@ -1075,17 +1125,28 @@
term.line[i-n] = temp; term.line[i-n] = temp;
} }
@@ -903,7 +831,7 @@ diff '--color=auto' -u a/st.c b/st.c
tclearregion(0, orig, term.col-1, orig+n-1); tclearregion(0, orig, term.col-1, orig+n-1);
tsetdirt(orig+n, term.bot); tsetdirt(orig+n, term.bot);
@@ -1097,7 +1156,8 @@ @@ -1095,7 +1156,8 @@
term.line[i+n] = temp; term.line[i+n] = temp;
} }
@@ -913,7 +841,7 @@ diff '--color=auto' -u a/st.c b/st.c
} }
void void
@@ -1126,7 +1186,7 @@ @@ -1124,7 +1186,7 @@
int y = term.c.y; int y = term.c.y;
if (y == term.bot) { if (y == term.bot) {
@@ -922,19 +850,7 @@ diff '--color=auto' -u a/st.c b/st.c
} else { } else {
y++; y++;
} }
@@ -1188,9 +1248,9 @@ @@ -1289,14 +1351,14 @@
}
void
-tsetchar(Rune u, const Glyph *attr, int x, int y)
+tsetchar(Rune u, Glyph *attr, int x, int y)
{
- static const char *vt100_0[62] = { /* 0x41 - 0x7e */
+ static char *vt100_0[62] = { /* 0x41 - 0x7e */
"↑", "↓", "→", "←", "█", "▚", "☃", /* A - G */
0, 0, 0, 0, 0, 0, 0, 0, /* H - O */
0, 0, 0, 0, 0, 0, 0, 0, /* P - W */
@@ -1291,18 +1351,18 @@
tinsertblankline(int n) tinsertblankline(int n)
{ {
if (BETWEEN(term.c.y, term.top, term.bot)) if (BETWEEN(term.c.y, term.top, term.bot))
@@ -951,33 +867,7 @@ diff '--color=auto' -u a/st.c b/st.c
} }
int32_t int32_t
-tdefcolor(const int *attr, int *npar, int l) @@ -1733,11 +1795,11 @@
+tdefcolor(int *attr, int *npar, int l)
{
int32_t idx = -1;
uint r, g, b;
@@ -1352,7 +1412,7 @@
}
void
-tsetattr(const int *attr, int l)
+tsetattr(int *attr, int l)
{
int i;
int32_t idx;
@@ -1470,9 +1530,9 @@
}
void
-tsetmode(int priv, int set, const int *args, int narg)
+tsetmode(int priv, int set, int *args, int narg)
{
- int alt; const int *lim;
+ int alt, *lim;
for (lim = args + narg; args < lim; ++args) {
if (priv) {
@@ -1735,11 +1795,11 @@
break; break;
case 'S': /* SU -- Scroll <n> line up */ case 'S': /* SU -- Scroll <n> line up */
DEFAULT(csiescseq.arg[0], 1); DEFAULT(csiescseq.arg[0], 1);
@@ -991,16 +881,23 @@ diff '--color=auto' -u a/st.c b/st.c
break; break;
case 'L': /* IL -- Insert <n> blank lines */ case 'L': /* IL -- Insert <n> blank lines */
DEFAULT(csiescseq.arg[0], 1); DEFAULT(csiescseq.arg[0], 1);
@@ -2022,7 +2082,7 @@ @@ -1853,7 +1915,15 @@
tdumpline(int n) case ']': /* OSC -- Operating System Command */
{ switch (par) {
char buf[UTF_SIZ]; case 0:
- const Glyph *bp, *end; + if (narg > 1) {
+ Glyph *bp, *end; + xsettitle(strescseq.args[1]);
+ xseticontitle(strescseq.args[1]);
bp = &term.line[n][0]; + }
end = &bp[MIN(tlinelen(n), term.col) - 1]; + return;
@@ -2251,7 +2311,7 @@ case 1:
+ if (narg > 1)
+ xseticontitle(strescseq.args[1]);
+ return;
case 2:
if (narg > 1)
xsettitle(strescseq.args[1]);
@@ -2241,7 +2311,7 @@
return 0; return 0;
case 'D': /* IND -- Linefeed */ case 'D': /* IND -- Linefeed */
if (term.c.y == term.bot) { if (term.c.y == term.bot) {
@@ -1009,7 +906,7 @@ diff '--color=auto' -u a/st.c b/st.c
} else { } else {
tmoveto(term.c.x, term.c.y+1); tmoveto(term.c.x, term.c.y+1);
} }
@@ -2264,7 +2324,7 @@ @@ -2254,7 +2324,7 @@
break; break;
case 'M': /* RI -- Reverse index */ case 'M': /* RI -- Reverse index */
if (term.c.y == term.top) { if (term.c.y == term.top) {
@@ -1018,7 +915,7 @@ diff '--color=auto' -u a/st.c b/st.c
} else { } else {
tmoveto(term.c.x, term.c.y-1); tmoveto(term.c.x, term.c.y-1);
} }
@@ -2474,7 +2534,7 @@ @@ -2464,7 +2534,7 @@
void void
tresize(int col, int row) tresize(int col, int row)
{ {
@@ -1027,7 +924,7 @@ diff '--color=auto' -u a/st.c b/st.c
int minrow = MIN(row, term.row); int minrow = MIN(row, term.row);
int mincol = MIN(col, term.col); int mincol = MIN(col, term.col);
int *bp; int *bp;
@@ -2511,6 +2571,14 @@ @@ -2501,6 +2571,14 @@
term.dirty = xrealloc(term.dirty, row * sizeof(*term.dirty)); term.dirty = xrealloc(term.dirty, row * sizeof(*term.dirty));
term.tabs = xrealloc(term.tabs, col * sizeof(*term.tabs)); term.tabs = xrealloc(term.tabs, col * sizeof(*term.tabs));
@@ -1042,7 +939,7 @@ diff '--color=auto' -u a/st.c b/st.c
/* resize each row to new width, zero-pad if needed */ /* resize each row to new width, zero-pad if needed */
for (i = 0; i < minrow; i++) { for (i = 0; i < minrow; i++) {
term.line[i] = xrealloc(term.line[i], col * sizeof(Glyph)); term.line[i] = xrealloc(term.line[i], col * sizeof(Glyph));
@@ -2569,7 +2637,7 @@ @@ -2559,7 +2637,7 @@
continue; continue;
term.dirty[y] = 0; term.dirty[y] = 0;
@@ -1051,7 +948,7 @@ diff '--color=auto' -u a/st.c b/st.c
} }
} }
@@ -2590,8 +2658,9 @@ @@ -2580,8 +2658,9 @@
cx--; cx--;
drawregion(0, 0, term.col, term.row); drawregion(0, 0, term.col, term.row);
@@ -1063,9 +960,9 @@ diff '--color=auto' -u a/st.c b/st.c
term.ocx = cx; term.ocx = cx;
term.ocy = term.c.y; term.ocy = term.c.y;
xfinishdraw(); xfinishdraw();
diff '--color=auto' -u a/st.h b/st.h diff --color -u a/st.h b/st.h
--- a/st.h 2021-05-18 08:15:14.275523400 +0530 --- a/st.h 2020-06-19 14:59:45.000000000 +0530
+++ b/st.h 2021-03-19 01:52:39.517474600 +0530 +++ b/st.h 2021-05-21 05:07:22.806891600 +0530
@@ -81,6 +81,8 @@ @@ -81,6 +81,8 @@
void redraw(void); void redraw(void);
void draw(void); void draw(void);
@@ -1075,62 +972,149 @@ diff '--color=auto' -u a/st.h b/st.h
void printscreen(const Arg *); void printscreen(const Arg *);
void printsel(const Arg *); void printsel(const Arg *);
void sendbreak(const Arg *); void sendbreak(const Arg *);
@@ -91,7 +93,7 @@ diff --color -u a/win.h b/win.h
void tresize(int, int); --- a/win.h 2020-06-19 14:59:45.000000000 +0530
void tsetdirtattr(int); +++ b/win.h 2021-05-21 05:07:22.805511800 +0530
void ttyhangup(void); @@ -30,6 +30,7 @@
-int ttynew(const char *, char *, const char *, char **); void xfinishdraw(void);
+int ttynew(char *, char *, char *, char **); void xloadcols(void);
size_t ttyread(void); int xsetcolorname(int, const char *);
void ttyresize(int, int); +void xseticontitle(char *);
void ttywrite(const char *, size_t, int); void xsettitle(char *);
@@ -109,7 +111,7 @@ int xsetcursor(int);
void xsetmode(int, unsigned int);
void *xmalloc(size_t); diff --color -u a/x.c b/x.c
void *xrealloc(void *, size_t); --- a/x.c 2020-06-19 14:59:45.000000000 +0530
-char *xstrdup(const char *); +++ b/x.c 2021-05-21 05:20:09.551000300 +0530
+char *xstrdup(char *); @@ -93,7 +93,7 @@
Window win;
/* config.h globals */ Drawable buf;
extern char *utmp; GlyphFontSpec *specbuf; /* font spec buffer used for rendering */
diff '--color=auto' -u a/x.c b/x.c - Atom xembed, wmdeletewin, netwmname, netwmpid;
--- a/x.c 2021-05-18 08:15:14.281235100 +0530 + Atom xembed, wmdeletewin, netwmname, netwmiconname, netwmpid;
+++ b/x.c 2021-03-19 01:52:25.361188800 +0530 struct {
@@ -156,7 +156,7 @@ XIM xim;
static void xhints(void); XIC xic;
@@ -157,6 +157,7 @@
static int xloadcolor(int, const char *, Color *); static int xloadcolor(int, const char *, Color *);
static int xloadfont(Font *, FcPattern *); static int xloadfont(Font *, FcPattern *);
-static void xloadfonts(const char *, double); static void xloadfonts(char *, double);
+static void xloadfonts(char *, double); +static void xloadsparefont();
static void xunloadfont(Font *); static void xunloadfont(Font *);
static void xunloadfonts(void); static void xunloadfonts(void);
static void xsetenv(void); static void xsetenv(void);
@@ -387,9 +387,7 @@ @@ -306,6 +307,7 @@
button = 3; {
} else { xunloadfonts();
button -= Button1; xloadfonts(usedfont, arg->f);
- if (button >= 7) + xloadsparefont();
- button += 128 - 7; cresize(0, 0);
- else if (button >= 3) redraw();
+ if (button >= 3) xhints();
button += 64 - 3; @@ -1020,6 +1022,67 @@
}
if (e->xbutton.type == ButtonPress) {
@@ -952,7 +950,7 @@
} }
void void
-xloadfonts(const char *fontstr, double fontsize) +xloadsparefont()
+xloadfonts(char *fontstr, double fontsize) +{
+ FcPattern *fontpattern, *match;
+ FcResult result;
+
+ /* add font2 to font cache as first 4 entries */
+ if ( font2[0] == '-' )
+ fontpattern = XftXlfdParse(font2, False, False);
+ else
+ fontpattern = FcNameParse((FcChar8 *)font2);
+ if ( fontpattern ) {
+ /* Allocate memory for the new cache entries. */
+ frccap += 4;
+ frc = xrealloc(frc, frccap * sizeof(Fontcache));
+ /* add Normal */
+ match = FcFontMatch(NULL, fontpattern, &result);
+ if ( match )
+ frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
+ if ( frc[frclen].font ) {
+ frc[frclen].flags = FRC_NORMAL;
+ frclen++;
+ } else
+ FcPatternDestroy(match);
+ /* add Italic */
+ FcPatternDel(fontpattern, FC_SLANT);
+ FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ITALIC);
+ match = FcFontMatch(NULL, fontpattern, &result);
+ if ( match )
+ frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
+ if ( frc[frclen].font ) {
+ frc[frclen].flags = FRC_ITALIC;
+ frclen++;
+ } else
+ FcPatternDestroy(match);
+ /* add Italic Bold */
+ FcPatternDel(fontpattern, FC_WEIGHT);
+ FcPatternAddInteger(fontpattern, FC_WEIGHT, FC_WEIGHT_BOLD);
+ match = FcFontMatch(NULL, fontpattern, &result);
+ if ( match )
+ frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
+ if ( frc[frclen].font ) {
+ frc[frclen].flags = FRC_ITALICBOLD;
+ frclen++;
+ } else
+ FcPatternDestroy(match);
+ /* add Bold */
+ FcPatternDel(fontpattern, FC_SLANT);
+ FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ROMAN);
+ match = FcFontMatch(NULL, fontpattern, &result);
+ if ( match )
+ frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
+ if ( frc[frclen].font ) {
+ frc[frclen].flags = FRC_BOLD;
+ frclen++;
+ } else
+ FcPatternDestroy(match);
+ FcPatternDestroy(fontpattern);
+ }
+}
+
+void
xunloadfont(Font *f)
{ {
FcPattern *pattern; XftFontClose(xw.dpy, f->match);
double fontval; @@ -1116,6 +1179,9 @@
@@ -960,7 +958,7 @@ usedfont = (opt_font == NULL)? font : opt_font;
if (fontstr[0] == '-') xloadfonts(usedfont, 0);
pattern = XftXlfdParse(fontstr, False, False);
else
- pattern = FcNameParse((const FcChar8 *)fontstr);
+ pattern = FcNameParse((FcChar8 *)fontstr);
if (!pattern) + /* spare font (font2) */
die("can't open font %s\n", fontstr); + xloadsparefont();
+
/* colors */
xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
xloadcols();
@@ -1186,6 +1252,7 @@
xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False);
xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False);
xw.netwmname = XInternAtom(xw.dpy, "_NET_WM_NAME", False);
+ xw.netwmiconname = XInternAtom(xw.dpy, "_NET_WM_ICON_NAME", False);
XSetWMProtocols(xw.dpy, xw.win, &xw.wmdeletewin, 1);
xw.netwmpid = XInternAtom(xw.dpy, "_NET_WM_PID", False);
@@ -1580,6 +1647,19 @@
}
void
+xseticontitle(char *p)
+{
+ XTextProperty prop;
+ DEFAULT(p, opt_title);
+
+ Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
+ &prop);
+ XSetWMIconName(xw.dpy, xw.win, &prop);
+ XSetTextProperty(xw.dpy, xw.win, &prop, xw.netwmiconname);
+ XFree(prop.value);
+}
+
+void
xsettitle(char *p)
{
XTextProperty prop;
Only in b: x.c.orig