aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-09-28 16:10:49 +0000
committerrsc <devnull@localhost>2004-09-28 16:10:49 +0000
commit53998c99d6e793522fdd4afcb25ab6fb7427ec9c (patch)
tree5d6a58bbbfdc04514e524d86efee08b61593e8fb /src
parentad6638adc744a21b2c424ab74e2df03b42bef0fc (diff)
downloadplan9port-53998c99d6e793522fdd4afcb25ab6fb7427ec9c.tar.gz
plan9port-53998c99d6e793522fdd4afcb25ab6fb7427ec9c.tar.bz2
plan9port-53998c99d6e793522fdd4afcb25ab6fb7427ec9c.zip
autoindent fixes from rob
Diffstat (limited to 'src')
-rw-r--r--src/cmd/acme/exec.c37
-rw-r--r--src/cmd/acme/wind.c2
2 files changed, 27 insertions, 12 deletions
diff --git a/src/cmd/acme/exec.c b/src/cmd/acme/exec.c
index a24e885d..37d5edae 100644
--- a/src/cmd/acme/exec.c
+++ b/src/cmd/acme/exec.c
@@ -1172,20 +1172,27 @@ static Rune LON[] = { 'O', 'N', 0 };
static Rune LOFF[] = { 'O', 'F', 'F', 0 };
static Rune Lon[] = { 'o', 'n', 0 };
+enum {
+ IGlobal = -2,
+ IError = -1,
+ Ion = 0,
+ Ioff = 1,
+};
+
static int
indentval(Rune *s, int n)
{
if(n < 2)
- return -1;
+ return IError;
if(runestrncmp(s, LON, n) == 0){
globalautoindent = TRUE;
warning(nil, "Indent ON\n");
- return -2;
+ return IGlobal;
}
if(runestrncmp(s, LOFF, n) == 0){
globalautoindent = FALSE;
warning(nil, "Indent OFF\n");
- return -2;
+ return IGlobal;
}
return runestrncmp(s, Lon, n) == 0;
}
@@ -1201,10 +1208,10 @@ indent(Text *et, Text *_0, Text *argt, int _1, int _2, Rune *arg, int narg)
USED(_1);
USED(_2);
- if(et==nil || et->w==nil)
- return;
- w = et->w;
- autoindent = -1;
+ w = nil;
+ if(et!=nil && et->w!=nil)
+ w = et->w;
+ autoindent = IError;
getarg(argt, FALSE, TRUE, &r, &len);
if(r!=nil && len>0)
autoindent = indentval(r, len);
@@ -1213,11 +1220,17 @@ indent(Text *et, Text *_0, Text *argt, int _1, int _2, Rune *arg, int narg)
if(a != arg)
autoindent = indentval(arg, narg-na);
}
- if(autoindent >= 0)
- w->autoindent = autoindent;
- if(autoindent != 2)
- warning(nil, "%.*S: Indent %s\n", w->body.file->nname, w->body.file->name,
- w->autoindent ? "on" : "off");
+ if(w != nil){
+ switch(autoindent){
+ case Ion:
+ case Ioff:
+ w->autoindent = autoindent;
+ break;
+ case IGlobal:
+ w->autoindent = globalautoindent;
+ break;
+ }
+ }
}
void
diff --git a/src/cmd/acme/wind.c b/src/cmd/acme/wind.c
index 611587af..edb5d68e 100644
--- a/src/cmd/acme/wind.c
+++ b/src/cmd/acme/wind.c
@@ -76,11 +76,13 @@ wininit(Window *w, Window *clone, Rectangle r)
draw(screen, br, button, nil, button->r.min);
w->filemenu = TRUE;
w->maxlines = w->body.fr.maxlines;
+ w->autoindent = globalautoindent;
//assert(w->body.w == w);
if(clone){
w->dirty = clone->dirty;
textsetselect(&w->body, clone->body.q0, clone->body.q1);
winsettag(w);
+ w->autoindent = clone->autoindent;
}
}