aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2020-01-13 20:02:54 -0500
committerRuss Cox <rsc@swtch.com>2020-01-13 23:17:39 -0500
commit7b1c85f6e8031a50e8e6f5977d12bea820e921ca (patch)
tree2a124cb270f8731fdb2eb245e7b1ea74e9b54bf2 /src
parent26cae02da740b05da97868b517c58b05f0e37e07 (diff)
downloadplan9port-7b1c85f6e8031a50e8e6f5977d12bea820e921ca.tar.gz
plan9port-7b1c85f6e8031a50e8e6f5977d12bea820e921ca.tar.bz2
plan9port-7b1c85f6e8031a50e8e6f5977d12bea820e921ca.zip
acme: allow spaces in window names
There are many things we could do to make this work. an environment variable to control the character. Another option would be to use U+00A0 (non-breaking space), which renders the same as space. This change avoids changing the separator character and instead assumes that if the left side of the tag already ends in " Del Snarf |" then what comes before that is the file name. Acme already aggressively preserves the "Del Snarf |", so this should work decently well as a stop-gap. We can always try something else later. Fixes #26. Fixes #104. Fixes #329.
Diffstat (limited to 'src')
-rw-r--r--src/cmd/acme/look.c2
-rw-r--r--src/cmd/acme/wind.c23
2 files changed, 20 insertions, 5 deletions
diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
index 7b70e242..bde8b2c9 100644
--- a/src/cmd/acme/look.c
+++ b/src/cmd/acme/look.c
@@ -610,7 +610,7 @@ expandfile(Text *t, uint q0, uint q1, Expand *e)
if(nname == -1)
nname = n;
for(i=0; i<nname; i++)
- if(!isfilec(r[i]))
+ if(!isfilec(r[i]) && r[i] != ' ')
goto Isntfile;
/*
* See if it's a file name in <>, and turn that into an include
diff --git a/src/cmd/acme/wind.c b/src/cmd/acme/wind.c
index 156835da..248680fe 100644
--- a/src/cmd/acme/wind.c
+++ b/src/cmd/acme/wind.c
@@ -439,16 +439,31 @@ wincleartag(Window *w)
Rune*
parsetag(Window *w, int *len)
{
+ static Rune Ldelsnarf[] = { ' ', 'D', 'e', 'l', ' ', 'S', 'n', 'a', 'r', 'f', 0 };
+ static Rune Lspacepipe[] = { ' ', '|', 0 };
+ static Rune Ltabpipe[] = { ' ', '|', 0 };
int i;
- Rune *r;
+ Rune *r, *p, *pipe;
r = runemalloc(w->tag.file->b.nc+1);
bufread(&w->tag.file->b, 0, r, w->tag.file->b.nc);
r[w->tag.file->b.nc] = '\0';
- for(i=0; i<w->tag.file->b.nc; i++)
- if(r[i]==' ' || r[i]=='\t')
- break;
+ /*
+ * " |" or "\t|" ends left half of tag
+ * If we find " Del Snarf" in the left half of the tag
+ * (before the pipe), that ends the file name.
+ */
+ pipe = runestrstr(r, Lspacepipe);
+ if((p = runestrstr(r, Ltabpipe)) != nil && (pipe == nil || p < pipe))
+ pipe = p;
+ if((p = runestrstr(r, Ldelsnarf)) != nil && (pipe == nil || p < pipe))
+ i = p - r;
+ else {
+ for(i=0; i<w->tag.file->b.nc; i++)
+ if(r[i]==' ' || r[i]=='\t')
+ break;
+ }
*len = i;
return r;
}