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 LOFF[] = { 'O', 'F', 'F', 0 };
|
||||||
static Rune Lon[] = { 'o', 'n', 0 };
|
static Rune Lon[] = { 'o', 'n', 0 };
|
||||||
|
|
||||||
|
enum {
|
||||||
|
IGlobal = -2,
|
||||||
|
IError = -1,
|
||||||
|
Ion = 0,
|
||||||
|
Ioff = 1,
|
||||||
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
indentval(Rune *s, int n)
|
indentval(Rune *s, int n)
|
||||||
{
|
{
|
||||||
if(n < 2)
|
if(n < 2)
|
||||||
return -1;
|
return IError;
|
||||||
if(runestrncmp(s, LON, n) == 0){
|
if(runestrncmp(s, LON, n) == 0){
|
||||||
globalautoindent = TRUE;
|
globalautoindent = TRUE;
|
||||||
warning(nil, "Indent ON\n");
|
warning(nil, "Indent ON\n");
|
||||||
return -2;
|
return IGlobal;
|
||||||
}
|
}
|
||||||
if(runestrncmp(s, LOFF, n) == 0){
|
if(runestrncmp(s, LOFF, n) == 0){
|
||||||
globalautoindent = FALSE;
|
globalautoindent = FALSE;
|
||||||
warning(nil, "Indent OFF\n");
|
warning(nil, "Indent OFF\n");
|
||||||
return -2;
|
return IGlobal;
|
||||||
}
|
}
|
||||||
return runestrncmp(s, Lon, n) == 0;
|
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(_1);
|
||||||
USED(_2);
|
USED(_2);
|
||||||
|
|
||||||
if(et==nil || et->w==nil)
|
w = nil;
|
||||||
return;
|
if(et!=nil && et->w!=nil)
|
||||||
w = et->w;
|
w = et->w;
|
||||||
autoindent = -1;
|
autoindent = IError;
|
||||||
getarg(argt, FALSE, TRUE, &r, &len);
|
getarg(argt, FALSE, TRUE, &r, &len);
|
||||||
if(r!=nil && len>0)
|
if(r!=nil && len>0)
|
||||||
autoindent = indentval(r, len);
|
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)
|
if(a != arg)
|
||||||
autoindent = indentval(arg, narg-na);
|
autoindent = indentval(arg, narg-na);
|
||||||
}
|
}
|
||||||
if(autoindent >= 0)
|
if(w != nil){
|
||||||
|
switch(autoindent){
|
||||||
|
case Ion:
|
||||||
|
case Ioff:
|
||||||
w->autoindent = autoindent;
|
w->autoindent = autoindent;
|
||||||
if(autoindent != 2)
|
break;
|
||||||
warning(nil, "%.*S: Indent %s\n", w->body.file->nname, w->body.file->name,
|
case IGlobal:
|
||||||
w->autoindent ? "on" : "off");
|
w->autoindent = globalautoindent;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -76,11 +76,13 @@ wininit(Window *w, Window *clone, Rectangle r)
|
||||||
draw(screen, br, button, nil, button->r.min);
|
draw(screen, br, button, nil, button->r.min);
|
||||||
w->filemenu = TRUE;
|
w->filemenu = TRUE;
|
||||||
w->maxlines = w->body.fr.maxlines;
|
w->maxlines = w->body.fr.maxlines;
|
||||||
|
w->autoindent = globalautoindent;
|
||||||
//assert(w->body.w == w);
|
//assert(w->body.w == w);
|
||||||
if(clone){
|
if(clone){
|
||||||
w->dirty = clone->dirty;
|
w->dirty = clone->dirty;
|
||||||
textsetselect(&w->body, clone->body.q0, clone->body.q1);
|
textsetselect(&w->body, clone->body.q0, clone->body.q1);
|
||||||
winsettag(w);
|
winsettag(w);
|
||||||
|
w->autoindent = clone->autoindent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue