Skip to content

Commit

Permalink
Add support for tab expansion (because everyone else is stupid and I …
Browse files Browse the repository at this point in the history
…am forced to follow along)

Tab expansion inserts spaces instead of TAB character. Number of spaces
is dependent upon your current tab stop setting, which can be changed by
running "Tab n".

As of now, it's not possible to turn it on and off during runtime. You
can however see whether it's compiled or not by executing the command
"Tabexpand". The console will show either 1 or 0. This will be taken
care of in a later commit.
  • Loading branch information
Petter Rodhelind committed May 11, 2017
1 parent bfd823b commit 31f188e
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/cmd/acme/dat.h
Expand Up @@ -268,6 +268,7 @@ struct Window
int utflastqid;
int utflastboff;
int utflastq;
uchar tabexpand; /* expand tab char with space*body.tabstop */
int tagsafe; /* taglines is correct */
int tagexpand;
int taglines;
Expand Down
19 changes: 19 additions & 0 deletions src/cmd/acme/exec.c
Expand Up @@ -53,6 +53,7 @@ void putall(Text*, Text*, Text*, int, int, Rune*, int);
void sendx(Text*, Text*, Text*, int, int, Rune*, int);
void sort(Text*, Text*, Text*, int, int, Rune*, int);
void tab(Text*, Text*, Text*, int, int, Rune*, int);
void tabexpand(Text*, Text*, Text*, int, int, Rune*, int);
void zeroxx(Text*, Text*, Text*, int, int, Rune*, int);

typedef struct Exectab Exectab;
Expand Down Expand Up @@ -92,6 +93,7 @@ static Rune LSend[] = { 'S', 'e', 'n', 'd', 0 };
static Rune LSnarf[] = { 'S', 'n', 'a', 'r', 'f', 0 };
static Rune LSort[] = { 'S', 'o', 'r', 't', 0 };
static Rune LTab[] = { 'T', 'a', 'b', 0 };
static Rune LTabexpand[] = { 'T', 'a', 'b', 'e', 'x', 'p', 'a', 'n', 'd', 0 };
static Rune LUndo[] = { 'U', 'n', 'd', 'o', 0 };
static Rune LZerox[] = { 'Z', 'e', 'r', 'o', 'x', 0 };

Expand Down Expand Up @@ -123,6 +125,7 @@ Exectab exectab[] = {
{ LSnarf, cut, FALSE, TRUE, FALSE },
{ LSort, sort, FALSE, XXX, XXX },
{ LTab, tab, FALSE, XXX, XXX },
{ LTabexpand, tabexpand, FALSE, XXX, XXX },
{ LUndo, undo, FALSE, TRUE, XXX },
{ LZerox, zeroxx, FALSE, XXX, XXX },
{ nil, 0, 0, 0, 0 }
Expand Down Expand Up @@ -1358,6 +1361,22 @@ tab(Text *et, Text *_0, Text *argt, int _1, int _2, Rune *arg, int narg)
warning(nil, "%.*S: Tab %d\n", w->body.file->nname, w->body.file->name, w->body.tabstop);
}

void
tabexpand(Text *et, Text *_0, Text *argt, int _1, int _2, Rune *arg, int narg)
{
Window *w;

USED(_0);
USED(_1);
USED(_2);

if(et==nil || et->w==nil)
return;
w = et->w;

printf("tabexpand: %d\n", w->tabexpand);
}

void
runproc(void *argvp)
{
Expand Down
8 changes: 8 additions & 0 deletions src/cmd/acme/text.c
Expand Up @@ -758,6 +758,14 @@ texttype(Text *t, Rune r)
} else
textshow(t, t->file->b.nc, t->file->b.nc, FALSE);
return;
case 0x09: /* ^I (TAB) */
if(t->w->tabexpand == TRUE){
for(i=0; i < t->w->body.tabstop; i++){
texttype(t, ' ');
}
return;
}else
break; /* fall through to normal code */
case 0x01: /* ^A: beginning of line */
typecommit(t);
/* go to where ^U would erase, if not already at BOL */
Expand Down
1 change: 1 addition & 0 deletions src/cmd/acme/wind.c
Expand Up @@ -80,6 +80,7 @@ wininit(Window *w, Window *clone, Rectangle r)
w->filemenu = TRUE;
w->maxlines = w->body.fr.maxlines;
w->autoindent = globalautoindent;
w->tabexpand = TRUE;
if(clone){
w->dirty = clone->dirty;
w->autoindent = clone->autoindent;
Expand Down

0 comments on commit 31f188e

Please sign in to comment.