ref: 78e15f5ca601cbe6f941ea874ad47e1b340c0cc0
parent: 4b4eadc9db54ec0f15708ac9a6902725e27ff1af
author: Michael Misch <michaelmisch1985@gmail.com>
date: Sat Aug 24 15:28:36 PDT 2024
"update
--- a/9hkd.c
+++ b/9hkd.c
@@ -18,7 +18,7 @@
Fcurrent = 1<<1,
Fsticky = 1<<2,
Ffullscreen = 1<<3,
- ntags = 6,
+ ntags = 6, /* One offset, so we up this to 7 everywhere it's used */
};
struct W {
@@ -30,15 +30,15 @@
int stickyforced;
};
-static int vd = 1; /* current virtual desktop */
+static W *ws, *wcur;
static int wsys; /* rios /dev/wsys fd */
static int mod;
-static int usetags;
-static W *ws, *wcur;
static int wsn;
-static int tgvis[ntags] = {-1};
+static int vd = 1; /* current virtual desktop */
+static int usetags;
+static int tgvis[ntags+1] = {-1};
static int vd2wcur[10] = {-1};
-static int tg2wcur[ntags] = {-1};
+static int tg2wcur[ntags+1] = {-1};
static char *sticky[32] = {
"bar",
@@ -51,6 +51,30 @@
nil,
};
+void
+wslayout(void)
+{
+ W *w;
+ int f;
+ char s[64];
+
+ for(w = ws; w < ws+wsn; w++){
+ if(w->flags & (Fsticky|Fvisible) == Fvisible)
+ continue;
+ snprint(s, sizeof(s), "/dev/wsys/%d/wctl", w->id);
+ if((f = open(s, OWRITE)) < 0)
+ continue;
+
+ /*fprint(f, "move -maxx %+d -maxy %+d -minx %+d -miny %+d",
+ w->r.max.x,
+ w->r.max.y,
+ w->r.min.x,
+ w->r.min.y
+ );*/
+ close(f);
+ }
+}
+
static int
wwctl(int id, int mode)
{
@@ -172,7 +196,8 @@
if(wcur == nil || (f = wwctl(wcur->id, OWRITE)) < 0)
return;
fprint(f, "delete");
- close(f);
+ close(f);
+ wslayout();
}
static void
@@ -186,9 +211,12 @@
wcur->flags ^= Ffullscreen;
if(wcur->flags & Ffullscreen)
fprint(f, "resize -r 0 0 9999 9999");
- else
+ else {
fprint(f, "resize -r %d %d %d %d", wcur->r.min.x, wcur->r.min.y, wcur->r.max.x, wcur->r.max.y);
+ wslayout();
+ }
close(f);
+
}
static void
@@ -237,6 +265,7 @@
close(wcurf);
}
tgvis[nvd] = flip;
+ wslayout();
} else if(mod == (Mmod4 | Mshift) && wcur != nil){
tgvis[nvd] = 1;
wcur->tg = nvd;
@@ -244,21 +273,22 @@
wcur = nil;
}
int i;
- fprint(3, "-- ");
for(i = 1; i <= ntags; i++) {
switch(tgvis[i]){
case -1:
- fprint(3, "u ");
+ fprint(3, " ○");
break;
case 0:
- fprint(3, "o ");
+ fprint(3, " ◌");
break;
case 1:
- fprint(3, "n ");
+ fprint(3, " ◍");
break;
}
+ if(i < ntags)
+ fprint(3, " │");
}
- fprint(3, "--\n");
+ fprint(3, "\n");
}
static void
@@ -339,6 +369,7 @@
fprint(f, "move -minx %+d -miny %+d", x, y);
else
fprint(f, "resize -maxx %+d -maxy %+d -minx %+d -miny %+d", x, y, -x, -y);
+ wslayout();
close(f);
}
@@ -393,6 +424,14 @@
keyevent(char c, Rune r)
{
if(c == 'c'){
+ if(r == 'o' && mod == Mmod4){
+ spawn("wmenu");
+ return 0;
+ }
+ if(r == 'p' && mod == Mmod4){
+ spawn("pmenu");
+ return 0;
+ }
if(r == 'n' && mod == Mmod4){
spawn("fmenu");
return 0;
@@ -570,3 +609,4 @@
exits(nil);
}
+
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
# Fork of riow from 9front
+This adds things to spawn menus, close windows with keys I am used to, and us tags instead of workspaces
\ No newline at end of file