]> git.lizzy.rs Git - plan9front.git/commitdiff
acme/win: implement /dev/wdir file in win to change directory tagline, remove awd
authorcinap_lenrek <cinap_lenrek@felloff.net>
Wed, 29 Jun 2016 22:46:52 +0000 (00:46 +0200)
committercinap_lenrek <cinap_lenrek@felloff.net>
Wed, 29 Jun 2016 22:46:52 +0000 (00:46 +0200)
acme/bin/source/win/dat.h
acme/bin/source/win/fs.c
acme/bin/source/win/main.c
acme/bin/source/win/win.c
sys/src/cmd/awd.c [deleted file]

index 38d31dcf01cf43141cda9dde5a975fde44e2e74f..c4d0c3ccddfd52ac47fc1ccecdfa1ee0494a6b77 100644 (file)
@@ -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;
 
index 8f1ed7997c38c0479860f3e53fc0c0e559994a6e..9f2efe06e9c9049aa9de74a0d0a7db810015a863 100644 (file)
@@ -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);
 }
index 916f2b05f7630d631815a328af67586952a3db2d..214356a4827097a338b2669d9f95343b2c051853 100644 (file)
@@ -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
index 2e7f883ed71975f3441a5da4431215fbc23408a5..54f3bda025f7ff371fb27fe3642d16384487c063 100644 (file)
@@ -33,6 +33,15 @@ winsetdump(Window *w, char *dir, char *cmd)
                ctlprint(w->ctl, "dump %s\n", 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)
 {
diff --git a/sys/src/cmd/awd.c b/sys/src/cmd/awd.c
deleted file mode 100644 (file)
index 6bfd6c5..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <u.h>
-#include <libc.h>
-
-/*
- * like fprint but be sure to deliver as a single write.
- * (fprint uses a small write buffer.)
- */
-void
-xfprint(int fd, char *fmt, ...)
-{
-       char *s;
-       va_list arg;
-
-       va_start(arg, fmt);
-       s = vsmprint(fmt, arg);
-       va_end(arg);
-       if(s == nil)
-               sysfatal("smprint: %r");
-       write(fd, s, strlen(s));
-       free(s);
-}
-
-void
-main(int argc, char **argv)
-{
-       int fd;
-       char dir[512];
-
-       fd = open("/dev/acme/ctl", OWRITE);
-       if(fd < 0)
-               exits(0);
-       getwd(dir, 512);
-       if(dir[0]!=0 && dir[strlen(dir)-1]=='/')
-               dir[strlen(dir)-1] = 0;
-       xfprint(fd, "name %s/-%s\n",  dir, argc > 1 ? argv[1] : "rc");
-       xfprint(fd, "dumpdir %s\n", dir);
-       exits(0);
-}