summaryrefslogtreecommitdiff
path: root/acme/bin/source
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2016-06-30 00:46:52 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2016-06-30 00:46:52 +0200
commit828ec57d652618e1d9cecb8fb6cc588afc063dca (patch)
tree76720c72de4a127f75463fd9a73bec8668f4e081 /acme/bin/source
parent65977417e7cc5919f7c9787f97a528e8c24d2423 (diff)
downloadplan9front-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.h3
-rw-r--r--acme/bin/source/win/fs.c29
-rw-r--r--acme/bin/source/win/main.c27
-rw-r--r--acme/bin/source/win/win.c9
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;