ref: d5992857bbb2947b46ddf7d451a40dcd3e31e0e4
parent: 7b8c6ae432dafda5dcc36967b9c122fb547b4e55
author: spew <devnull@localhost>
date: Tue Oct 25 18:53:38 EDT 2016
winwatch: middle mouse button click also prompts for label
--- a/sys/man/1/winwatch
+++ b/sys/man/1/winwatch
@@ -16,6 +16,8 @@
.IR rio (4)
windows, refreshing the display every five seconds.
Right clicking a window's label unhides, raises and gives focus to that window.
+Right clicking a window again hides the window.
+Middle clicking a window's label prompts for a new label.
Typing
.B q
or
@@ -24,7 +26,7 @@
.IR winwatch .
Typing
.B l
-and selecting a window by left click prompts for a new label.
+and selecting a window by a click also prompts for a new label.
.PP
If the
.B -e
--- a/sys/src/cmd/winwatch.c
+++ b/sys/src/cmd/winwatch.c
@@ -236,13 +236,53 @@
}
int
-click(Mouse m)
+label(Win w, Mouse m)
{
+ char buf[512], fname[128];
+ int n, fd;
+
+ buf[0] = 0;
+ n = eenter("label?", buf, sizeof(buf), &m);
+ if(n <= 0)
+ return 0;
+ sprint(fname, "/dev/wsys/%d/label", w.n);
+ if((fd = open(fname, OWRITE)) < 0)
+ return 0;
+ write(fd, buf, n);
+ close(fd);
+ refreshwin();
+ redraw(screen, 1);
+ return 1;
+}
+
+int
+unhide(Win w)
+{
char buf[128];
- int fd, i;
+ int fd;
- if((m.buttons & 7) != 4)
+ sprint(buf, "/dev/wsys/%d/wctl", w.n);
+ if((fd = open(buf, OWRITE)) < 0)
return 0;
+ if(w.state == (CURRENT|VISIBLE))
+ write(fd, "hide\n", 5);
+ else {
+ write(fd, "unhide\n", 7);
+ write(fd, "top\n", 4);
+ write(fd, "current\n", 8);
+ }
+ close(fd);
+ return 1;
+}
+
+int
+click(Mouse m)
+{
+ int i, b;
+
+ b = m.buttons & 7;
+ if(b != 2 && b != 4)
+ return 0;
for(i=0; i<nwin; i++)
if(ptinrect(m.xy, win[i].r))
break;
@@ -250,21 +290,16 @@
return 0;
do
m = emouse();
- while((m.buttons & 7) == 4);
+ while((m.buttons & 7) == b);
if((m.buttons & 7) || !ptinrect(m.xy, win[i].r))
return 0;
- sprint(buf, "/dev/wsys/%d/wctl", win[i].n);
- if((fd = open(buf, OWRITE)) < 0)
- return 0;
- if(win[i].state == (CURRENT|VISIBLE))
- write(fd, "hide\n", 5);
- else {
- write(fd, "unhide\n", 7);
- write(fd, "top\n", 4);
- write(fd, "current\n", 8);
+ switch(b) {
+ case 2:
+ return label(win[i], m);
+ case 4:
+ return unhide(win[i]);
}
- close(fd);
return 1;
}
@@ -281,11 +316,10 @@
};
void
-chlabel(void)
+kbdlabel(void)
{
Mouse m;
- char buf[512], fname[128];
- int i, n, fd;
+ int i;
esetcursor(&crosscursor);
do
@@ -302,17 +336,7 @@
break;
if(i == nwin)
return;
- buf[0] = 0;
- n = eenter("label?", buf, sizeof(buf), &m);
- if(n <= 0)
- return;
- sprint(fname, "/dev/wsys/%d/label", win[i].n);
- if((fd = open(fname, OWRITE)) < 0)
- return;
- write(fd, buf, n);
- close(fd);
- refreshwin();
- redraw(screen, 1);
+ label(win[i], m);
}
void
@@ -370,7 +394,7 @@
if(e.kbdc==Kdel || e.kbdc=='q')
exits(0);
if(e.kbdc == 'l')
- chlabel();
+ kbdlabel();
break;
case Emouse:
if(click(e.mouse) == 0)