autoindent fixes from rob
This commit is contained in:
parent
ad6638adc7
commit
53998c99d6
2 changed files with 27 additions and 12 deletions
|
|
@ -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 = nil;
|
||||
if(et!=nil && et->w!=nil)
|
||||
w = et->w;
|
||||
autoindent = -1;
|
||||
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)
|
||||
if(w != nil){
|
||||
switch(autoindent){
|
||||
case Ion:
|
||||
case Ioff:
|
||||
w->autoindent = autoindent;
|
||||
if(autoindent != 2)
|
||||
warning(nil, "%.*S: Indent %s\n", w->body.file->nname, w->body.file->name,
|
||||
w->autoindent ? "on" : "off");
|
||||
break;
|
||||
case IGlobal:
|
||||
w->autoindent = globalautoindent;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue