autoindent fixes from rob
diff --git a/src/cmd/acme/exec.c b/src/cmd/acme/exec.c
index a24e885..37d5eda 100644
--- a/src/cmd/acme/exec.c
+++ b/src/cmd/acme/exec.c
@@ -1172,20 +1172,27 @@
 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 @@
 	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 @@
 		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 611587a..edb5d68 100644
--- a/src/cmd/acme/wind.c
+++ b/src/cmd/acme/wind.c
@@ -76,11 +76,13 @@
 	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;
 	}
 }