NOTICE: This change log is officially (sez me) closed. All further changes documented (hopefully) in "CHANGES". This file was renamed from "CHANGES" to "CHANGES.R4" on Wed Jan 11, 1995. Changes for vile 4.13 (released Thu Dec 22, 1994) (pgf) + fixed typo in glob.c which caused compile failure on VMS. + added PATCH_AGAINST environment variable to dpatch target. (makefile.in) + cleaned up selection ifdefs. no more USE_SEL_FUNCS. use OPT_SELECTIONS to ifdef references to r_attr_id. (select.c region.c, estruct.h) + the strings and conflict with the new choice for "buffer variable" indicator. so i'm getting rid of them. and i'm adding support for \s (and \a, while i'm at it) to the tokenizer. (exec.c, bind.c, macros.doc, vile.hlp) + don't depend on a possibly null abbr_map pointer to decide to reverse the lhs of a map string. this caused the first mapping of any type (:map or :map!) to be reversed. i missed this because my first mapping was of a single character. (map.c) + wrappers provided for TTgetc and TTtypahead because at least one pcc-based compiler balks at passing them as a function pointer. (map.c) + operators act from pre_op_dot to DOT. so set pre_op_dot when done sweeping, in case some other motion set it. fixes 'dqf(%%q'. (select.c) + change _IOLBF flag to _IOFBF on setvbuf call, to turn off line buffering. we don't need it, since we flush properly anyway, and it slows down output, particularly on an xterm. (most systems used to use setbuffer() anyway, until autoconf) (termio.c) + correct yet _another_ typo made during the great strncpy() conversion. sheesh. (bind.c) + readability improvements and editorial corrections to the older sections of README and README.CFG. + moved processing of @cmdfile startup file down to where we normally run .vilerc, to make sure all conditions are the same for both. this should make running 'vile @.vilerc' and 'vile' exactly equivalent. running a command file caused a core in 4.12 due to NULL curwp. (main.c) + include text of manpage.rc in vile.hlp, for installations that discard the source directory. (vile.hlp) + revisions to help and man page sections on startup. (vile.hlp, vile.1) + install the man page as xvile.1 when installing xvile. (makefile.in) (tom) + pick up slash right after a drive designator to fix problem with DOS globbing in the root directory. (glob.c) + corrected define, so that VMS version builds display-driver (descrip.mms, vmsbuild.com). (kev) + line.c (put): Don't set suppressnl when only putting newlines. Note: We may want to visit ldelnewline() and fix it so that the line structure doesn't get hosed when DOT is set to the buffer header. The circular structure is apparently maintained, but the buffer header is now bypassed. Suppose there're three lines. We should have something (roughly) like this: bufhead -> line1 -> line2 -> line3 -> bufhead But I think that after ldelnewline with DOT as described above, we end up with (again assuming three lines): bufhead -> line1 -> line2 -> line3 -> line1 Changes for vile 4.12 (released Fri Dec 16, 1994) (pgf) + clear up section of man page dealing with vile-manfilt. (vile.1) + don't let a mouse click change the current window if we're sweeping. serious lockup results. (basic.c) + fix various places that needed to be made more or less aware of the occurence of sweeping. quoted motions now never include their endpoint, except in a few mostly "on one line" kind of motions: e, E, f, t, and %. (csrch.c, edef.h, exec.c, fences.c, main.c, select.c, wordmov.c, vile.hlp) (kev) + display.c (modeline): For case 'f' and 'F' in the format string, do not display the pathname if it is the empty string. This seems to be the case for the [unnamed] buffer. Changes for vile 4.11 (released Thu Dec 15, 1994) (pgf) + changed order of #includes in x11.c, so that our headers come first. since we no longer define VMS at all, we'll be okay on most systems. i hope this doesn't break other systems. if so, estruct.h and edef.h should be moved after the last X11 include, until we can figure something out. (x11.c) + changed leading character of so-called "buffer-variables" from a '#' character to '<' character. the '#' conflicts with the # function key prefix. THIS MAY BREAK OLD MACROS. i'm sorry about this, but the choice of '#' as the function key prefix is not really negotiable... (eval.c, vile.hlp) + fixed buffer-reading examples in macros.doc to reflect the above change. (macros.doc) + fixed "WRITEABLE" case of the non-HAVE_ACCESS case of ffaccess. the sense was inverted. (fileio.c) + implemented autowrite mode. unlike vi, will only save files when suspending or running a shell command, since saving on any buffer switch seems a little silly. (buffer.c, cmdtbl, main.c, modetbl, proto.h, spawn.c, vile.hlp) + fix OPT_LCKFILES as per johan rosman's suggestion, to make multiple edits by the original locker work correctly. also fix behavior when file is renamed. (buffer.c, main.c, file.c) + put in kev's suggested change to allow xvile to grow its screen more gracefully, albeit somewhat delayed. (eval.c) + fixed (for the last time, i hope) the sequence of messages that appear with ":w", ":wq", ":ww", ":wwq", and 'ZZ'. Now, the "press return to continue" only happens if you're _not_ quitting, you haven't suppressed it with an argument, and something was actually written. (buffer.c, main.c, vile.hlp) + the "modeline-format" setting is now a variable rather than a "setting". so 'set modeline-format "...."' must change to 'set-variable $modeline-format "...."' in .vilerc files. (edef.h, eval.c, display.c, main.c, modetbl, vile.hlp) + make sure getregion() assigns a unique attr_id to regions it creates, so find_release_attr() doesn't find spurious matches. this keeps selections from disappearing when an unrelated delete (killregion()) occurs. (region.c, select.c, proto.h) + fixed bug in trimline() which caused it to leave DOT at end of line, if there was trimming to do. this caused a bug where if two newlines were inserted into a line ending with whitespace, and autoinsertion occurred, then the newlines would insert incorrectly, one correctly, and one _after_ the line that had been broken. trimline now preserves DOT if possible. (region.c) + rearrange multimotion() to ensure regionshape is set to exact when we begin a normal quoted motion. (select.c) + the xterm-mouse code is now a proper motion, so that you can use it to follow an operator. that is, hit 'd', point with the mouse, and click button 1 to delete to the mouse position. x11 code now forces execution of a null motion routine, to make this to work in xvile as well. (basic.c, cmdtbl, tcap.c, proto.h, x11.c, estruct.h, vile.hlp) [hitting '.' after doing this in the xterm version is interesting, since the motion is relative to the edges of the screen, not to the buffer. in xvile, the motion that is repeated is null, so nothing happens] + mask off VAML and VAMLFOC bits when comparing attributes in tcap.c, since it doesn't know how to deal... + reset insertmode and set WFMODE if we abort out of replacechar(). (insert.c) + rearranged X resource section of help file slightly, to group all resources and subresources more closely together. if we split out all the scrollbar resources into sub-resources, this presentation might make less sense. (vile.hlp) + modified configure.in to support "--with-CFLAGS=", and turn -O on by default. it can now be suppressed with '--with-CFLAGS=" "'. is it possible to give the configure script a usage message? (configure.in, configure, README.CFG) + eliminated usage of the return value of strncpy(), since it's broken on at least one version of AIX, and there's no big gain in using it, other than aesthetic value, which, although subjective, really is a fact. :-) (bind.c, buffer.c, eval.c, filec.c, glob.c, spawn.c) + eliminated all uses of the ScratchName macro, since it getting hard to write it portably. all vile-created buffer names are now defined as char arrays in edef.h, and they all have the suffix "_BufName", e.g. "HELP_BufName" and "OUTPUT_BufName". (bind.c, buffer.c, edef.h, estruct.h, eval.c, exec.c, filec.c, finderr.c, history.c, line.c, main.c, map.c, modes.c, msgs.c, oneliner.c, spawn.c, tags.c) + eliminated the CPP_xxx checks that were used to help create the ScratchName macro. ( aclocal.m4, configure, configure.in) + fixed bogus cut-n-paste'd help messages for Macro buffers. (cmdtbl) + rearranged utime()/utimes() code so that utimes is now favored over utime if both are present. we think that systems with bad utime() implementations are the ones that have utimes(). (fileio.c) + eliminate funky structure assignment "structthing = {foo, bar}". (ntconio.c) + mention -O flag on by default, and necessity of working VPATH support in make program. (README.CFG) + xvile does not need to (and shouldn't) attempt to reopen /dev/tty when stdin is a pipe. the prevented xvile from starting from anywhere but the command line. ifdefed code on DISP_X11. (main.c) + change make_backup() to correctly check boolean return code from ffexists() when deciding whether to back up a file. (fileio.c) + changed rcsdiff commands to use unified diff format. (makefile.in) + fix bug in BUG check in mapped_c() -- was not clearing NOREMAP bit before comparing to poundc. this caused arrow keys (probably all function keys not mapped by user) to appear to fail when noremap mode was set. (map.c) + blankline() was incorrectly de/entabbing its region, even when it wasn't rectangular. (region.c) + implemented ":abbr" command. ( CHANGES, README, cmdtbl, insert.c, map.c, proto.h, vile.hlp) + added "show-system-mapped-keys" command to show the mappings for the function keys. this replaces passing numeric arg hack in :map and :map!. (map.c, cmdtbl) + added "populate" admin target to makefile.in. + wording changes to vile.hlp and vile.1. + added "show-bindings" to cmdtbl, to match claims made in vile.hlp. + turned region formatting back on. lost OPT_FORMAT in final merge for 4.10. (estruct.h) + changed shorten_path to not return NULL unless arg was NULL. this prevents possible core dump (or ugly display) when doing "show-tagstack" after "vile -t tagname". (path.c) + change getfile() to return FALSE if getfile2bp() returns NULL, and prevent a core dump. this can happen, for instance, if the bp->b_fname is the result of non_filename(), which can happen if a tag lookup is done from a listbuffer, and a subsequent tag-pop command is done which tries to return there. (file.c) + change tags() to push the buffername rather than the filename if we're tag'ging from an internal buffer. this improves our chances of getting back to it. (if it's gone from the screen, you still won't be able to get back) (tags.c) (kev) + x11.c (x_setfont): Call XSetFont() for all of the newly added GC's. + x11.c (display_cursor): Draw the little rectangle with the cursor color instead of the normal text color when the window loses focus. + proto.h (x_resize): Declared. + eval.c (SetVarValue): Call x_resize() for EVPAGELEN and EVCURWIDTH. + x11.c (x_resize): New function. Call it from x_configure_window(). + vile.hlp: Documented new color cursor and modeline capabilities. + estruct.h (VACURS, VAMLFOC, VAML): New attributes. + display.c (modeline): Set VAMLFOC and VAML attributes as appropriate. + x11.c (x_preparse_args, flush_line, struct _text_win): Added new code for changing the color of the cursor as well as the modelines. + x11.c (update_scrollbar_sizes): Make grips the same color as the background of a modeline which does not have focus. It's too much work to make the grip color always match the color of the modeline. + estruct.h (OPT_FORMAT): Added back in after being lost in the shuffle. Also checked the other "OPT_" features occuring in cmdtbl to make sure that no others were also lost in the shuffle. (tom) + corrected a null-pointer reference in 'getfile()' (file.c). + modified 'pathcat()' to (on VMS) ensure that the result is a valid pathname (path.c). + adjusted autoconf tests for cpp substitutions (aclocal.m4, estruct.h). [but that stuff's gone. i've preserved these changes on an RCS branch (cpp_stuff) in case we need it. -pgf ] + supplied missing DISP_VMSVT setting (estruct.h). + added FL_EXECABLE, FL_WRITEABLE, FL_READABLE flags to 'flook()' call to use in 'access()' call (estruct.h, bind.c, eval.c, exec.c, filec.c, fileio.c, main.c, tags.c, version.c). Changes for vile 4.10 (released Mon Dec 05, 1994) (pgf) + changed keystroke8() and keystroke_raw8() to loop and beep until a simple 8-bit char is typed. no SPEC prefixes allowed. (input.c) + tuned kev's changes to mapped_c(). new routine called mapped_keystroke_raw() which calls mapped_c in such a way that function keys will expand to #c, but no further. used when getting a :map lhs from the user. (map.c, input.c, proto.h) + fix lint warnings from "questionable" pointer practices, rationalized names of routines called by liststuff() (now all makeXXXlist()). (bind.c, buffer.c, eval.c, line.c, map.c, modes.c, proto.h, random.c, region.c, tags.c) + removed no-doubt obsolete ifdefed "overlay" statements (window.c, region.c) + lint: removed unused assignment in desfunc(). (bind.c) + change the temp storage of unmatched chars in maplookup() from char to int, to prevent loss and subsequent extension of sign information. (map.c) + added short on-line help for all commands. ifdefed on OPT_ONLINEHELP. shows up in describe-bindings and apropos listings. adds 13.5K. (bind.c, cmdtbl, mktbls.c, estruct.h) + added "list-motions" and "list-operators" commands, which show their respective subsets of the commands. (bind.c, proto.h, vile.hlp) + added "describe-function" command. added "appendit" argument to liststuff, to let the contents of popups (like Binding List) be grown incrementally. the "describe-key" now describes the function the key is bound to as well. (bind.c, buffer.c, cmdtbl, eval.c, line.c, map.c, modes.c, proto.h, random.c, tags.c, vile.hlp) (kev) + map.c (mapped_c): Minor changes to make quoted spec characters generate pound sign sequences. This is important for interactive mapping of function keys. Example: Try ":map h" prior to this fix and afterwards. Also try "a^V". denotes a press of the F1 function key. + x11.c (kqdel): Took out call to char2int() which I had put in a few days earlier.. (x_key_press): Don't convert function and arrow keys to a sequence of bytes via kcod2escape_seq(). Leave them in the SPEC form instead. This was causing # sequences to be displayed in insert mode and it also broke command line history (as well as a bunch of other stuff, I suspect). + vile.hlp: Fixed a few typos. + map.c, x11.c (maplookup, kqdel): Judiciously call char2int() in order to strip off sign extension. These fixes are in response to the use of the META key being broken. (tom) + added autoconf-test for getpgrp(). (aclocal.m4, configure.in) + reduced timeout to 30 seconds on MSDOS to avoid overflow (main.c) + various nits/fixes for VMS, CLIX, IRIX, TurboC (descrip.mms, estruct.h eval.c, glob.c, ibmpc.c, makefile.tbc, region.c, termio.c, vile.hlp, x11.c) Changes for vile 4.9 (released Tue Nov 29, 1994) (pgf) + changed all OS #defines to SYS_xxx. like SYS_UNIX, SYS_MSDOS, etc. changed all compiler #defines to CC_xxx. like CC_LATTICE, CC_TURBO, etc. changed all screen #defines to DISP_xxx. like DISP_TERMCAP, DISP_X11, etc. changed all feature #defines to OPT_xxx. i think you see the pattern. eliminated some ifdefs around things that we've never turned off, or that can't be turned off without severely breaking vi compatibility. got rid of some old "ifdef NEVER" kind of stuff. (this affected most source files) + catnap() now checks for tty input at least periodically on all platforms. the nap is broken into .1 second increments, and typahead() is called in between each one. (random.c) + new mode, "maplonger", which controls whether vile favors the longer or shorter of two nested mappings. (modetbl, map.c) + new mode, "remapfirst", which controls whether vile will remap the first character of a mapping. vi doesn't, vim does. (modetbl, map.c) + rationalized (?) and documented (!) the various levels of character input routine. see top of input.c. + renamed typahead() to tttypahead() to match ttclose() et al, and added typahead entry to the TERM struct. (termio.c and others) + all former callers of tgetc() now call one of the keystroke() variants instead. (many files) + all former callers of tungetc() now call unkeystroke() instead. (many files) + when creating backup files, ifdef check of matching dev and inode on UNIX only. it doesn't work under watcom (DOS), and i don't know where else it will. (fileio.c) + show offending errno when it's out of bounds in mlwarn(). (display.c) + added itbuff.c/o/obj to the rest of the makefiles ( descrip.mms, makefile.djg, makefile.in, makefile.tbc, makefile.wat, makefile.wnt, vms_link.opt, vmsbuild.com) + removed mapchars.[ch] from distribution, and removed references to them. (makefile.in, cmdtbl, main.c) + ifdefed out some more unused code. also made multimotion() yank the selection as a side-effect, to be more like ^A-s. (select.c) + ran lint on Solaris (i think. maybe it was SunOS). (display.c, fileio.c, input.c, itbuff.c, map.c, select.c, tbuff.c, tcap.c, undo.c) + cloned and modified tbuff.c to create itbuff.c. the routines there work on "integer tbuffs". use these routines, and the corresponding ITBUFF data structure everywhere user keyboard input is accumulated. this allows us to store wide keycodes, and greatly simplifies keystroke playback and :map implementation. (tbuff.c, itbuff.c, makefile, input.c, insert.c, line.c, map.c, estruct.h, edef.h, proto.h) + added new routines to tbuff.c/itbuff.c: [i]tb_unnext() to undo tb_next, itb_seek() to change the itb_last pointer, itb_delete() to remove N elements from middle of an ITBUFF, itb_insert() to insert a new element in the middle. + changed :map implementation to support "user" and "system" timeouts, and to support controllable remapping via "set [no]remap" and vim-style ":noremap" commands. (map.c, modetbl, main.c, vile.hlp, proto.h) + moved xterm-mouse functionality to tcap.c. it's now driven by a system :map of ESC [ M, which is bound (indirectly) to the old xterm_button() routine. (input.c, tcap.c, cmdtbl, proto.h) + promoted '#' to be a regular peer of the ^X and ^A prefixes, and defined a set of "standard" #-key bindings, which are in turn available from system function keys (see vile.hlp). screen driver modules may use the new header "nefkeys.h" to access this standard list. i may have lost some of the linux-specific bindings from cmdtbl -- should they be reintroduced, they should go in tcap.c, as an ifdef'ed addtosysmap() call. (bind.c, input.c, vile.hlp, main.c, cmdtbl, mktbls.c) + collapsed kcod2pstr() to rely on kcod2escape_seq(). (bind.c, input.c, proto.h) + changed names of "dummy" binding functions: cntl_a_func(), cntl_x_func(), unarg_func(), esc_func(), poundc_func(). (main.c, input.c, proto.h) + added footnotes to the ":map" listing to denote whether mappings are remappable or not. system maps (i.e. function keys) may be viewed with "1:map". (map.c) + moved system-specific function key mappings to tcap.c and ibmpc.c. removed them from cmdtbl. use standard defines for the SPEC bindings. (ibmpc.c, tcap.c, x11.c, x11simp.c, cmdtbl) + the lhs of map sequences may now contain null characters. the UI still doesn't support entering them. necessary since ibmpc function keys start with a 0 character. (map.c, ibmpc.c, proto.h) + changed alignment of settings in the [Settings] buffer so that the characters by which the names are sorted are vertically aligned. (modes.c) + changed a bunch of whitespace in modetbl for better alignment. + don't bother attempting to catnap for 0 time. (random.c) + added '#' to the name in the short history list that corresponds to previous buffer. (noautobuffer mode only) (buffer.c) + improved description of buffer lists wrt autobuffer mode. + attempted to rationalize some of the informational commands and added text to help file. (cmdtbl, vile.hlp) new command names: synonymous with: show-bindings describe-bindings show-help help show-buffers list-buffers show-mapped-chars map show-mapped!-chars map! show-tagstack tagstack changed command names: old name was: show-terminal-chars show-terminal list-variables list-vars show-variables show-vars + prevent shrinkwrap() from claiming more than 3/4 of a windows rows when popping up a new window. (window.c) (tom) + corrected missing b_last_used values for invisible buffers which caused buffers to be delinked when toggling autobuffer mode (buffer.c). + modified logic of 'modeline_modes()' to make it compile on vms (display.c). + modified auto-config for 'utime()' for solaris, vms compiles (estruct.h, aclocal.m4, configure.in) + corrected ifdef for "backup-style" mode (main.c). + modified 'find_user()' to use $HOME if 'getpwuid()' fails (path.c). + improved #/% toggle so that it doesn't toggle into invisible buffers (buffer.c). + corrected some ifdef combinations (cmdtbl, file.c, tcap.c, wordmov.c) + modified ifdef for incremental searches to use symbol OPT_ISRCH (cmdtbl, isearch.c, proto.h). + modified ifdef for find-error to use symbol OPT_FINDERR (cmdtbl, file.c, finderr.c, main.c, spawn.c, proto.h). + modified ifdef for advanced-editing features to use symbol OPT_AEDIT (cmdtbl, opers.c, random.c, region.c, proto.h). + corrected error in globbing that caused incorrect list to be built for expressions such as "*/foo" (glob.c). + modified logic of 'flook()' to allow search of $PATH only, so that the lookup in version.c can find the correct executable, i.e., not necessarily the copy of vile in the current directory (bind.c, fileio.c, version.c). + modified logic of 'filefind()', which implements ":e" command to load only the first buffer matched in a wildcard, and to make all matches treated as command-arguments so that ":n" applies to them (buffer.c, file.c, main.c, random.c) + corrected 'namebuffer()', prohibiting blank buffer-names (buffer.c). + added function 'mktrimmed()' to support correction to 'namebuffer()', as well as new macro function "&trim" (eval.c). + modified "error-buffer" command to accept filenames as well as buffer names (buffer.c, finderr.c). + animated [Tag Stack] buffer (tags.c). + modified 'gettagsfile()' to check modification-times of tags files, and re-read as necessary (tags.c). + corrected a conflict between foreground/background colors (tcap.c). + fixed some errors shown by Purify (display.c, regexp.c, window.c). (kev) + insert.c (nextindent): Get the indent of the first character on the line after advancing a word when there was no first character. This fixes a core dump which may be reproduced as follows: Get into vile, making sure that autoindent is set. Put about five or so blank lines in the buffer. Now go to the top of the file and type 'cc' (change line). This will cause a core dump. A core dump will also be produced if there are a number of blank lines and then a non blank line. The key here is that the indentation level (indicated by fc) was determined to be -1 and was not reset to a kosher value for the code below. + display.c (offs2col): Declare local variable length as an int instead of as SIZE_T. (Remember that SIZE_T is unsigned on a lot of machines.) Also adjusted test which is used for determining which character that we're on. This fixes a bug which (prior to this fix) may be reproduced as follows: Get into vile and enter the following: "ahere is a blank line". Select the word "is". Type "u" for undo. Note that the selection highlighting remains even though the line is blank. Then type "o" to open up a new line. It is at this point that a core dump occurs. Note that this fix does nothing to solve the problem of the highlighting sticking around. It just makes that code more robust so that it doesn't core dump when the line length is less than zero (which can happen for empty lines). + undo.c (repointstuff): Always repoint marks. I've #if'd out the lines which used to check to see whether or not the suggested new pointer was valid or not. Paul should check this stuff over and make sure that it's ok. In any event, it seems to (with one exception) fix the other half of the problem described above. It also seems to make the behavior of marks wrt undo work more like real vi. Don't know whether this is an argument for or against, just an observation... + aclocal.m4: Added missing dnl to last line of file. + buffer.c (sortlistbuffers): Don't forget to keep the unused buffers when rebuilding the buffer list. Changes for vile 4.8 (released Mon Oct 31, 1994) (pgf) + changed name of SIZEOF macro to TABLESIZE, to avoid conflicts with X11 headers. (buffer.c display.c estruct.h fences.c ibmpc.c line.c mktbls.c modes.c tcap.c version.c vmspipe.c x11.c x11simp.c) + incorporated patches from Johan Rosman for simple file locking protocol. it's not rigorous, which he freely admits, but it solves their problem, so i'm including the code, though turning it off by default. ( buffer.c display.c estruct.h file.c main.c modes.c proto.h modetbl makefile.in and new file lckfiles.c) + fixed code in filename() which allowed one to rename a file to the null string by backspacing out of the "Name:" prompt. (file.c) + added mask with XtIMXEvent to all calls to XtAppPending(), to prevent spurious returns due to non-events (timers). (x11.c) + massaged the distribution targets in the makefile, so i can more easily produce a tar.gz file, and not make people unpack the shar anymore. (makefile.in) + changed all places where we check a char against abortc to check against intrc, and check interrupted() as well. this lets us not translate intrc to abortc in tgetc(), which fixes some bugs where interrupts are treated like escapes. this only showed up when ESC was being used for something other than aborting -- like completion. (csrch.c estruct.h eval.c exec.c history.c input.c insert.c isearch.c select.c spawn.c window.c) + turned off filter() for UNIX and DOS, since the filterregion() code is superior and better tested. (spawn.c) + added support in exec_named_command() for detecting a trailing '!' on a command name, and if the BANG flag is set for its function entry, passing a special argument so the function can know it was invoked with a "xxx!" form. (estruct.h, exec.c, cmdtbl) + implemented support for ":w!" to overrided failed writes of the backup file. detect the special argument (see above) in filesave() and filewrite(), and pass "forced" flag down through writeout(), writereg(), and ffwopen(). (fileio.c, file.c, proto.h, vile.hlp) + created mode to control file backups, and implemented ~-style backups in addition to the existing .bak style. new mode is "backup-style", and takes values "off", ".bak", and "tilde". code is ifdefed on OPT_FILEBACK, and is turned off for VMS, since i don't know what's appropriate. also, left (minimal) hooks to someday implement emacs-style numbered backups. (estruct.h fileio.c main.c modes.c modetbl vile.hlp) + added link(), utime(), utimes() to the list of system calls to check for, and for whose declarations to check. (configure configure.in proto.h) + implemented 'q' command, for doing "quoted motion", for lack of a better mnemonic. (cmdtbl display.c proto.h region.c select.c vile.hlp wordmov.c x11.c) + fixed bad "set" line in vile.hlp, in the my_cd_action example. It said "set $foo=$bar" syntax; which can be either "set foo=bar" or "setv $foo=$bar". + changed dos-mode behavior yet again. with global dosmode set, we were stripping carriage returns at the same time we were deciding whether a buffer was doslike or not. this led to the deletion of CR's even if we decided the file was unixlike. the correct behavior, which unfortunately involves another pass through the buffer, is to figure it out (i.e. count lines ending in CR), and then, only if it _is_ doslike (more CR lines than lines without) then go through and strip them. i discovered the bug when i had a command file containing a few :map commands that ended in ^M. the ^M's were being silently discarded. (file.c) + added double-quote as commenting character in the macro language. for vi compatibility, this should act as a comment everywhere except shell commands and map commands, but we only currently honor it at the beginning of line. (exec.c) + fix behavior of commands which behave differently when not given arguments, when used in an executed file. :map and :f were both ignoring their arguments when sourced in a file interactively. fix was in end_named_cmd() and more_named_cmd(). (exec.c) + new routine, macliteralarg(), which returns the rest of a command line literally as a single token. used for the of :map. (exec.c) + call new macliteralarg() from map_common() when getting the , if cline is true. (map.c) + removed "if (did_tungetc()) tgetc()" from readpattern() -- it was obsolete, and only screwed things up when executing a :map. (search.c) + always do full update() in mlyesno() and mlquickask(), since they may be invoked from a command file, and we want the display as current as possible. (input.c) + use mlforce() rather than mlprompt() to force appearance of the questions in mlyesno() and mlquickask(), in case discmd is false. (input.c) + line length reformatting in oneliner.c (kev) + aclocal.m4, configure.in (VC_SYS_ERRLIST): Check for presence of sys_errlist[]. + estruct.h (sys_errlist): Only declare if HAVE_EXTERN_SYS_ERRLIST is not defined. + manpage.rc: Set noview prior to calling attribute-cntl_a-sequences-til. Set view afterwards. + display.c (vtalloc): Allocate space for rows in vscreen[] and pscreen[] when the height changes. I was getting core dumps in xvile when resizing vertically. + makefile.in (manfilt): New target which should not be necessary, but is due to the lameness of certain `make' programs. + termio.c (ttopen): ifdef'd IUCLC which doesn't exist on all systems. + msgs.c (popup_msgs, msg_putc): Don't save/restore DOT unless curwp has been initialized. Lack of this check was responsible for core dumps when executing "xvile @~/.vilerc". + buglist: Deleted items which have been satisfactorily dealt with. + display.c (PutMode, vtprintf): Deleted these functions. (modeline): Rewritten to use a format string for outputting the mode lines. (mlfs_prefix, mlfs_suffix, mlfs_skipfix): New modeline() helper functions. + modetbl (ModeLine-Format, MLFORMAT): New string mode. + main.c (global_val_init): Initialize format string for mode lines. + modes.c (adjustmode): Adjusted "#if OPT_WORKING ... #endif" pairs for the case where OPT_WORKING is disabled. + x11.c (x_open): Initialize term.t_mcol and term.t_mrow. + eval.c (SetVarValue): Call mayneedundo() for EVCURCHAR and EVLINE ($char and $line) variables. + x11.c (x_key_press): Call char2int() when putting characters in the queue as integers in order to prevent sign extension. + map.c (maplookup): Call char2int() when returning first unmatched character in order to prevent sign extension. + vile.hlp: Removed vile-manfilt compilation / installation instructions. vile-manfilt is now built and installed as part of the default installation procedure. Also removed note concerning selections; this note said that the selected area includes all highlighted chars except for special case in which the last highlighted character is the first character on a line. This is no longer true or necessary since we now permit selections to select the end-of-line character. Added documentation concerning scrollbar and selection subresources. Also added some sample .Xdefaults entries. Reformatted paragraphs which had lines too long for an eighty column display. + map.c (struct maprec): Documentation. (tom) + added OPT_VMS_PATH to estruct.h, used this to ifdef the vms pathname parsing (and also some test-code) on UNIX for off-line testing of the VAX code (estruct.h, fakevms.c, file.c, filec.c, glob.c, input.c, main.c, path.c, proto.h, vms2unix.c). Now, VMS name-completion is done internally using UNIX-style pathnames. + other mods to support name completion on VMS, and off-line testing (bind.c, file.c, filec.c, glob.c, path.c). + mods to msgs.c to avoid struct init in declaration for SunOS K&R compiler. + added files fakevms.c, fakevms.h and vmsbuild.com + added OPT_MSDOS_PATH symbol to simplify related ifdefs for parsing of pathnames for MSDOS/WIN31/NT/OS2 (estruct.h, file.c, filec.c, glob.c, main.c, path.c, proto.h). + corrections to VMS version of 'shorten_path()' (path.c) + some lint (bind.c, display.c, eval.c, input.c, insert.c, map.c, region.c, select.c) + fixes for SMALLER-ifdef (display.c, insert.c, map.c, window.c) + added ifdef-symbol OPT_MLFORMAT for modeline-format (estruct.h, display.c, main.c, modetbl) + corrected handling of empty-.vilerc file: was hanging, not formatting modeline correctly (display.c). + added ifdef-symbol OPT_ENUM_MODES for the fixed-string modes (estruct.h, bind.c, main.c, modetbl, modes.c) + added logic to allow termcap-driver on Linux to display colors (tcap.c, estruct.h) + renamed REBIND to OPT_REBIND, modified logic for kbindtbl[] so that an arbitrary number of key bindings can be stored. + modified the TTrev() logic in the termcap driver to display video attributes (i.e., bold, underline, reverse) when OPT_VIDEO_ATTRS is set (tcap.c, display.c, estruct.h). + modified flags of attribute commands so that they accept a range as well as a repeat-count (cmdtbl). + added binding ^A-N to allow reset of attributes on a region (cmdtbl, select.c). + corrected video-attribute highlighting for IBMPC driver (ibmpc.c). + corrected ifdef'ing for 'kbindtbl[]' (mktbls.c). + modified error-test in 'ffropen()' to avoid noisy error when vile cannot find .vilerc in MSDOS filesystem from Linux (fileio.c). Changes for vile 4.7 (unreleased Tue Sep 27, 1994) (pgf) + makefile.in: removed * chars from install complete message to keep them from being shell-expanded, and make sure rw and list use the right makefile (i.e. makefile.in) since "makefile" may not be built yet. + off-by-one on strcpy() in bind.c (otto lind) + added code to detect and honor new-style NeXT tags file format in tags.c. (otto lind) + rationalized setting of dos mode (too bad i didn't call this "crlf" mode instead) so that for all internally generated, or non- existent buffers, dos mode is set based on the OS's line-style. otherwise, for existing files, empty or not, the lines vote on the style for the buffer. (file.c, main.c, random.c, vile.hlp) + added Home and End key support to x11.c, per user contrib. (x11.c) + added line-percentage indication to ruler mode display, per user contrib. (display.c) + new command, "beep", implemented in function userbeep(), which lets the user beep when they want to. this intentionally does not call kbd_alarm, but rather TTbeep directly. (random.c, cmdtbl, proto.h) + new mode, "working", which enables/disables the working... messages. i think i've got it set up so the signals themselves stop if noworking is set. (modes.c, display.c, main.c, vile.hlp) + added shrinkwrap support for the [Help] window. (bind.c) + fix core dump from giving arg of 1 to prevwind(). (window.c) + create l_strtol, which also accepts 'c' constants. use it in eval.c whenever parsing user input to numeric functions. (eval.c, proto.h) + prevent core dump if ~endm given when not in macro definition (exec.c) + change "BOTTOM" and "TOP" in "Search reached XXX without matching..." to "bottom" and "top". (search.c) + added "[Search wrapped]" message to /, ?, n, N commands. (search.c, oneliner.c, isearch.c, proto.h) + fixes to swbuffer() to prevent coredump when errors encounted when running the bufhook routine. (buffer.c) + fix to dobuf() to prevent handling of a ~endm when execlevel is non-zero. if this is true, then the store-macro/store-procedure won't have happened (due to the early return in docmd()), and it'll look like an unmatched ~endm. (exec.c) + in liststuff(), don't switch to the list unless it's its first popup. actually, switch (in popupbuff) and then switch back. this guarantees that the last call to swbuffer is for curbp. (buffer.c) [ it would be better if popupbuff() didn't need to do the swbuffer at all ] + renamed CMASK to CHARTYPE to avoid name conflicts. (edef.h estruct.h input.c line.c proto.h eval.c main.c) + the screen is now resized dynamically, instead of having a fixed maximum. (display.c, x11.c) + changed term.t_nrow and term.t_mrow to hold the actual number of screen rows, rather than the highest index. this makes it a) symmetric with t_[nm]col and b) a whole lot easier to remember how it works. also introduced routine bottomleft() for moving the cursor there. (ansi.c, display,c eval.c ibmpc.c isearch.c main.c spawn.c st520.c tcap.c termio.c vmsvt.c win31drv.c window.c x11.c x11simp.c) + some fixes for DEBUGM ifdefs (eval.c exec.c) + gnu warning cleanup in vmalloc.c + main.c: changed initial value of popup-choices to "delayed", to match readline behavior + convert ^M character in replacement pattern to a newline, for vi compatibility. (oneliner.c) (kev) + display.c (updupd): Don't permit typahead to be called for X11 from this function. This caused some core dumps since x_typahead() is basically another event loop. When a timer event was set (to blink the cursor), core dumps would occur due to the display structures not being in an updated state. + x11.c (x_getc, x_typahead): The recent addition of the beginDisplay/endofDisplay pairs seems to have caused a plethora of undesirable messages from imworking(). I've removed the beginDisplay/endofDisplay pairs which I had added to both of these functions. x_getc() had already been protected from imworking by the doing_kbd_read flag (set in tgetc() in input.c). But x_typahead() needs the same protection. I've added some code which sets the doing_kbd_read flag and restores its old value prior to returning from x_typahead(). + random.c (catnap): Ifdef'd for X11 to call x_typahead when called with flag which indicates that the input queue should be watched for user input. We may want to restructure this code and the code which calls catnap() somewhat to use Paul's idea for a timed read. + x11.c, proto.h, termio.c (x_typahead): Now takes as a parameter the time in milliseconds to wait for type-ahead to occur. + x11.c (kqpop): Return character popped from end of queue, not beginning. (x_getc, x_typahead): Protect guts of function from imworking() with beginDisplay / endofDisplay pairs. I originally thought that this was causing some problems in the mapping code which seemed to be caused by the imworking interrupt. Even though the problem was with kqpop(), I'm leaving the beginDisplay / endDisplay pairs in since the keyboard queue routines are probably not reentrant. + random.c (catnap): Changed argument to sleep call to allow for catnaps longer than one second. + termio.c (typahead): Call x_typahead instead of x_is_pasting. + x11.c, proto.h (x_is_pasting): Deleted. + x11.c, proto.h (x_typahead): New function. + termio.c (typahead): Modified first version of this function to match the second with regard to X11 code. + random.c (catnap): Block SIGALRM signals while in select(). + configure.in (sigprocmask): Check for existence of this function. + random.c (catnap): Use both tv_sec and tv_usec in the HAVE_SELECT code. This is necessary (on certain systems at least) in order to sleep for longer than one second. + input.c (tgetc): Added infinite loop detection. Infinite loops can occur as a result of mapping. + map.c: Added new data structures and functions for dealing more fully with map and map!. Removed the old structures and functions for dealing with a simple case of map. + input.c, proto.h (tungetstr): New function. + main.c, insert.c (map_check): Removed calls to this function. + map.c, proto.h (map_check): Deleted. + map.c, proto.h, cmdtbl (map_proc): Deleted. + proto.h, map.c (relist_mappings): Deleted declaration from proto.h. Moved to map.c and declared static with new parameter. + input.c (kbd_reply): Added code for KBD_NOMAP. + estruct.h (KBD_NOMAP): New kbd_reply() option. + map.c (addtomaps, addtomap, maplookup): New functions for dealing with mapped keys and key sequences. There is also a new data structure (struct maprec) and a couple of global variables for storing the maps. [I discovered after I'd gotten this code working that Tom had written some similar looking stuff which is located in mapchars.h and mapchars.c.] + input.c (kbd_key): Added call to maplookup. Made small change to the ANSI_SPEC stuff to avoid catnapping if we've already catnapped in maplookup(). My initial inclination was to remove the ANSI_SPEC stuff, but I've decided to leave it in place for a while. I don't yet understand the workings of input.c well enough to muck about with it too much. + tcap.c (keyseqs): Table associating function key capability names (in terminfo/termcap) with the code which vile should use when one of these sequences is received. (tcapopen): map key sequences found in keyseqs[]. + input.c (tungottenchars, tungetc, tgetc): Use a TBUFF instead of fixed size array for storage of ungotten characters. tungetc() will now cause ungotten characters to be stacked. Previously, only one keystroke (which may consist of multiple characters) could be ungotten. Now, multiple keystrokes may be ungotten. + x11.c (x_key_press): Set the high bit (HIGHBIT) if one of the Mod1 (Meta) keys are held down. + x11.c (selgc, revselgc): New fields in struct _text_win. (x_preparse_args): Initialize selgc and revselgc. (x_setfont): Set font in selgc and revselgc. (x_scroll): Use selgc and revselgc to display selections. (display_cursor): Call flush_line() instead of calling XDrawImageString() directly. + select.c, display.c (VASEL): Use instead of / in addition to VAREV in certain places. + estruct.h (VASEL): New preprocessor constant used for indicating selections. + select.c (extended_region): Fixed a bug which manifested itself when extending a selection with text before the selection. (operattrital): Fixed message passed into operator(). + line.c (put): Rewritten somewhat to be faster for non-rectangular regions. Tests on a SPARCstation IPC indicate that the new code is 8-16 times faster. The old code may be reenabled by searching for SLOWPUT in line.c and changing this preprocessor constant from 0 to 1. + vile.hlp (popup-choices): Changed documentation regarding this global value. + main.c (global_val_init): Initialize GVAL_POPUP_CHOICES to immediate. + modes.c (FSM_CHOICES, struct FSM, fsm_popup_choices, fsm_error, fsm_tbl, fsm_idx, is_fsm, legal_fsm, fsm_complete): New stuff for dealing with fixed string modes. (fsm stands for fixed string mode). (adjvalueset): Call the fsm stuff. + modetbl (POPUP_CHOICES): Made this a string mode. + input.c (kbd_reply): Conditionally compile call to popdown_completions() based upon how OPT_POPUPCHOICE is defined. + bind.c (fill_partial): Unconditionally call TTflush() since it is needed to force the partial completion to be written out. (kbd_complete): Changed logic yet again regarding the use of cmplcol. It is only used for scrolling now. The completion list is automatically displayed if no progress was made in performing the completion. This means that _something_ will happen visually when you press tab. Either the completion will be wholly or partially successful, or the completion list will pop up. + filec.c (trailing_slash): Fixed problem (for unix systems at least) where we were unable to get completions off of "/". + filec.c (pathcmp): Wrote a simpler, faster, but possibly less functional version. Tom should look this code over to make sure that I haven't broken something. This new version seems to speed things up quite a bit. (makeMyList): This now takes as a parameter the name which is being searched for. We exclude from the list constructed those pathnames which are in subdirectories below the directory in which name might be found. (bs_find): Took out calls which make copy of the pathname and lengthened it. If everything is done right prior to calling bs_find, it should already be in canonical form. I'm hoping that this will increase the speed somewhat. (makeString): Added length parameter in order to avoid calling strlen. Fixed all callers. (makeString): Allocate an extra byte to be used as a directory scan indicator. (already_scanned): Use the scan indicator byte to see if directory has already been scanned. This should avoid rescanning directories and it also fixes the problem of being unable to get completions for directories which have already had a subdirectory scanned. Scenario... :set dirc :e /home/kev/GNU/ Backspace so that just /home/ is showing. Press . Type in kev/. Only completion shown is GNU/. (bs_init): Removed the flag parameter which indicates whether or not to clear the buffer. (bs_find): Removed the iflag parameter and fixed all callers. + proto.h (bs_find): Nuke iflag parameter in declaration. (bs_init): Removed flag parameter from declaration. + bind.c (scroll_completions): New function called from kbd_complete. (cmplcol): Changed the way in which this variable is used for deciding whether to show or scroll a completion list. + window.c (newlength): Fixed the off-by-one errors which were causing xvile to exit with the X error "BadValue" for opcode X_ConfigureWindow. What was happening was the bottom window was being left with size zero...this bug may be observed in ordinary vile (in an xterm) by starting vile, splitting the [unamed] window and resizing the bottom window to one line. Then use the (X) window manager to resize the xterm window down in size by one line. You will then observe that there are two mode lines at the bottom of the xterm one above the other with no buffer displayed for the bottom-most one. + window.c (wpopup): Don't let an error message be displayed when we can't split a window. Also permit curwp to be used if it's the only window available. + proto.h, buffer.c (zotwp): Moved delcaration from latter to former. Also removed "static" from definition of zotwp in buffer.c. + input.c (kbd_reply): Call popdown_completions() to get rid of the [Completions] buffer. + bind.c (popdown_completions): New function for getting rid of the [Completions] buffer. + buffer.c (zotwp): Switch back to most recent buffer on buffer list after deleting windows for the selected buffer. + proto.h (shrinkwrap, popdown_completions): Declared these functions. + bind.c (show_completions): Call shrinkwrap() if completions buffer is already popped and gets larger (in order to see as many completions as possible). + random.c (liststuff): Only call shrinkwrap() if buffer not already popped up. + x11.c (x_open): Don't call setpgrp() on bsd compat systems. Also added comment explaining why. + random.c (liststuff): Call shrinkwrap(). + window.c (shrinkwrap): New function. + bind.c (makecmpllist): Fixed line of code which was causing completion list to be truncated. + display.c (imworking): Took out the #if 0 which I used to remove the two lines which I suspected of causing portions of the "working..." message to hang around afterwards. Instead, I supplemented the test used to change the column to erase at. It now checks to see if the message line is being read. + bind.c (makecmpllist): Print completions sorted by column rather than by row. + bind.c (makecmpllist, show_completions): New functions. (GNU_COMPLETIONS): New feature test indicating GNU readline style completions. Define this to be 0 to get the old vile behavior. (fill_partial): Don't beep when GNU_COMPLETIONS is enabled. (cmplcol): New static global variable. (kbd_unquery): Adjust cmplcol. (kbd_complete): Adjusted logic to handle GNU readline style completions. + configure.in (AC_PID_T): Call this macro to make sure that pid_t will be defined. (CFLAGS): Only use -Wall when the --with-warnings option is used. Otherwise, we get too many warnings due to missing extern decls. + x11.c (display_cursor, x_preparse_args): Added casts in calls to XtAppAddTimeOut and XtAddEventHandler which were causing warnings. + configure.in (setpgrp, setsid): Check to see if these are missing extern declarations. + proto.h (setpgrp, setsid): Added prototypes. + configure.in (setsid): Check for existence of this function. Also added comment about VC_SETPGRP being called by VC_KILLPG. + x11.c (x_open): Call either setsid() or setpgrp() to break association with controlling terminal. This will prevent signals from being sent back to the starting process. I'm hoping that this will fix problems reported concerning xvile crashing the X server when control-C is pressed. (I have never experienced this problem). + display.c (imworking): Removed (via #if 0) the two lines which I suspect are causing portions of the "working..." message to hang around afterwards. + estruct.h (signal_pg): Tightened up conditions by which we will permit getpgrp() to be called with no argument. We still need to design an autoconf test for this. The more permisive conditions were causing getpgrp() to be called improperly on SunOS. This in turn made it impossible to use Ctrl-C in xvile to interrupt lengthy processing. + x11.c (x_set_watch_cursor): New function called from x_working() and x_getc(). Also added field curs_watch to the TextWindowRec structure. (x_working): Ignore certain types of events which could cause us problem with reentrancy. Other types of events are saved in a queue for later processing. (struct eventqueue, evqhead, evqtail): Declared saved event queue structure and variables pointing to front and rear of this queue. (evqempty, evqadd, evqdel): New procedures for manipulating the queue of events which must be processed, but not from x_working. Note!!! Not all of our reentrancy problems are solved. The new code which I wrote for saving events in a queue for later processing calls malloc(). If it should happen that the interrupt which got us into x_working() interrupted a malloc() in progress, the results could be disasterous if malloc() is non-reentrant. So far as I know, most implementations of malloc() are not reentrant. malloc() is not the only call which might get us into trouble. Other library calls (particularly the X11 and X toolkit functions) may well invoke malloc() or some other non-reentrant library call. The proper way (though not easy) to implement all of this is to split imworking() up into two parts; the signal handler and a display function. The signal handler will do very little; it will examine the state of a few other flags (which already exist to implement the current version of imworking) and then set the flag which will be examined by the display function. The display function is not invoked from the signal handler. It is called from various points in vile at which it is possible to be in a lengthy process. A good candidate would be to call it from interrupted() as it is already used for this purpose. + estruct.h (sys/time.h, time.h): Moved includes for these files ahead of include of sys/resource.h. SunOS needs to have struct timeval declared prior to including resource.h. I'm beginning to think that it might be better to nuke the include of sys/resource.h and nuke the AC_AIX line from configure.in. + configure.in (AC_HAVE_HEADERS): Added check for sys/resource.h, which appears to be necessary to include prior to sys/wait.h in order to keep gcc-2.6.0 from complaining on AIX. It first appeared that sys/m_wait.h in order to get union wait, but I believe the bug to be in the "fixed" include files. + estruct.h (sys/resource.h): Include prior to wait.h. + makefile.in ($(TARGET)): Changed order of LIBS and X_EXTRA_LIBS in link line. X_EXTRA_LIBS now comes after LIBS. + mktbls.c (main): Moved initialization of "section" to after the call to setjmp() in order to avoid gcc warning. + proto.h (fputs): Added declaration. + configure.in (Makefile): Test for the presence Makefile instead of makefile after calling xmkmf. xmkmf creates Makefile, not makefile. This was preventing X_CFLAGS from getting set properly. (with_warnings): Call AC_WITH to set this value. We shouldn't assume that autoconf will create a configure script which will automatically create/set this variable. (VC_MISSING_EXTERN): Split checks into two parts, one which is enabled with --with-warnings (for type checking purposes), the other which is mandatory. This should speed up the configuration process for non-developers. + display.c (CLEAR_PLINE): Make sure that attributes get cleared too. + x11.c (update_scrollbar_sizes -- NO_WIDGETS version): Created a separate loop for drawing the new scrollbars which occurs after the sizes have been changed. Otherwise, the scrollbars don't always properly update due to a lower bar covering an upper bar up prior to being resized. + x11.c (exposed): New field in TextWindowRec. (x_preparse_args): Initialize cur_win->exposed. (x_process_event): Set cur_win->exposed to true when an Expose event is received. (x_flush): Return immediately if no Expose events have been received. The reason for all of this is to prevent drawing to the window prior to the display server being ready for us to send the stuff. (x_touch): Make sure the cell has something in it before marking it as dirty. The reason for this is that x_touch is called most of the time to refresh a region of the screen which is clear (set to the background color). I'll handle the other cases by making sure that the required area is clear... (x_scroll): Don't call XFlush() unless visibility is partially obscured. (x_scroll): Call XClearArea() to clear area vacated by scrolling. Should be faster because we won't have to clear portions of each line individually. (x_setfont): Added call to XClearWindow() before calls to x_touch(). (x_preparse_args): Use ButtonMotionMask instead of PointerMotionMask when focus_follows_mouse is false. Otherwise, too many motion events are generated when moving the mouse through the vile window. Folks who want focus_follows_mouse will just have to live with the extra motion events for the time being. + display.c (CLEAR_PLINE): Don't mark cells in cleared line as dirty. + select.c (pop_fake_win): fixed typo in comment. + buffer.c (update_on_chg): Call b_is_temporary() instead of b_is_invisible(). This matches the logic found in makebufflist(). (makebufflist): Call update_on_chg() macro in order to help prevent future inconsistencies. + window.c (set_curwp): Added a check at the beginning of the function to return immediately if curwp is already set to the window pointer to change to. Among other things, this will avoid calling updatelistbuffers() which was responsible for preventing us from being able to select (via the mouse) from the [Buffer List] window. + x11.c (modeline_resources, selection_resources): New array which describes resources for modelines and selections. (x_preparse_args): Get subresources for the modelines and selections. (modeline_fg, modeline_bg, modeline_focus_fg, modeline_focus_bg, selection_fg, selection_bg): New fields in TextWindowRec. + x11.c (char_descent): New field in TextWindowRec. (query_font): Set char_descent field. (flush_line): Use char_descent for determining where to write out underlines. This fixes a bug in which spurious underlines were left around on the screen when displaying certain fonts. + x11.c (scrollbar_resources): New array describing certain scrollbar resources. (cur_win_rec): Statically allocated TextWindowRec. cur_win is also statically initialized to point at this structure. Needed by scrollbar_resources in order to make the default foreground and background for the scrollbars be the same as the already determined foreground and background for the rest of the application. (x_preparse_args): Get scrollbar subresources and use these as appropriate in creating the scrollbar graphics context. (x_preparse_args): Make sure that background and foreground pixel values are different. They can start out different in the resource file, but get mapped to the same values on monochrome displays. + region.c (yank_line): New code to yank the newline (if appropriate). Used when yanking mouse selections. + basic.c (setwmark): Don't permit dot to be set past end-of-buffer. (setcursor): Removed comment saying that position may be set past end-of-buffer. + vile.hlp: Corrected some minor typos. + display.c (hilite): Mark the vscreen row as changed when changing the attributes in the OPT_VIDEO_ATTRS portion of this code. + x11.c (x_preparse_args): Use 1 and 0 as the foreground and background pixel values in the call to XCreatePixmapFromBitmapData(). I think that this make sense since the depth is one. (tom) + autoconf-macro VC_SIZE_T fixes problem with size_t on CLIX and Ultrix (aclocal.m4, configure.in). + added autoconf tests for poll.h, setjmp.h (configure.in) + some lint and compiler warnings/errors for SunOS, CLIX, IRIX (eval.c, region.c, tags.c, version.c, x11.c + make IBMPC the default driver for MSDOS (estruct.h) + supplied definition for VMS to make ScratchName work (estruct.h) + "#error" doesn't work on SunOS; changed this to "error" (estruct.h) + corrected autoconf ifdef'ing of getwd/getcwd (estruct.h) + corrected lint rule in makefile.in + removed /Debug option when compiling vile on VMS (descrip.mms). + corrected logic of 'is_vms_pathname()' to handle the case of rooted logicals, e.g., "dev:[foo.][bar]name" (path.c). + corrected error on VMS which left terminal in wrong state when closing terminal (termio.c). + corrected 'resolve_filename()'; the call to update the status line had gotten lost somehow (file.c). + ifdef'd 'get_modtime()' to handle VAX C's backwards treatment of the st_mtime/st_ctime members of stat structure (file.c). + commented-out X-Window libraries in VMS link options file (vms_link.opt); (these should be autoconfigured :-) + minor cleanup of directory scanning code for NT (path.c). + modified kev's GNU choices to implement the "popup-choices" mode (modetbl, bind.c, main.c). + modified (for UNIX) the behavior of 'filter-buffer' so that filter commands with pipes work (i.e., ":filter-buffer sort|uniq") (spawn.c). + changed the yank-til command to use the same limits as delete-til, so that "yW" will yank trailing spaces of a word (opers.c). + implemented mode "popup-msgs" with new file 'msgs.c'. This is mainly useful in debugging macros; it forces a buffer [Messages] to be popped up when multiple messages are generated by a single command. (display.c, main.c, msgs.c, estruct.h, modetbl, also makefile.* and vms_link.opt). + added mode 'errorbells' to control whether vile beeps (or flashes) at all. This relies on intercepting the TTbeep calls, which are all done within 'kbd_alarm()' (mostly via 'mlwarn()') now (bind.c, display.c, exec.c, fences.c, input.c, isearch.c, main.c, modes.c, opers.c, search.c, undo.c, window.c). Changes for vile 4.6 (unreleased Tue July 12, 1994) (pgf) + changed authorship in README, added credits in vile.hlp + applied further OS/2 patches from Charles Moschel + applied Windows/NT patches from Joe Greer. don't get excited. it's just console support. :-) + added admin targets to makefile.in. these are all (?) useful directly, with "make -f makefile.in ..." since they don't depend on any of the config variables. + minor wording changes to README.CONFIG and INSTALL. + eliminated global variable "slash", renamed macro "slashc()" to "is_slashc()", use new define SLASHC in place of "slash". + did a lot of hand merging of NT and WIN31 ifdefs (since they both affected most of the same lines. this note is really just a heads-up, in case i missed/broke something. + re-renamed manpage.vmc to manpage.rc, to avoid introducing yet another file suffix. changed CHANGES and vile.hlp to match. + eliminated makefile.sav from the distribution. + eliminated all "Log" keywords, added "Header" keywords everywhere. (kev) + manfilt.c (sys/types.h): Include this file so that size_t will be defined on certain systems. + x11.c (alternate_font): Added cast to second arg in call to castalloc to avoid conversion warning. + configure.in (fputs): Added this function to the missing check list. Not needed for vile, but for manfilt.c. + manfilt.c: Converted from ANSI C to the style of C in which the rest of vile is written in. + buffer.c (makebufflist): Added cast to convert return value of strlen to SIZE_T. + filec.c (fillMyBuff): Added cast to second arg in call to bs_find(). Some platforms declare strlen to return int instead of size_t. + estruct.h (realloc): Changed prototype declaration so that second arg is unsigned. + estruct.h, mktbls.c (malloc): Changed extern declaration so that first parameter is an unsigned int rather than just int. This eliminates "conversion" warnings on some systems. + mktbls.c (free): Added extern declaration with prototype. + x11.c (estruct.h, edef.h): Moved includes of these files to before the X11 includes. I was having trouble on an SVR3 system in which flock was getting declared twice. It turns out that (which is included from does a check to prevent fcntl.h (from which flock is ultimately defined) from being included twice. In my opinion, the authors of the system include files for this SVR3 system didn't do their job very well. Rather than propogate checks to see if a particular system include file has already been included into estruct.h, I figured that a slight reordering (in x11.c) would be better. Let's just hope it doesn't break something else. + estruct.h (MISSING_EXTERN_REALLOC): Fixed my misspelling of this (lack of) feature test. + mktbls.c: Conditionally include config.h in order to use configuration parameters for Unix systems. Non-unix systems should still compile as they did before (if I didn't botch something). I was having trouble with the fprintf extern on certain systems. + makefile.in (MKTBLS): Use CPPFLAGS to build the mktbls program. This will cause HAVE_CONFIG_H to be defined. + README.CFG: New file which describes the configuration process as it relates to (x)vile. I recommend changing the name of README to NEWS and README.CFG to README to be more consistent with FSF software. I'll leave this up to Paul though. + README (impatient?): Changed message slightly. + makefile.in (install, installdirs, uninstall, makefile, config.status, mostlyclean, clean, distclean, realclean, TAGS, tags, dist): These targets added or modified to conform to the GNU standards document. + mkdirs.sh, INSTALL, install.sh: New files copied from the GNU autoconf distribution (mkdirs.sh renamed from mkinstalldirs to simplify copying files to/from MS-DOS -- tom). + config_h.in: Renamed from config.d.in. I really wish I could use autoheader to generate config.h.in as the autoconf doc describes. Unfortunately, it isn't powerful enough (without some rewriting) to do what I want. + aclocal.m4 (VC_SETPGRP): New vile configuration macro. + line.c (ksetup): Initialize kcharpending. This lack of initialization was responsible for the bug in which a newline was sometimes being inserted before a yanked region when it shouldn't have been. Also moved definition of kcharpending so that it appears prior to the definition of ksetup(). The bug may be observed as follows: Create a buffer with a single line containing the characters "foo". Enter the command ":list-registers" in order to view the registers. Go back to the beginning of the newly created buffer (containing "foo"). Type "yw". "foo" will appear as the unnamed register. Type "yw" again. The unamed register will now (prior to this fix) have the "foo", but also a newline in front of it. + configure.in (tcgetattr): Test to see if this function exists. + termio.c (HAVE_TCGETATTR): Added this test to see whether or not to define USE_POSIX_TERMIOS. Also added commentary describing reason for this. + x11.c (x_flush): Removed all explicit calls to this function. It was being called after update() which is unnecessary since update (indirectly) calls x_flush(). Calls to update() now pass the force argument (the only argument) as TRUE to ensure that the update will not be deferred due to type-ahead. (resize_bar): Removed code for determining vertical positioning involving XQueryPointer() and/or XTranslateCoordiates. With a little bit of care, we can get the vertical position accurately without making a round trip server request. + x11.c (repeat_scroll): Added call to XSync() in order to make sure that repeated scrolling (via the timer) doesn't get ahead of display of the scrolling. (resize_bar): Ifdef'd to try out XTranslateCoordinates() in place of XQueryPointer(). This should work better since it will give us the coordinates of the pointer at the time of the event instead of the current pointer value. + x11.c (visibility): New field in struct _text_win. (wait_for_scroll): Do not call x_flush(). Return only when we're sure that all contiguous GraphicsExpose events have been processed. This code was previously returning after the first one. (x_scroll, x_flush): Return immediately if window is fully obscured. (x_scroll): Don't wait for the scroll if the window is unobscured. (x_preparse_args): Initialize visibility. Initialize graphics_exposures field of cur_win->textgc. (x_process_event): Added new case for VisibilityNotify which note changes in the visibility of the window and modify cur_win->textgc accordingly. + x11.c (ISC): Removed #undef of ISC. Should not be necessary any longer. (X_PIXEL): Removed #define. Not used anywhere. (NPAUSE): Nuked. Not needed. Replace occurrence in term structure with zero. (This was supposedly the number of times to busy loop in the catnap routine. + x11.c (x_preparse_args): Support for left scrollbars in OpenLook added. + basic.c, csrch.c (setnmmark, getnmmarkname, get_csrch_char): Changed name of "stat" variable to "status" in order to avoid shadowing the stat function. This didn't actually cause any problem, it just makes gcc shut up when used with Tom's preferred set of switches. + proto.h (setvbuf): Prototype. + display.c (updateline): In OPT_PSCREEN version, return immediately if v_flag for the row doesn't have VFCHG set. (psc_putchar, psc_eeol): Set VFCHG flag on proper row. + termio.c (ttputc, ttflush, ttgetc): Don't define these for X11. Also got rid of calls to setbuffer, etc for X11. + proto.h (getscreensize): Declare even when SIGWINCH is not defined. + estruct.h (malloc, realloc): Prototypes. + main.c, fileio.c (fcntl.h): Removed include from here. estruct.h now includes it. + estruct.h (time.h): Included here. Don't include both time.h and sys/time.h if they conflict with each other. + version.c: Removed include of time.h. + proto.h: Reorganized prototypes for system calls to use the MISSING_ test to determine whether an extern declaration needs to be made. + estruct.h (libc.h): Include this file (NeXT has hundreds of prototypes declared here). + termio.c (LINUX): Nuked ifdefs surrounding calls to tcdrain(). + estruct.h, random.c (sys/select.h): Moved inclusion of sys/select.h from random.c to estruct.h (so that any types declared in sys/select.h will be available for later inclusion of proto.h). + estruct.h (AUX2, AIX, OSF1, LINUX, V7, BSD386, UNIXPC): Eliminated. + eval.c (AUX2, pyr, AIX): Replaced in #if with HAVE_LOSING_SWITCH_WITH_STRUCTURE_OFFSET. I'm open to suggestions on a better name for this. + proto.h, estruct.h (fcntl.h, sys/wait.h): Included from estruct.h instead of proto.h. + npopen.c (sys/wait.h): Removed include from this file. + x11.c (start_selection): Yank selection prior to releasing selection when persistent_selections are disabled. (x_process_event): Check to see if multiclick time has expired prior to discarding motion event when cur_win->numclicks is greater than one. (If it's expired, we don't want to discard the event). + display.c, termio.c (getscreensize): Moved from display.c to termio.c. This is a better place for it since we are invoking ioctl. (This also explains why it was necessary to include the termios / termio / sgtty stuff in display.c.) + estruct.h (SVR3, ODT, ISC, HPUX): Eliminated. + termio.c (ttopen): Changed preprocessor feature test for call to setvbuf. Also added code to handle systems (old SVR3 systems) which have the second and third arguments to setvbuf reversed. + main.c (catchintr): Always reinstate the signal handler regardless of system. The code should probably be revisited... + spawn.c (rtfrmshell): Ditto. + estruct.h (USE_BCOPY): Usage eliminated as it was never being defined anywhere. (SYSV_STRINGS): Eliminated since it was defined, but never referenced. (strings.h, memory.h): Included as per GNU recommendations. (ULTRIX): Removed references to this unix variant. + random.c (current_directory): Eliminated reference to POSIX and reorganized preprocessor tests for how to get the current directory a little bit. + fileio.c: Eliminated reference to BERK. + termio.c: Eliminated reference to BERK and other unix varieties. We now use HAVE_TERMIOS_H, and company. I also eliminated code specific to OSF1. If there's a problem with it, we should try to deal with it elsewhere (such as the configuration script). + dirstuff.h: Added stuff for including obscure readdir headers. Eliminated reference to BERK. + estruct.h (SIGT): Wrapped an ifndef around the logic that defines SIGT and SIGRET since they will be determined by the configuration script. Also removed tests for various specific varieties of UNIX from this logic. (HAVE_SELECT, HAVE_POLL): Removed preprocessor logic for both of these. The configuration script now determines which of these are available. We do undef HAVE_POLL if HAVE_SELECT is defined however. (USE_INDEX, HAVE_GETHOSTNAME, signal_pg): Changed preprocessor logic. (BERK): Eliminated all occurences. + display.c (termios.h, termio.h, sys/ioctl.h, ioctl.h, sys/types.h sys/stream.h, sys/ptem.h): Removed includes and ifdef logic connected with these header files. They don't appear to be used anywhere in display.c (though I have no doubt that they were at one time). + makefile.in: New file; a template for creating the makefile. This file was created by hacking the old makefile. + configure.in: New file for creating the configure script. + config.d: Template file for creating config.h. (tom) + modified 'mktbls' so it can be used as a function in a Windows 3.1 application (e.g., fixed memory leaks, top-level return). + built with kevin's autoconf script on Linux (both termcap and Xt versions), adjusted/corrected various files for autoconf and for MSDOS filename compatibility (aclocal.m4, bind.c, cmdtbl configure.in, edef.h, epath.h, estruct.h, file.c, fileio.c, glob.c, ibmpc.c main.c, makefile.in, makefile.tbc, map.c, mktbls.c, npopen.c, path.c proto.h, random.c, spawn.c, termio.c, x11.c). + made a driver-stub for Windows 3.1, to get a clean compile/link. + corrected 'ibmscroll()' function, which was broken in vile 4.4 (ibmpc.c). + corrected reopening of stdin when a file is piped to vile; on Linux this caused vile to hang (main.c). + moved include of estruct.h after X Window includes in x11.c, since the definition of VMS causes the compile to break otherwise. + added new (some incomplete) files for Windows 3.1 port, map command and debugging: commdlg.msg mapchars.c mapchars.h trace.c trace.h win31drv.c win31drv.def win31tbl.c win31tbl.def win31tbl.h win31tbl.rc + modified 'gtfun()' and 'sindex()' to use single return points, to ease debugging. + added/used new macro 'window_b_val()' to handle the cases in which we reference a mode value for the current window, e.g., when executing a macro (estruct.h, isearch.c, oneliner.c). + initialize VIDEO-struct in 'vtinit()' that Purify found (display.c). + corrected globbing logic so that expressions such as `which script` work properly when the glob mode is "on" (glob.c). + added autoconf test VC_CPP_SUBS to make the ScratchName macro port. + corrected :-command parsing so that repeated ":" at the beginning of the line is ignored (exec.c). + reset mouse position when changing the screen resolution to avoid confusing users about its visibility (ibmpc.c). Changes for vile 4.5 (released Wed Apr 27, 1994) (pgf) + backed out change to "set all" which switched to Settings buffer. it didn't work, and was confusing in any case. (modes.c) + redid the variables that identify os and vile variant. now the $progname variable says "vile" or "xvile", and the new $os variable says "unix", "dos", "vms", or "os/2". (modetbl, eval.c, version.c, proto.h, main.c, edef.h, vile.hlp, macros.doc) (kev) + vile.hlp: Documented manual page stuff. Changes for vile 4.4 (not released April 26, 1994) (pgf) + fix for ": & 1" in empty buffer. (exec.c) + ensure that problems opening a file are correctly reported at startup, by giving swbuffer() a real return value. nextbuffer() returns this, which lets main() do the right thing. i hope letting swbuffer() return readin() errors doesn't have too large a ripple effect. we'll see. the return from swbuffer() is ignored in many cases anyway. (buffer.c, main.c) + on file open errors in readin, continue with the routine, so the buffer gets set up correctly. cmode was wrong before, for instance. (file.c) + added select operator (bound to ^S) to do selections. it yanks by default. (region.c, opers.c, cmdtbl, select.c) + implement support (via new arg to scwrite, not yet put into other "screens" that provide this routine) for OPT_VIDEO_ATTRS under DOS. (display,c, ibmpc.c, proto.h) + removed KBD_LOWERC from the DOS KBD_OPTIONS, as an experiment, even thought tom told me not to. i've seen no ill effects so far. there must be something, though... (could this be compiler (well, libc) dependent?) (filec.c) + added proper dependencies to makefile.wat + recalc kregwidth on last call to kinsertlater, since we may never get a newline to force it. (line.c) + added mode "view-on-readonly" which causes view mode to be set if file is read-only on first open. (modetbl, file.c, vile.hlp) + implemented sel_motion() routine, that allows referencing the selected region from an operator. fixed various off-by-one nits in various places to mkae this work right. (basic.c, opers.c, region.c, select.c, proto.h, cmdtbl, x11.c) + cleaned up beeping. too many double beeps. (file.c, fileio.c, basic.c) + now preserve DOT during yank operations, so yy and Y don't cause motion. (opers.c) + added "haveregion" backdoor to getregion() -- if the "haveregion" pointer is set, getregion just returns it as the region. see select.c for uses of this. (region.c) + added #error statement to little/dis-used screen drivers, to find out which are really used. (at386.c, hp110.c, st520.c, z100bios.asm, z_ibmpc.c, dg10.c, hp150.c, vt52.c, z309.c) + function lookup is now first match, rather than exact, to match documentation. (eval.c) + fix core dump from referencing empty line for macro label goto. (exec.c) + eliminated unimplemented "target" variable. (modetbl) + created doc for programmed macros, based on uemacs 3.10 doc. (macros.doc, makefile) + check all getregion() return values. (word.c, select.c) + moved operselect() to select.c from opers.c. + reset haveregion after use in getregion(). (region.c) + sel_motion and operselect, if now used together in a single command, can be used to extend a keyboard selection. (select.c) + giving any argument to "shell-command" or ":!" now suppresses the press-return prompt. (spawn.c, proto.h) + added calls to update() if screen is garbage in mlyesno and mlquickask, in case they are called after a shell-escape from a macro. (input.c) + fixed cursor position after ^B command (should rest at bottom of window) (basic.c) + fix ordering of kdone/kinsertlater stuff (kcharpending was being reset by kdone called from kinsert) to fix problem where a yank containing an initial blankline would not record that blank line. (line.c) + changed kcod2str, fnc2str, string2prc to deal in "p-strings", i.e. binary strings with length stored in first byte. needed this so bindings involving null character could pass through everywhere. the :map code in map.c still has problems. (bind.c, x11.c, x11simp.c, input.c, map.c, proto.h) + separate target for Sony NeWS -- for sys/ioctl.h problem (makefile, termio.c) + patch from Michael Finken, to allow keeping the buffer name in the window and icon names (x11.c, display.c, proto.h, vile.hlp) + tungetc() now pushes back 16 bit keycodes using kcod2escape_seq() to translate them to a user-typable sequence, and maintaining a stack of pushed back chars. it should still only be used for one key's worth of pushback. (input.c, some others?) + insert mode now encodes SPEC keys (when recording them) as poundc followed by poundc+1 followed by c. real poundc chars are stored as poundc followed by poundc. there is no more "altpoundc". (insert.c) + merged OS/2 patches from Charles Moschel (ccm@cais.com). reworked them somewhat to use better ifdefs in many cases. This touched a lot of files. + introduced routine strncpy0() which jams a '\0' into the last copyable byte. changed several of the most bug possibilities to use it. (bind.c display.c eval.c finderr.c input.c isearch.c main.c makefile proto.h tags.c) + eliminated #elif from x11.c, for HP users. + reworked Charles Moschel's os2 screen driver into a "borland" console i/o driver. i can't test it on OS/2, but i think it's the equivalent of his. now there are separate ifdefs to control which os we want MSDOS or OS2 the pc keyboard IBM_KBD the physical screen driver IBMPC the console i/o driver BORLAND the Borland compiler is still represented with "TURBO", since that's still predefined in Borland C++. (borland.c edef.h estruct.h ibmpc.c main.c makefile.tbc spawn.c termio.c version.c) + split routine execproc() in two, to make it internally callable, given the name of the procedure to run. (exec.c, proto.h) + added cdhook variable, which is the name of a procedure which is run when changing current directory. (edef.h eval.c exec.c modetbl proto.h random.c) + added variable $ocwd, the previous directory (modetbl, eval.c, random.c, proto.h) + backed out changes that implemented the "keep buffer name in window and icon title" resources. this is better done with hooks. (x11.c, proto.h, display,c, vile.hlp) + apply patch from richard hussong to fix scrolling problem on some video bios'es (ati ultra pro) (ibmpc.c) + added more hook variables: read-hook, write-hook, buffer-hook, exit-hook. modified help file to describe procedures, and hooks. + added new variable, $abufname, which is the "alternate buffer", i.e. what you'd get if you type '#'. (modetbl, eval.c, vile.hlp) + apply fix to map_proc from lee johnson -- :map g G followed by 1g didn't work, since 1 was considered default. (map.c) + change macros BAD and GOOD to BADEXIT and GOODEXIT to avoid conflicts on AIX. (display.c estruct.h file.c ibmpc.c main.c mktbls.c spawn.c tcap.c termio.c version.c window.c x11.c x11simp.c) + it is now possible to use forward-char-scan et al from a macro. (csrch.c) + "response variables", the ones that ask questions (e.g. @foo) now remember a default response. (eval.c) + added support for using the ansi.c screen driver under MSDOS. (ansi.c, termio.c, estruct.h, makefile.wat) + added w! and x! as synonyms for w and x, since they are the same under vile. (cmdtbl, vile.hlp) + added support for new GNU libio stdio pkg, for isready_c() macro. (fileio.c) + fix globber() so :g/foo/p leaves you in the p-lines buffer, which is probably where you want to be. (globals.c) + fix problem in main that caused us to skip first file if noautobuffer was set. (main.c) + now that there are so many modes, it's desirable to switch to the ":set all" ("show-modes") window when it pops up. (modes.c) (tom) + warning/lint cleanup (bind.c buffer.c display.c edef.h estruct.h eval.c fences.c insert.c line.c proto.h random.c region.c select.c tags.c x11.c) (kev) + select.c (EFFICIENCY_HACK, attribute_cntl_a_sequences): New code which makes attributing regions with large numbers of attributes much more efficient. + x11.c (CLEAR_THRESH): Changed value and added explanation. (NONDIRTY_THRESH): New constant. (x_getc): Added inner loop for getting as many X events as possible prior to returning in order to let the typeahead check in update() do its job. + manfilt.c (fatal_error): New function. (INITIALSIZE): New constant. Got rid of old constants which hardwired the buffer sizes. (line_in_size, line_out_size): New variables for keeping track of the buffer sizes. (getline): Rewritten so that input lines may be of arbitrary length. + display.c (update): Keep track of original row and column in case we're reading the message line. If we are reading the message line, update the hardware cursor to the original row and column instead of the current window. I think that this problem was evident only when the OPT_PSCREEN feature was enabled. + estruct.h (do_mark_iterate): Reassert ownership of selection if appropriate. + proto.h, select.c (sel_reassert_ownership): New function. + display.c (reframe): Fixed an off-by-one error which was causing the cursor to be placed on the mode line after a reframe in a one line buffer. + input.c (kbd_reply): Fixed off by one error which was causing core dumps on the NeXT. + x11.c (x_get_selection, copy_paste): Added caste for third argument in calls to tb_bappend. (alternate_font): Removed debugging printf. + x11.c (x_configure_window): New code for unmanaging / managing the children of a motif form which will hopefully prevent the problems with huge scrollbars. + random.c (line_count): Added null buffer check. This lack of check was causing core dumps on start up in xvile when $font was being set from the .vilerc file to a value which caused a resize. + cmdtbl, proto.h, select.c (operattrital): New operator for italics. + x11.c (x_setfont, query_font): Cleaned up memory leaks, one stemming from the fact that the XFontStruct structure pointed at by the pfont field was never getting freed, the other concerning allocation of memory for font names. (starting_fontname): New field in the TextWindow structure. This field points to the initially requested font name. The fontname field is reserved for holding the name of the font once it has been successfully loaded. (query_font): Attempt to find the fully qualified font name (rather than an alias or template). Also, free storage associated with new fields in struct _text_win (see below). (FSRCH_BOLD, FSRCH_ITAL, FSRCH_BOLDITAL): New flags. (fsrch_flags, pfont_bold, pfont_ital, pfont_boldital, left_ink, right_ink): New fields in struct _text_win. (alternate_font): New function. (flush_line): New code for handling bold and italics. Old code for doing bold retained as a fallback position in the event that a bold font is unavailable. (x_get_font_atom_property): New function. (x_flush): New code for cleaning up the mess sometimes left when using monospaced fonts. [Glyphs in monospaced fonts sometimes extend outside the bounding box associated with the font. Thus when a dirty cell adjacent to a non-dirty cell is updated, the non-dirty cell also needs to be updated in the event that the character previously written to the dirty cell extended outside of its bounding box and into the non-dirty cell.] + window.c (delwp): Always set WFHARD on the receiving window (instead of just when the current window pointer is the same as the one being deleted). This corrects a problem with the mode line attribute sometimes not getting reset. [Scenario: Edit a file. Split the window. Type '*'. Move to a different window than the "*" window. Type '*' again. Both vile and xvile leave the line that the message line used to be on bold.] + macros.doc: Fixed some minor typos. + select.c (extended_region): Added prototype. + manfilt.pl: New file. Perl script for filtering backspace sequences. + cmdtbl (operattrcaseq): Replaces operattrbsseq. + proto.h, select.c (attribute_cntl_a_sequences, operattrcaseq): Replaces attribute_backspace_sequences and operattrbsseq. + random.c (getcol): Now works for empty lines where offs > 0. This is probably one of many functions which will need to be fixed now that it is possible to position the cursor on the newline character. (See Paul's changes.) + file.c (getfile2): Don't prompt user if noninteractive. This change prevents an infinite loop when executing my manual page macro (or any macro which needs needs a buffer where there is a name conflict. Paul and Tom should look at this to make sure that it doesn't break keyboard macros. + display.c (updattrs): Garbage collect attributes which should display something (i.e., have nonzero ar_vattr field), but refer to an empty region. + display.c (updattrs): Added a parameter to this function and changed call in update() to reflect this change. Also moved placment of call from within update. The result of all of this is that the attributes will only be updated only when WFHARD or WFEDIT is set for the window. WFEDIT is needed in order to display changed boundaries of the attributed text in the event that the marks denoting the ends are moved as the result of an editing operation. + estruct.h (do_mark_iterate): Rewritten to be faster. This improved performance a lot when there are a large number of attributes. A terminfo man page took roughly 14 seconds to attribute prior to this change. Afterwards, it took about 8 seconds. (The terminfo man page is somewhat unusual in that it has a large number of underline and bold sequences). + cmdtbl (operattrbsseq): New command for attributing sequences of backspaces. + select.c, proto.h (attribute_backspace_sequences, operattrbsseq): New functions. Also moved together the prototype declarations of functions defined in select.c to one place. + display.c (modeline): if insertmode is defined (as a macro), display the modeline for each modeline instead of just the current window. + display.c (updattrs): Make sure that start_col is not less than zero. + exec.c (execute): In test to see if we're not in insert mode... Short circuit the test with a test to see if curwp is NULL since we get in trouble when insertmode is not a global variable and is defined in terms of a window trait (see estruct.h). (We were getting core dumps when starting up with xvile @manpage.rc). + cmdtbl, opers.c (operattrbold, operattrul): New commands for attributing regions of text. + edef.h (videoattribute): New variable for communicating with attributeregion(). + select.c, proto.h (attributeregion): New function. + select.c (selectregion): Took out checks to see if startbufp and selbufp are NULL before calling detach_attrib as detach_attrib already performs these checks. + display.c (updattrs): Use logical or to set attributes other than VAREV in order to allow overlapping attributes. Use exclusive or to set VAREV causing overlapping reversed regions to reverse themselves (this is perhaps _too_ tricky; we might consider just using logical or. It would simplify the code and it might actually be what the user wants.) Previously, we were just using assignment to set the attribute which cause the attribute displayed to be the last attribute processed. + x11.c (flush_line, x_flush): Modified to handle bold and underline attributes in addition to reverse video. Some work still needs to be done on this to use a bold font for displaying bold if it exists with the present code as a fallback if there is no bold font available. + manpage.rc: New file containing vile macros for getting and attributing manual pages. + estruct.h (do_mark_iterate): Fixed problem which was causing r_orig for the first attribute to not get processed. I think that this was responsible for some core dumps. + x11.c, proto.h (own_selection): New externally available function. It used to be x_own_selection which was private to x11.c. All calls to x_own_selection in x11.c eliminated. + estruct.h (OWN_SELECTION): Macro which will either call own_selection() or do nothing depending on whether or not (x)vile is compiled on a system which is prepared to share selections with other clients or not. + select.c (selectregion, sel_extend): Call OWN_SELECTION(). + proto.h (sel_yank): Name changed from sel_yankmaybe since there is very little "maybe" left about its action. + select.c (sel_yank, push_fake_win, pop_fake_win): sel_yankmaybe rewritten to become sel_yank. sel_yank now uses push_fake_win() and pop_fake_win() to allocate a fake window so that the selection in the selection buffer may be yanked no matter what (unless there is no selection). + x11.c (x_process_event, x_stash_selection): Call to sel_yankmaybe eliminated from x_process_event. Call to sel_yank added to x_stash_selection. This means that the selection will only be yanked when needed thus permitting modification of the selection prior to pasting. + basic.c (setnmmark): Nuked old keyboard selection code. + select.c (WHICHEND, whichend): New type and variable for keeping track of which end of the selection is fixed while sweeping a selection. + select.c (sel_begin): Set whichend. + select.c (sel_extend): Selection yanking code removed. Usage of parameter to sel_extend modified to indicate if wiping (sweeping) with mouse. Code added to check whichend and act accordingly. Also do the "one-off" fixup here instead of in x11.c. + select.c (output_selection_position_to_message_line): Fixed "one off" error in reporting extent of selection. + x11.c (x_preparse_args): Set foreground and background in scrollbar graphics context. + x11.c (extend_selection): Changed call to sel_extend to reflect new interpretation of its parameter. + x11.c (multi_click): Put back decrement after end of word is found. (Paul had previously removed it.) + x11.c (x_process_event): Changed call to extend_selection when button 3 is pressed to indicate that we are _not_ wiping. (Wiping is permitted however and mouse motion will do the right thing). + x11.c (pscreen): Added extern declaration. + x11.c (IS_DIRTY_LINE, IS_DIRTY, IS_REVERSED, MARK_LINE_DIRTY, MARK_CELL_DIRTY, CLEAR_LINE_DIRTY, CLEAR_CELL_DIRTY, CELL_TEXT, CELL_ATTR): New macros comprising the interface to pscreen. These could be moved to estruct.h or another header file for use by other screen interfaces. + x11.c (BLINK_TOGGLE): Added comment about this macro. + x11.c (cur_row, cur_col, sc, cur_row, cur_col): Removed these fields from the TextWindow structure. + x11.c (x_putc, x_move, x_eeol, x_eeop, free_win_data, x_resize_screen): Deleted these functions and changed all callers. + x11.c (term): Substituted psc_putchar, psc_flush, psc_move, psc_eeol, and psc_eeop for x_putc, x_flush, x_move, x_eeol, and x_eeop. Also added x_flush after x_scroll which will initialize the t_pflush field in the TERM structure. + x11.c (x_touch): Call MARK_CELL_DIRTY and MARK_LINE_DIRTY instead of using old mechanism. + x11.c (wait_for_scroll): Nuked XXX comment since it doesn't seem to apply any longer. + x11.c (CLEAR_LINE, SWAP_LINE): Nuked these macros which I recently wrote for use in x_scroll. + x11.c (x_scroll): Nuked code for clearing and moving lines around. + x11.c (flush_line): Minor reformatting. + x11.c (clear_line): Eliminated this dead code. + x11.c (x_flush): Rewritten. It will now call flush_line for any change in attribute instead of just reversed video. flush_line still needs to be rewritten to handle the other attributes. Handling of cursor should be better too. + x11.c (x_putline, x_fastpoutline, x_setrowcolors, x_cls): Removed this "notyet" code. The need for such functions has been replaced by new attribute mechanism and interface to pscreen. + x11.c (multi_click, display_cursor): Use CELL_TEXT instead of old data structures. + x11.c (x_process_event): Call display_cursor() on ButtonRelease event instead of in x_getc(). + display.c (updateline): Wrote new version for OPT_PSCREEN. I tried modifying the !MEMMAP version, but this version is difficult enough to understand without adding to the rat's nest of #if, #else, and #endif statements. + display.c (updgar, scrolls): Preprocessor statements and a little bit of code for OPT_PSCREEN. + display.c, proto.h (psc_putchar, psc_flush, psc_move, psc_eeol, psc_eeop, psc_rev): New functions and their prototypes. + estruct.h (t_pflush): New field in the TERM structure used by OPT_PSCREEN interface to flush the output. TTpflush is defined to allow easy access to this field via the variable term. + estruct.h (OPT_PSCREEN): New feature test. Used for determining if the screen interface wishes to access the pscreen structure directly. Definitions of VADIRTY and VATTRIB in this file depend on OPT_PSCREEN. + x11.c (x_beep): Use GXxor instead of GXinvert as the logical function in the graphics context for flashing the screen. GXxor will give better results on color displays. + x11.c (x_getc): Removed if'd out call to display_cursor(). + x11.c (x_flush): Add bounds check to make sure that it is ok to write out the cursor. + estruct.h (VIDEO): Added new field v_attrs. + estruct.h (VIDEO_ATTR): Accommodations for color. Also eliminated VACOL mask. Added VADIRTY, VAFGCOL, and VABGCOL. + display.c ([pv]scrat): Eliminated in favor of using the v_attrs field in the VIDEO structure. Also small modifications to ignore/set dirty bit in updateline(). + x11.c (display_cursor): Called from x_flush instead of x_getc to avoid flicker. Call of display_cursor from x_getc if'd out. + display.c ([pv]scrat): Replaced calls to memset with "for" loops using explicit assignment in anticipation of making VIDEO_ATTR a sixteen bit quantity when COLOR is enabled. This code will still need to be tinkered with somewhat in order to set the foreground and background colors properly for the line whose attributes are being reset. (I have placed FIXME's in the code to indicate where this needs to be done.) + display.c (scrolls): New local variables longinplace and inplace are used in determining whether or not a potential match of lines to be shifted is really better than a previously computed match. The undesirable behavior that this corrects can be best observed in vile (I used an xterm with 50+ lines). Edit a file with enough lines to be able to do a bit of scrolling. Split the window and make the upper window about half the size of the lower window. Then start scrolling through lines in the the upper window which are duplicated in the lower one. (Try it in both directions.) You will notice that portions of the lower window will be updated along with the upper. The problem was that longer matchs were being obtained by scrolling lines from the lower window up to the upper with the cost of having to later update a large segment of the lower window. This new code will count the number lines which are already properly placed (e.g., do not need to be moved at all) in a section to be potentially moved. It will then use this count to help decide if the new potential match is better than the old one. + modetbl (font): Commented out dependency on X11. + eval.c (SetVarValue, gtenv): Added code to ignore EVFONT when X11 is not defined. The reason for all of this is so that a .vilerc file which has a "set font" line in it may be shared between both vile and xvile. + edef.h, main.c (insert_mode_was): Eliminated. This variable was _only_ referenced (i.e, not set anywhere) and only referenced in one place. + estruct.h (insertmode, insmode): insmode is a new field in the W_TRAITS structure. Define macro insertmode in terms of the insmode field in the W_TRAITS structure when OPT_MOUSE is defined. + edef.h (insertmode): Don't declare insertmode as a variable when it is already defined as a macro + main.c (loop): Check to see if insertmode is set after getting a character. If it is, re-enter insert mode. The reason for the above three changes is to prevent insert mode from "moving" to a new window when using the mouse to set focus to another vile window. These changes allow a window to "remember" which mode it was in when the window was left so that that mode may be reentered when we return to the window. + select.c, proto.h (free_attrib): New function. + line.c (lremove): Traverse attribute list and fix marks indicating the beginning and ending of each attributed region. The attributed region is freed if both beginning and end both refer to the line about to be removed. + vile.hlp: Documented new resources. + x11.c (blink_id, blink_status, blink_interval): New fields in TermInfo structure. Also created new resource XtNblinkInterval and XtCBlinkInterval for setting the blink_interval field. Setting this field to zero will disable blinking entirely. Positive values will enable blinking all the time with the blink rate being the value in milliseconds. Negative values will enable blinking only when the cursor is positioned within a highlighted region. Again the blink interval is in milliseconds. + x11.c (display_cursor): New function called from x_getc() for displaying the cursor. Handles blinking cursors. + x11.c (XtNpersistentSelections, XtCPersistentSelections): New resource instance and class name for resource persistentSelections. This resource controls whether or not highlighting of selection (and indeed the selection itself), is released when clicking button one. start_selection() modified to check whether this resource is set or not and to take the appropriate action. + x11.c (invert_display, x_beep): Eliminated invert_display(). Rewrote OPT_FLASH stuff in x_beep() to reduce dependence on structures in x11.c which know about the attributes. (These structures will eventually be eliminated.) The flash obtained from the new code also looks better (it was kind of choppy before). + x11.c (x_getc): Make sure that cur_win->show_cursor is TRUE before displaying the cursor. + x11.c (x_setfont): Call update_scroll_bar_sizes when a font change will change the size of the window. + x11.c (turnOnCursor, turnOffCursor, CELL_CURSOR): Nuked all code referencing these. This is yet another step toward integrating use of [pv]screen and [pv]scrat into x11.c. + x11.c (x_getc): Display the cursor here before calling XtAppNextEvent. + x11.c: Slowed down initial scrolling of selections (you don't want the lines whizzing by if you only want a few more lines). Sped up scrolling of selections that have been scrolling for a while already. + x11.c: Added resources for scrollRepeatInterval and scrollRepeatTimeout for xvile NO_WIDGETS version. + display.c (vt_leaks): free pscrat and vscrat. + display.c (updateline): consider virtual screen attributes when noting nonblanks in right match. + modetbl, main.c, select.c (WMDTERSELECT): New window mode for controlling whether selections are terse or verbose. + vile.hlp: Documentation for selections and other x11 stuff. + makefile (select.{c,o}): Added to the SRC and OBJ file list. + select.c: New file implementing selection/attribute stuff. + proto.h (free_attribs, sel_begin, sel_extend, sel_release, sel_yankmaybe, sel_attached, sel_buffer, sel_setshape): New prototypes. + estruct.h (OPT_VIDEO_ATTRS, OPT_SELECTIONS): New feature tests. + estruct.h (NKREGS): Set to 37 (rather than 36) when OPT_SELECTIONS enabled. + estruct.h (SEL_KREG): Define the selection kill reg number. + estruct.h (MAXROWS, MAXCOLS): Moved here from x11.c. + estruct.h (REGIONSHAPE): New typedef. + estruct.h (REGION): Position of typedef moved ahead of that of BUFFER (so that AREGION can use REGION and BUFFER use AREGION). + estruct.h (VIDEO_ATTR): New typedef. New mask values for this typedef also (VACOL, VAREV, VAUL, VAITAL, and VABOLD). + estruct.h (AREGION): New typedef. + estruct.h (b_attrib): New field in struct BUFFER. + estruct.h (do_mark_iterate): New macro for iterating over named marks and region marks for the current buffer. + buffer.c (bfind): Initialize b_attribs field. + buffer.c (bclear): Call free_attribs to free attributes associated with buffer. + line.c (linsert, lnewline, ldelete, ldelnewline): Use macro do_mark_iterate to fix the marks. + tmp.c (dumpBuffer, AdjustPtrs): Call do_mark_iterate for adjusting marks. + undo.c (lineundo, repointstuff): Call do_mark_iterate for mark adjustment. + display.c (vscrat, pscrat): New variables representing virtual and physical screen attributes. + display.c (updattrs): New function called from update(). + display.c (vtinit): Initialize vscrat and pscrat. + display.c (update): Nuked assignment of the ruler line in OPT_SCROLLBAR code (x11.c no longer needs this). + display.c (updgar): update pscrat. + display.c (hilite, modeline): use vscrat to do highlighting. + display.c (scrolls): move attributes in pscrat to account for scrolling. + display.c (updateline): Use pscrat and vscrat in updating the line. + edef.h (regionshape): Declare as REGIONSHAPE instead of short. + basic.c (setnmmark): Added code if'd by OPT_SELECTIONS which implements a mechanism for making selections from the keyboard. "m." will mark the start of a selection. "m\" extends the selection rectangularly. "m'" extends a selection by full lines. "m\" extends a selection exactly. + line.c (reg2index): Added code if'd by OPT_SELECTIONS which makes the name "." the kill reg associated with the current selection. + x11.c (PANE_WIDTH_DEFAULT): Changed to 15 for NO_WIDGETS. + x11.c (MAXROWS, MAXCOLS): Moved to estruct.h. + x11.c (scroll_repeat_id, wipe_permitted, sel_scroll_id): New fields in struct _text_win. + x11.c (sel_start_col, sel_start_row, sel_end_col, sel_end_row, wipe_row, wipe_col, show_selection): These fields removed from struct _text_win. + x11.c (row2line, clear_row_selection, save_selection, change_selection): These functions removed along with all references to them. + x11.c (scroll_selection, repeat_scroll): New functions. + x11.c (do_scroll): Added code so that scroll will repeat when button is held down. + x11.c (x_preparse_args): Get button release events too for the screen widget. + x11.c (x_scroll): Rewritten to move attributes (found in cur_win->attr) along with screen data. Should be more efficient as well. + x11.c (x_flush): Changed way in which cursor is displayed in selections. + x11.c (in_selection): This macro deleted. + x11.c (x_putline): Leave cursor one past last char in line section just put unless at end of line. + x11.c (x_eeol, x_eeop): Erase to end of line/page in reverse video if in reverse video. + x11.c (x_lose_selection, x_stash_selection, x_give_selection, x_own_selection, extend_selection, multi_click, start_selection, x_process_event): Modified/rewritten to use new selection stuff. Other cosmetic improvements/modifications were made to the above functions resulting in the following user visible changes: + clicking button 1 on mode line will set focus on corresponding window without scrolling the window by one line. Double clicking on mode line will clear the current selection. + selecting text by dragging will now scroll the window up or down when the bottom or top is reached. It is now also possible to drag with the right mouse button. Speed at which text is scrolled while being selected will increase with the passage of time. + rectangular regions may be selected by using the control key as a modifier. + highlighting of selection is not lost unless another selection is made either in xvile or somewhere else or unless mode line is double clicked upon. + it is now possible to start a selection in one window and extend it in another window (provided the "other" window is open to the same buffer). Changes for vile 4.3 (released March 29, 1994) (pgf) + make all functions called by do_lines_in_region be prepared to take empty lines. (region.c) + added terse addition to the README (tom) + corrected test in 'eol_command()' to allow command-names with '-' (bind.c) + corrected last 'mlerror()' change (display.c). + added 'tags' rule to override conflict with default rule (makefile). + corrected 'readpattern()' so that '%' can be used as delimiter in ":g" command (search.c) (kev) + call update_scrollbar_sizes() when changing fonts. (x11.c) Changes for vile 4.2 (briefly released March 25, 1994) (pgf) + fixed Register buffer animation, using static flag to limit the work done for each call to relist_registers(). (line.c) + use common update_scratch() routine to trigger animation of modes and maps. (mode.c, map.c) + add lines to vile.hlp about ".vilerc" vs. "vile.rc" + fixed several bugs in rectangular operations (region.c) + disabled "memory" command under Watcom, since _memavl() doesn't _really_ report how much memory there is left -- just how much is left before it needs to grow the heap. (main.c) + npopen() should be silent on errors. (npopen.c) + gave mlerror() a default message if errno is out of range (display.c) + rationalized use of mlerror() and FIOERR. now, the function that first generates FIOERR is guaranteed to have put out a message, probably via mlerror. (file.c, fileio.c) + systems without EISDIR now all generate EACCES for directory errors. (fileio.c) (tom) + cleanup for OPT_MAP_MEMORY compilation ( display.c fileio.c insert.c line.c random.c region.c tags.c undo.c) + cleanup of OPT_WORKING ifdef (estruct.h) + changed "#elif" to old-style because HP/UX bundled compiler doesn't treat these properly. (fileio.c, should also change x11.c). + corrected logic for arrow-keys in xvile's history by new function 'kcod2escape_seq()' (input.c, x11.c, x11simp.c). + corrected 'l_ptr()' function to ensure signed comparison (tmp.c). Changes for vile 4.1 (not released March 11, 1994) (pgf) + add include of stddef.h if POSIX, to pick up offsetof, so we don't get a warning when building xvile on linux (estruct.h) + again, fix core from is_falsem/is_truem. (eval.c) + fix compiler warning (bind.c) + removed -rows and -columns from usage message and help. (version.c vile.hlp) + fixed for the Watcom compiler; dense line modes now work. (ibmpc.c) + the 'J' (and :j) command no longer perturbs the yank/kill registers, so the sequence 'dwJp' puts back the word you deleted, not the newline that 'J' deleted. (region.c, word.c, proto.h) + DOS now uses pressreturn() after a shell escape. + streamlined tb_sappend() (tbuff.c) + changed x11 pasting to not trim leading whitespace, and to use the xxx_no_aindent() functions for performing insertions. this means you now paste what you cut, with indentation preserved from the original, rather than recreated (or lost) by autoindent or cmode. (x11.c, x11simp.c) + new routine, fnc2str(), to support above change, since the no-aindent commands are multi-char sequences. (bind.c, proto.h) + implemented rectangular regions, using new "regionshape" global, new commands ("goto-named-mark-rectangular", "put-as-rectangle-after", "put-as-rectangle-before", "open-rectangle", "blank-region"), and new behavior for rectangles of the "shift-right-region" (opens up), "shift-left-region" (deletes), the delete and yank operators. new rectangular (basic.c, cmdtbl, region.c, random.c, line.c, edef.h, estruct.h, line.c, opers.c, proto.h) + many changes in region.c, to make the region code rectangle-aware. new routines do_lines_in_region()/do_chars_in_line() to support simple cases of walking a region in two dimensions. reimplemented yankregion using these, so it is now rectangle aware. new blankline routine. getregion() knows how to set up rectangular regions. (region.c) + changed getcol/getccol/gocol/gotocol to support rectangle code. (random.c) + changed the 'fulllineregions' boolean to a 'regionshape' descriptor. (exec.c, edef.h ibmpc.c, fences.c, insert.c, basic.c, main.c, word.c, x11.c, x11simp.c) + moved a bunch of region-related code from random.c to region.c + during undo, attempt to retain offset information for marks pointing at a line being replaced. this makes exact marks last longer, and they're more important now with rectangles. (undo.c) + added extra column arguments to some of the line-processing routines, like entab/detab/trimline. (insert.c, word.c) + fixed autoindent inconsistency, when breaking a brace-terminated line in half. (insert.c) + turned off the POISON #define. this should have gone away a while ago (it fills memory with a bad patter when we free it). (line.c) + fixed old bug in the maintenance of MK.o when adjusting due to character edits. (line.c) + maintain record of longest line in a kill-register (line.c) + the histbuffer (_) command now stutters with a call to tgetc instead of kbd_seq, so that the pushback of an unused command works okay. (buffer.c) + anycb() now returns a pointer to the first modified buffer it encounters, so callers can treat the single buffer case specially. changed callers as well: quit(), zzquit(), and spawn(). (buffer.c, spawn.c, main.c) + DOS video drivers are now selected more cleanly by name. any driver can be selected from the command line (as long as its name starts with a digit). drivers can have multiple entries corresponding to multiple names. the same name can refer to two different entries, in cases where there are two resolutions for the same screen geometry. (main.c, ibmpc.c) + made backspacing be non-destructive in overwrite mode (insert.c) + eliminated the full-buffer-loop in undo.c, by using a cookie to identify the current undo operation, and using it to mark lines that have already been copied. should be a big performance win for big files on slow machines. (estruct.h, tmp.c, undo.c) + added support for setting the IBM color palette. (ibmpc.c, vile.hlp) (kev) + updated help text for X11 (version.c, vile.hlp) + added command line arguments -row, -cols, -leftbar, and -rightbar. (x11.c) + fix for motif resizing (x11.c) + updated help text for X11 (version.c, vile.hlp) + added command line arguments -row, -cols, -leftbar, and -rightbar. (x11.c) + Set XmNresizePolicy to XmRESIZE_NONE in x_configure_window in order to fix resize problems with the Motif widget set in which the scrollbars were getting set very big or very small. + Support for scrollbars on the left in motif added. openlook still needs to be done. + Added an initialization of XtNgeometry to XtVaAppInitialize setting this resource to NULL. This overrides any user specified geometry request for the top level shell. The geometry request is still available through the geometry variable which Tom added to the TextWindow structure. Tom's code for parsing the geometry has been preserved, but enhanced somewhat to set default values for the number of rows or columns in case if the user specified only the position. Width and height specifications are considered to be in character widths or heights instead of in pixels. We let the initialization of the screen and pane widgets determine the size of the outer widgets. (Much of this is as it was before...the only thing really new here is one line added in the call to XtVaAppInitialize). + Added code to set XtNgeometry on the top level widget if the user's geometry request specified the initial window position. Only the positional information is set; the width and height are left out in order so that the sizes of the children will correctly influence the initial size of the top level shell widget. + Added scrollbar support for NO_WIDGETS by using core widgets for both the scrollbars and the resize grips. Geometry management is handled with a simple homebrew widget subclassed from Composite. I believe that the scrollbar resize mechanism is superior to that found in xvile implemented with the other widget sets (particularly OpenLook). We might consider either totally getting rid of OpenLook support (how many people are going to use it?) or at the very least reimplement scrollbar resize with the same mechanisms used by the NO_WIDGETS version. We might also consider dropping the Athena widget set since it seems to be buggy on some platforms. The code will be easier to maintain though and users will not be so confused by the number of configuration options if we manage to drop a couple of the widget sets. (A middle ground might be to use only the scrollbar widgets from various widget sets. Much of the complexity comes from the differences in the Form and Pane widgets. This way we could still use other widgets from the other widgets sets in the future. This won't make the configuration any easier, but it might make the code easier to maintain.) + Modified manner in which the top of the scrollbar is set for all widget sets. Rather than forcing dot to be in the middle of the screen, we attempt to leave dot where it is. The top of the scrollbar is set based upon the top line of the window rather than dot. This gives consistent scrolling behavior. Tom's concerns that the "thumb" or slider remain visible even at the end of the buffer are also addressed with this approach. When at the very end of the buffer (so that the screen has a large number of tildes on it), xt-vile and xaw-vile will still display a sliver indicating the portion of the buffer actually shown. If this is undesirable, ntildes should be set to something small (like zero). Once this is done, the thumb will maintain a uniform size from the top of the buffer to the bottom. I've tested these versions with small buffers (buffers containing zero thru 2*curwp->w_ntrows lines) and the appearance seems to be consistent throughout. Large buffers (> 4000 lines) seem to still have a slight problem at the end of the buffer in xaw-vile). + Made the insertion bar the mouse cursor (for the xvile screen only) in all versions. + fixed x_working so that xvile may once again be interrupted. + added missing assignment so that insertion bar is now really used when the cursor enters window corresponding to the xvile screen widget. + implemented scrollbarOnLeft resource for NO_WIDGETS version. + nuked ATHENA_WIDGETS code. This code was eliminated because it was observed that the NO_WIDGETS version functions as well if not better than the ATHENA_WIDGETS version and it runs on machines which have a buggy (Athena) widget library. On the down side, it will be somewhat harder to add new widgets in the future if this is desired. (tom) + modified kevin's resources in x11.c to use "geometry" rather than "rows" and "columns". Adjusted logic so that geometry resource means chars, not pixels. Changes for vile 4.0 (not released Tue Feb 22, 1994) (pgf) + fix core from one-too-many chars to strncpy(). (eval.c) + change #elif constructs in version.c to oldstyle #else/#if + applied contributed patch for implementing 0^D in insert mode, and expanded it to implement ^^D. (insert.c) + insert mode now parses function key #c pairs returned from kbd_key(), so arrow keys work. (input.c insert.c) + no longer turn off dot recording for non-redoable commands if we're in insert mode. (exec.c) + display high-bit keyboard input on message line in either octal or hex, depending on global value of unprintable-as-octal. (bind.c) + implemented "alt-function-prefix" to make function-key parsing in insert mode less ambiguous. (edef.h, insert.c, input.c, cmdtbl, main.c) + new help for arrow keys, and cd/pwd commands. also some more pcvile differences. (vile.hlp) + fixed djgpp implementation of get_vga_bios_info, by packing the structs int 10/1b deals with. this makes 43 and 50 line modes work. (still don't work with watcom, though) (ibmpc.c) + made :memory work under DJGPP (main.c) + made catnap() work under DJGPP, so flash mode works now. (random.c) + added more dependencies to makefile.djg + apply patch for honoring the trailing $ in a tag lookup patterns. (tags.c, eric krohn) + make animation of buffer list take into account whether it contains an apropos list or a full "decribe bindings" (bind.c) + some makefile cleanup, for mips and NeXT, and compulsion's sake. + modified heuristic for setting dos-mode on an ambiguous (usually empty) buffer -- only set it if the global mode is set, and if we're actually running on DOS. (main.c, random.c, file.c, estruct.h) (tom) + added new function 'parse_pathlist()' to encapsulate the logic used in lookup of vile.hlp (PATHLOOK) and the CDPATH environment variable (fixes buffer overflow in the latter). + corrected treatment of arrow-keys (in history.c) broken in 3.65 using new function 'kbd_escape_seq()' (input.c, history.c). + modified ifdef's in 'interrupted()' to test type-ahead only for DJGPP configuration (main.c). + restored code that translated CDSENSE to driver type, because it did not set screen defaults to maximum size (ibmpc.c) (kev) + I have added scrollbars to xvile. I made a copy of x11.c, modified it (heavily) and called it xt.c. [ I've renamed it x11.c, and moved the old x11.c to x11simp.c. We can merge later. ] Minor modifications were necessary to several other of the source files. (display.c, estruct.h, main.c, makefile, and window.c.) xt.c uses the X toolkit and the Athena widget set to provide the following new functionality: A scrollbar for each vile window. The standard translations provided by Athena scrollbars control movement of text in the vile window. Resize of vile windows by moving the border between corresponding scrollbars (with the mouse). Splitting and deleting of windows may now be done with the mouse. Ctrl on a scrollbar will cause the scrollbar and the corresponding vile window to be split with the new border at or near the mouse cursor. Ctrl will delete the window. Ctrl will make the corresponding window the only window. Problems with getting the input focus set properly have been fixed. Quitting via the window manager works better. It basically works the same as if you had typed :q. vile will display a message if there are any unwritten buffers. We may eventually want to pop up an alert box when attempting to quit with modified buffers from the window manager. + added "ntildes" variable, which controls max number of tildes displayed at the end of a buffer, expressed as a percentage of window size. [pgf made it a percentage] (edef.h eval.c display.c modetbl vile.hlp) + added support for the Motif and OpenLook widget sets. + fixed bug where focusFollowsMouse would take us out of the message line when we should remain there. This change log started on Tue Feb 22, 1994.