On Tue, 13 Apr 2021 09:51:01 -0600, Todd C. Miller wrote: > This is consistent with vim's expandtab behavior. > > From nvi2 (Craig Leres): > https://github.com/lichray/nvi2/commit/7d3f43559026e0927032a105b217850feaefec > 66 > > I know most of us don't use expandtab but it is helpful when dealing > with a codebase that is space-indented. Since the option originated > with vim we should be as compatible as possible...
Any objections? This change brings our vi in line with both nvi2 and vim when it comes to expandtab behavior. - todd > Index: docs/USD.doc/vi.man/vi.1 > =================================================================== > RCS file: /cvs/src/usr.bin/vi/docs/USD.doc/vi.man/vi.1,v > retrieving revision 1.79 > diff -u -p -u -r1.79 vi.1 > --- docs/USD.doc/vi.man/vi.1 8 Mar 2021 02:47:29 -0000 1.79 > +++ docs/USD.doc/vi.man/vi.1 13 Apr 2021 15:44:26 -0000 > @@ -2356,8 +2356,12 @@ characters to > when inserting, replacing or shifting text, autoindenting, > indenting with > .Aq Ic control-T , > -or outdenting with > -.Aq Ic control-D . > +outdenting with > +.Aq Ic control-D , > +or > +when filtering lines with the > +.Cm !\& > +command. > .It Cm exrc , ex Bq off > Read the startup files in the local directory. > .It Cm extended Bq off > Index: ex/ex_bang.c > =================================================================== > RCS file: /cvs/src/usr.bin/vi/ex/ex_bang.c,v > retrieving revision 1.11 > diff -u -p -u -r1.11 ex_bang.c > --- ex/ex_bang.c 18 Apr 2017 01:45:35 -0000 1.11 > +++ ex/ex_bang.c 13 Apr 2021 15:44:26 -0000 > @@ -171,6 +171,10 @@ ex_bang(SCR *sp, EXCMD *cmdp) > if (!F_ISSET(sp, SC_VI) && !F_ISSET(sp, SC_EX_SILENT)) > (void)ex_puts(sp, "!\n"); > > + /* Apply expandtab to the new text */ > + if (O_ISSET(sp, O_EXPANDTAB)) > + ex_retab(sp, cmdp); > + > /* > * XXX > * The ! commands never return an error, so that autoprint always > Index: ex/ex_shift.c > =================================================================== > RCS file: /cvs/src/usr.bin/vi/ex/ex_shift.c,v > retrieving revision 1.9 > diff -u -p -u -r1.9 ex_shift.c > --- ex/ex_shift.c 30 Apr 2020 10:40:21 -0000 1.9 > +++ ex/ex_shift.c 13 Apr 2021 15:44:26 -0000 > @@ -21,7 +21,7 @@ > > #include "../common/common.h" > > -enum which {LEFT, RIGHT}; > +enum which {RETAB, LEFT, RIGHT}; > static int shift(SCR *, EXCMD *, enum which); > > /* > @@ -48,6 +48,18 @@ ex_shiftr(SCR *sp, EXCMD *cmdp) > } > > /* > + * ex_retab -- Expand tabs (if enabled) > + * > + * > + * PUBLIC: int ex_retab(SCR *, EXCMD *); > + */ > +int > +ex_retab(SCR *sp, EXCMD *cmdp) > +{ > + return (shift(sp, cmdp, RETAB)); > +} > + > +/* > * shift -- > * Ex shift support. > */ > @@ -109,7 +121,9 @@ shift(SCR *sp, EXCMD *cmdp, enum which r > break; > > /* Calculate the new indent amount. */ > - if (rl == RIGHT) > + if (rl == RETAB) > + newcol = oldcol; > + else if (rl == RIGHT) > newcol = oldcol + sw; > else { > newcol = oldcol < sw ? 0 : oldcol - sw; > Index: include/ex_extern.h > =================================================================== > RCS file: /cvs/src/usr.bin/vi/include/ex_extern.h,v > retrieving revision 1.16 > diff -u -p -u -r1.16 ex_extern.h > --- include/ex_extern.h 27 May 2016 09:18:12 -0000 1.16 > +++ include/ex_extern.h 13 Apr 2021 15:44:26 -0000 > @@ -76,6 +76,7 @@ int ex_set(SCR *, EXCMD *); > int ex_shell(SCR *, EXCMD *); > int ex_exec_proc(SCR *, EXCMD *, char *, const char *, int); > int proc_wait(SCR *, pid_t, const char *, int, int); > +int ex_retab(SCR *, EXCMD *); > int ex_shiftl(SCR *, EXCMD *); > int ex_shiftr(SCR *, EXCMD *); > int ex_source(SCR *, EXCMD *); >