allbery@ncoast.ORG (Brandon S. Allbery) (03/14/89)
[Does anyone know Jon Payne's current email address? It's considered courteous to send copies of diffs to the author of the original program; and the "jpayne@cs.rochester.edu" address had a time limit on it which has expired. Thanks in advance. ++bsa] The following context diffs to Jon Payne's Jove editor, version 4.9, add some functionality to C-mode. The added features are: (1) The c-indentation-increment is now implemented in auto-indent mode. (2) When the indent is not a multiple of 8, spaces before an indent are automatically converted to tabs. This is perhaps more stylistic than necessary, but I dislike tabstops which are stored as "space-space-space- space-tab" when c-indentation-increment is 4 (my usual). (3) backward-delete-character (C-H) now converts a tab to 8 spaces before deleting, so that you don't need to backspace and then tab to back up when c-indentation-increment is not 8. This is only done when the tab is part of the line's indentation, never in the middle of a line. Actually, whenever I say "8" in the above text, the value of physical-tabstop is used within the patches; I'm not a tab chauvinist. Also, the changes only affect C mode; C-H still deletes a tab in e.g. Text mode. To apply this, cd to your Jove source directory and type "patch < thisfile". Enjoy! ++Brandon ------------------------------------------------------------------------------- *** c.c.orig Sat Feb 25 10:20:38 1989 --- c.c Fri Feb 24 16:51:02 1989 *************** *** 342,347 { Bufpos *bp; int indent = 0; if (bp = m_paren('}', BACKWARD, NO, YES)) { Bufpos save; --- 342,352 ----- { Bufpos *bp; int indent = 0; + #ifdef BSAHAX + int here; + + here = calc_pos(linebuf, curchar); + #endif if (bp = m_paren('}', BACKWARD, NO, YES)) { Bufpos save; *************** *** 351,356 indent = calc_pos(linebuf, curchar); SetDot(&save); } if (incrmt) { if (indent == 0) incrmt = tabstop; --- 356,366 ----- indent = calc_pos(linebuf, curchar); SetDot(&save); } + #ifdef BSAHAX + if (incrmt != 0 && here > indent) + indent = here; + #else + /* following code seems to undo increment?! */ if (incrmt) { if (indent == 0) incrmt = tabstop; *************** *** 357,362 else incrmt = (tabstop - (indent%tabstop)); } n_indent(indent + incrmt); return bp; } --- 367,373 ----- else incrmt = (tabstop - (indent%tabstop)); } + #endif n_indent(indent + incrmt); return bp; } *** delete.c.orig Sat Feb 25 10:21:00 1989 --- delete.c Sat Feb 25 10:01:25 1989 *************** *** 106,111 } /* Delete character backward */ void DelPChar() --- 106,112 ----- } /* Delete character backward */ + /* BSAHAX: now does an untabify in C-mode. Perhaps should use c-indent. */ void DelPChar() *************** *** 110,115 void DelPChar() { if (MinorMode(OverWrite)) { int count = min(arg_value(), curchar); --- 111,126 ----- void DelPChar() { + #ifdef BSAHAX + if (MajorMode(CMODE) && linebuf[curchar - 1] == '\t' && arg_value() >= 0 && in_indent()) { + int count = arg_value(); + del_char(BACKWARD, count); + set_arg_value(tabstop); + LastKeyStruck = ' '; + SelfInsert(); + set_arg_value(count); + } + #endif if (MinorMode(OverWrite)) { int count = min(arg_value(), curchar); *** insert.c.orig Sat Feb 25 10:22:06 1989 --- insert.c Sat Feb 25 10:04:16 1989 *************** *** 113,118 ToIndent(); dotcol = calc_pos(linebuf, curchar); if (goal < dotcol) { DelWtSpace(); dotcol = 0; --- 113,120 ----- ToIndent(); dotcol = calc_pos(linebuf, curchar); + /* always undo current indent, so as to fix tabification */ + #ifndef BSAHAX if (goal < dotcol) { #endif DelWtSpace(); *************** *** 114,119 ToIndent(); dotcol = calc_pos(linebuf, curchar); if (goal < dotcol) { DelWtSpace(); dotcol = 0; } --- 116,122 ----- /* always undo current indent, so as to fix tabification */ #ifndef BSAHAX if (goal < dotcol) { + #endif DelWtSpace(); dotcol = 0; #ifndef BSAHAX *************** *** 116,121 if (goal < dotcol) { DelWtSpace(); dotcol = 0; } for (;;) { --- 119,125 ----- #endif DelWtSpace(); dotcol = 0; + #ifndef BSAHAX } #endif *************** *** 117,122 DelWtSpace(); dotcol = 0; } for (;;) { incrmt = (tabstop - (dotcol % tabstop)); --- 121,127 ----- dotcol = 0; #ifndef BSAHAX } + #endif for (;;) { incrmt = (tabstop - (dotcol % tabstop)); *************** *** 225,230 return; } #endif if (MajorMode(CMODE) && strlen(linebuf) == 0) (void) c_indent(CIndIncrmt); else --- 230,238 ----- return; } #endif + #ifdef BSAHAX + if (MajorMode(CMODE) && in_indent()) + #else if (MajorMode(CMODE) && strlen(linebuf) == 0) #endif (void) c_indent(CIndIncrmt); *************** *** 226,231 } #endif if (MajorMode(CMODE) && strlen(linebuf) == 0) (void) c_indent(CIndIncrmt); else SelfInsert(); --- 234,240 ----- if (MajorMode(CMODE) && in_indent()) #else if (MajorMode(CMODE) && strlen(linebuf) == 0) + #endif (void) c_indent(CIndIncrmt); else SelfInsert(); *************** *** 761,763 return bp; } #endif /* LISP */ --- 770,785 ----- return bp; } #endif /* LISP */ + + #ifdef BSAHAX + + in_indent() { + register char *c; + + for (c = linebuf; *c != '\0'; c++) + if (*c != ' ' && *c != '\t' && *c != '\f') + return 0; + return 1; + } + + #endif *** tune.h.orig Sat Feb 25 10:22:22 1989 --- tune.h Fri Feb 24 16:18:14 1989 *************** *** 128,133 #endif #endif #define DFLT_MODE 0666 /* file will be created with this mode */ #ifdef BSD4_3 --- 128,135 ----- #endif #endif + #define BSAHAX /* my enhanced C mode */ + #define DFLT_MODE 0666 /* file will be created with this mode */ #ifdef BSD4_3 -- Brandon S. Allbery, moderator of comp.sources.misc allbery@ncoast.org uunet!hal.cwru.edu!ncoast!allbery ncoast!allbery@hal.cwru.edu Send comp.sources.misc submissions to comp-sources-misc@<backbone> NCoast Public Access UN*X - (216) 781-6201, 300/1200/2400 baud, login: makeuser
msir@uhura.cc.rochester.edu (Mark Sirota) (03/14/89)
In article <13469@ncoast.ORG> allbery@ncoast.ORG (Brandon S. Allbery) writes: > [Does anyone know Jon Payne's current email address? Jonathan is now "jpayne@sun.com". > The following context diffs to Jon Payne's Jove editor, version 4.9, add > some functionality to C-mode. This is all well and good, but JOVE v4.12 is now available by anonymous FTP from cs.rochester.edu and other sites. One of the major changes for JOVE v4.11 was a much-enhanced C-mode. -- Mark Sirota - University of Rochester, Rochester, NY Internet: msir@cc.rochester.edu Bitnet: msir_ss@uordbv.bitnet UUCP: ...!rochester!ur-cc!msir