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;
mountacme();
if((fid = fsopen(acmefs, "index", ORDWR)) == nil)
if((fid = fsopen(acmefs, "index", OREAD)) == nil)
return nil;
s = fsreadm(fid);
fsclose(fid);

View file

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