diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-06-30 00:46:52 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-06-30 00:46:52 +0200 |
commit | 828ec57d652618e1d9cecb8fb6cc588afc063dca (patch) | |
tree | 76720c72de4a127f75463fd9a73bec8668f4e081 /acme/bin/source | |
parent | 65977417e7cc5919f7c9787f97a528e8c24d2423 (diff) | |
download | plan9front-828ec57d652618e1d9cecb8fb6cc588afc063dca.tar.xz |
acme/win: implement /dev/wdir file in win to change directory tagline, remove awd
Diffstat (limited to 'acme/bin/source')
-rw-r--r-- | acme/bin/source/win/dat.h | 3 | ||||
-rw-r--r-- | acme/bin/source/win/fs.c | 29 | ||||
-rw-r--r-- | acme/bin/source/win/main.c | 27 | ||||
-rw-r--r-- | acme/bin/source/win/win.c | 9 |
4 files changed, 51 insertions, 17 deletions
diff --git a/acme/bin/source/win/dat.h b/acme/bin/source/win/dat.h index 38d31dcf0..c4d0c3ccd 100644 --- a/acme/bin/source/win/dat.h +++ b/acme/bin/source/win/dat.h @@ -66,6 +66,7 @@ extern int winselect(Window*, char*, int); extern int winsetaddr(Window*, char*, int); extern void windormant(Window*); extern void winsetdump(Window*, char*, char*); +extern void winsetdir(Window*, char*, char*); extern void ctlprint(int, char*, ...); extern void* emalloc(uint); @@ -90,6 +91,8 @@ extern void pipectl(void*); #pragma varargck argpos error 1 #pragma varargck argpos ctlprint 2 +extern char *wname; +extern char *wdir; extern Window *win; extern Channel *fschan, *writechan; diff --git a/acme/bin/source/win/fs.c b/acme/bin/source/win/fs.c index 8f1ed7997..9f2efe06e 100644 --- a/acme/bin/source/win/fs.c +++ b/acme/bin/source/win/fs.c @@ -8,7 +8,7 @@ Channel *fschan; Channel *writechan; -static File *devcons, *devnew; +static File *devcons, *devnew, *devwdir; static void fsread(Req *r) @@ -25,7 +25,12 @@ fsread(Req *r) return; } - assert(r->fid->file == devcons); + if(r->fid->file == devwdir){ + readstr(r, wdir); + respond(r, nil); + return; + } + e.type = 'r'; e.r = r; send(fschan, &e); @@ -72,6 +77,23 @@ fswrite(Req *r) return; } + if(r->fid->file == devwdir){ + s = emalloc(r->ifcall.count+1); + memmove(s, r->ifcall.data, r->ifcall.count); + s[r->ifcall.count] = 0; + if(s[0] == '#' || s[0] == '/'){ + free(wdir); + wdir = s; + } else { + wdir = eappend(wdir, "/", s); + free(s); + } + cleanname(wdir); + winsetdir(win, wdir, wname); + respond(r, nil); + return; + } + if(r->fid->file != devcons){ respond(r, "bug in fswrite"); return; @@ -161,5 +183,8 @@ mountcons(void) devnew = createfile(fs.tree->root, "wnew", "win", 0666, nil); if(devnew == nil) sysfatal("creating /dev/wnew: %r"); + devwdir = createfile(fs.tree->root, "wdir", "win", 0666, nil); + if(devwdir == nil) + sysfatal("creating /dev/wdir: %r"); threadpostmountsrv(&fs, nil, "/dev", MBEFORE); } diff --git a/acme/bin/source/win/main.c b/acme/bin/source/win/main.c index 916f2b05f..214356a48 100644 --- a/acme/bin/source/win/main.c +++ b/acme/bin/source/win/main.c @@ -16,6 +16,8 @@ int notepg; int eraseinput; int dirty = 0; +char *wname; +char *wdir; Window *win; /* the main window */ void @@ -29,7 +31,6 @@ void threadmain(int argc, char *argv[]) { int i, j; - char *dir, *tag, *name; char buf[1024], **av; quotefmtinstall(); @@ -52,27 +53,23 @@ threadmain(int argc, char *argv[]) av = emalloc(3*sizeof(char*)); av[0] = "rc"; av[1] = "-i"; - name = getenv("sysname"); }else{ av = argv; - name = utfrrune(av[0], '/'); - if(name) - name++; - else - name = av[0]; } - + wname = utfrrune(av[0], '/'); + if(wname) + wname++; + else + wname = av[0]; if(getwd(buf, sizeof buf) == 0) - dir = "/"; + wdir = "/"; else - dir = buf; - dir = estrdup(dir); - tag = estrdup(dir); - tag = eappend(estrdup(tag), "/-", name); + wdir = buf; + wdir = estrdup(wdir); win = newwindow(); snprint(buf, sizeof buf, "%d", win->id); putenv("winid", buf); - winname(win, tag); + winsetdir(win, wdir, wname); wintagwrite(win, "Send Noscroll", 5+8); threadcreate(mainctl, win, STACK); mountcons(); @@ -89,7 +86,7 @@ threadmain(int argc, char *argv[]) } ctlprint(win->ctl, "scroll"); - winsetdump(win, dir, buf); + winsetdump(win, wdir, buf); } int diff --git a/acme/bin/source/win/win.c b/acme/bin/source/win/win.c index 2e7f883ed..54f3bda02 100644 --- a/acme/bin/source/win/win.c +++ b/acme/bin/source/win/win.c @@ -34,6 +34,15 @@ winsetdump(Window *w, char *dir, char *cmd) } void +winsetdir(Window *w, char *dir, char *name) +{ + ctlprint(w->ctl, "dumpdir %s\n", dir); + if(strcmp(dir, "/")==0) + dir++; + ctlprint(w->ctl, "name %s/-%s\n", dir, name); +} + +void wineventproc(void *v) { Window *w; |