fix :5 in window (don't open directory).

search for file windows better (don't lose files).
This commit is contained in:
rsc 2005-03-21 03:59:19 +00:00
parent baf7825e82
commit 5a3960716d
2 changed files with 29 additions and 28 deletions

View file

@ -290,7 +290,7 @@ winindex(void)
char *s; char *s;
mountacme(); mountacme();
if((fid = fsopen(acmefs, "index", ORDWR)) == nil) if((fid = fsopen(acmefs, "index", OREAD)) == nil)
return nil; return nil;
s = fsreadm(fid); s = fsreadm(fid);
fsclose(fid); fsclose(fid);

View file

@ -81,22 +81,33 @@ arg(char *file, char *addr, Channel *c)
return a; return a;
} }
Win*
winbyid(int id)
{
Win *w;
for(w=windows; w; w=w->next)
if(w->id == id)
return w;
return nil;
}
/* /*
* return window id of a window named name or name/ * return Win* of a window named name or name/
* assumes name is cleaned. * assumes name is cleaned.
*/ */
int Win*
nametowinid(char *name) nametowin(char *name)
{ {
char *index, *p, *next; char *index, *p, *next;
int len, n; int len, n;
Win *w;
index = winindex(); index = winindex();
n = -1;
len = strlen(name); len = strlen(name);
for(p=index; p && *p; p=next){ for(p=index; p && *p; p=next){
if((next = strchr(p, '\n')) != nil) if((next = strchr(p, '\n')) != nil)
*next = 0; *next++ = 0;
if(strlen(p) <= 5*12) if(strlen(p) <= 5*12)
continue; continue;
if(memcmp(p+5*12, name, len)!=0) if(memcmp(p+5*12, name, len)!=0)
@ -104,30 +115,16 @@ nametowinid(char *name)
if(p[5*12+len]!=' ' && (p[5*12+len]!='/' || p[5*12+len+1]!=' ')) if(p[5*12+len]!=' ' && (p[5*12+len]!='/' || p[5*12+len+1]!=' '))
continue; continue;
n = atoi(p); n = atoi(p);
break; if((w = winbyid(n)) != nil){
free(index);
return w;
}
} }
free(index); free(index);
return n;
}
/*
* look up window by name
*/
Win*
nametowin(char *name)
{
int id;
Win *w;
id = nametowinid(name);
if(id == -1)
return nil;
for(w=windows; w; w=w->next)
if(w->id == id)
return w;
return nil; return nil;
} }
/* /*
* look for s in list * look for s in list
*/ */
@ -393,11 +390,14 @@ do3(Win *w, char *text)
name = estrdup(text); name = estrdup(text);
else{ else{
p = wingetname(w); p = wingetname(w);
q = strrchr(p, '/'); if(text[0] != ':'){
*(q+1) = 0; q = strrchr(p, '/');
*(q+1) = 0;
}
name = emalloc(strlen(p)+1+strlen(text)+1); name = emalloc(strlen(p)+1+strlen(text)+1);
strcpy(name, p); strcpy(name, p);
strcat(name, "/"); if(text[0] != ':')
strcat(name, "/");
strcat(name, text); strcat(name, text);
} }
dprint("do3 %s => %s\n", text, name); dprint("do3 %s => %s\n", text, name);
@ -417,6 +417,7 @@ do3(Win *w, char *text)
free(path); free(path);
if(strcmp(type, "file")==0 || strcmp(type, "directory")==0){ if(strcmp(type, "file")==0 || strcmp(type, "directory")==0){
w = nametowin(name); w = nametowin(name);
fprint(2, "nametowin %s: %p\n", name);
if(w == nil) if(w == nil)
w = mkwin(name); w = mkwin(name);
winaddr(w, "%s", addr); winaddr(w, "%s", addr);