commit 53998c99d6e793522fdd4afcb25ab6fb7427ec9c from: rsc date: Tue Sep 28 16:10:49 2004 UTC autoindent fixes from rob commit - ad6638adc744a21b2c424ab74e2df03b42bef0fc commit + 53998c99d6e793522fdd4afcb25ab6fb7427ec9c blob - a24e885d9a6132859e22e56191d59f94edddef91 blob + 37d5edaef99f81d70e922c7197a0be61c31ef922 --- src/cmd/acme/exec.c +++ 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, 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, 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 blob - 611587afc09a4dd05eaade9dc331d2bf35013568 blob + edb5d68e67b112eff7cbf80e9a945c8785053944 --- src/cmd/acme/wind.c +++ 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; } }