hlfw.ca

9hkd

Download patch

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