fix :5 in window (don't open directory).
search for file windows better (don't lose files).
This commit is contained in:
parent
baf7825e82
commit
5a3960716d
2 changed files with 29 additions and 28 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue