From: sirjofri+ml-9front@sirjofri.de
To: 9front@9front.org
Subject: Re: [9front] patch: tweak plumb support
Date: Mon, 07 Dec 2020 10:44:12 +0100 [thread overview]
Message-ID: <FF940F599E8115FAA8E682076DCE2EF0@sirjofri.de> (raw)
In-Reply-To: <48FC1DE9CD68A9B79FFC032531CB979C@sirjofri.de>
[-- Attachment #1: Type: text/plain, Size: 71 bytes --]
Good morning,
I found a bug and made a fix. Here it is!
sirjofri
.
[-- Attachment #2: Type: text/plain, Size: 3340 bytes --]
diff -r 2647ea8b9793 sys/man/1/tweak
--- a/sys/man/1/tweak Sun Dec 06 21:52:01 2020 +0100
+++ b/sys/man/1/tweak Mon Dec 07 10:38:50 2020 +0100
@@ -155,6 +155,18 @@
Quit
.IR tweak .
The program will complain once about modified but unwritten files.
+.PP
+.I Tweak
+listens to the
+.I plumber
+channel
+.B imageedit
+for filenames as well as image data. Plumbed image data is stored as files in
+.B /tmp
+and is
+.I not
+cleaned after exiting
+.IR tweak .
.SH SOURCE
.B /sys/src/cmd/tweak.c
.SH "SEE ALSO"
diff -r 2647ea8b9793 sys/src/cmd/tweak.c
--- a/sys/src/cmd/tweak.c Sun Dec 06 21:52:01 2020 +0100
+++ b/sys/src/cmd/tweak.c Mon Dec 07 10:38:50 2020 +0100
@@ -3,8 +3,11 @@
#include <draw.h>
#include <cursor.h>
#include <event.h>
+#include <plumb.h>
#include <bio.h>
+#define Eplumb 128
+
typedef struct Thing Thing;
struct Thing
@@ -157,6 +160,7 @@
int but1val = 0;
int but2val = 255;
int invert = 0;
+int blockinput = 0;
Image *values[256];
Image *greyvalues[256];
uchar data[8192];
@@ -172,12 +176,25 @@
void tclose1(Thing*);
void
+flushevents(ulong keys)
+{
+ Event e;
+ if(keys == 0)
+ return;
+ while(ecanread(keys))
+ eread(keys, &e);
+}
+
+void
main(int argc, char *argv[])
{
- int i;
+ int i, n;
Event e;
Thing *t;
+ Plumbmsg *pm;
+ char *s;
+ srand(time(0));
mag = Mag;
if(initdraw(error, 0, "tweak") < 0){
fprint(2, "tweak: initdraw failed: %r\n");
@@ -190,6 +207,7 @@
drawerror(display, "can't allocate image");
}
einit(Emouse|Ekeyboard);
+ eplumb(Eplumb, "imageedit");
eresized(0);
i = 1;
setjmp(err);
@@ -214,6 +232,63 @@
}
if(mouse.buttons & 4)
menu();
+ break;
+ case Eplumb:
+ pm = e.v;
+ if(pm->ndata == 0)
+ break;
+ s = plumblookup(pm->attr, "action");
+ if(s && strcmp(s, "showdata") == 0){
+ n = 0;
+ Tmpretry:
+ file = smprint("/tmp/tweaktmp.%d", rand());
+ if(file == 0){
+ mesg("malloc failed: %r");
+ goto Plumbout;
+ }
+ i = create(file, OWRITE|OEXCL, 0600);
+ if(i == 0){
+ free(file);
+ if(n++ < 10)
+ goto Tmpretry;
+ else{
+ mesg("cannot create tmpfiles: too many attempts");
+ goto Plumberrout;
+ }
+ }
+ if(write(i, pm->data, pm->ndata) != pm->ndata){
+ mesg("error writing tmpfile: %r");
+ close(i);
+ free(file);
+ goto Plumberrout;
+ }
+ close(i);
+ goto Plumbout;
+ }
+ file = malloc(pm->ndata+1);
+ if(file == 0){
+ mesg("malloc failed: %r");
+ goto Plumberrout;
+ }
+ strncpy(file, pm->data, pm->ndata);
+ file[pm->ndata] = 0;
+ free(pm->data);
+ pm->data = file;
+ switch(pm->data[0]){
+ case '/':
+ file = pm->data;
+ break;
+ default:
+ file = smprint("%s/%s", pm->wdir, pm->data);
+ }
+ Plumbout:
+ t = tget(file);
+ if(t)
+ drawthing(t, 1);
+ flushimage(display, 1);
+ file = 0;
+ Plumberrout:
+ plumbfree(pm);
}
}
@@ -531,6 +606,12 @@
nt->tr.max.y = nt->tr.min.y + nl;
nt->er.max.y = nt->tr.max.y + Border;
text(nt);
+
+ mesg("");
+ if(blockinput){
+ flushevents(Emouse|Ekeyboard);
+ blockinput = 0;
+ }
}
int
@@ -557,6 +638,9 @@
uchar buf[256];
char *data;
+ mesg("reading %s", file);
+ blockinput = 1;
+
buf[0] = '\0';
errstr((char*)buf, sizeof buf); /* flush pending error message */
memmove(oerr, err, sizeof err);
next prev parent reply other threads:[~2020-12-07 9:46 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-04 10:30 sirjofri+ml-9front
2020-12-04 10:47 ` sirjofri+ml-9front
2020-12-05 15:13 ` sirjofri+ml-9front
2020-12-07 9:44 ` sirjofri+ml-9front [this message]
2020-12-07 15:43 ` ori
2020-12-07 20:26 ` sirjofri+ml-9front
2020-12-21 15:34 ` sirjofri+ml-9front
2021-01-12 10:12 sirjofri
2021-01-13 22:06 ` ori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=FF940F599E8115FAA8E682076DCE2EF0@sirjofri.de \
--to=sirjofri+ml-9front@sirjofri.de \
--cc=9front@9front.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).