NOTICE: This change log is officially (sez me) closed.
All further changes documented (hopefully) in "CHANGES". This
file was renamed from "CHANGES" to "CHANGES.R3" on Tue Feb 22, 1994.
Changes for vile 3.65: (released Mon Feb 7, 1994)
Big change this release is 8-bit cleanliness. See the help file
for 8-bit settings.
NOTE: If you had a FN-key binding which was bound to a "meta" (high
bit) key, you must change your binding to be a M- binding. FN- and M-
are no longer synonymous. In addition, we now preserve more of the
termio settings, so you may have to explicitly use "stty" to get
your meta-bit back. (We used to clear istrip and the parity settings.)
NOTE2: pc vile, if built with djgpp or watcom compilers, cannot change
screens to 43 or 50 line mode. i'm working on it.
+ fix bug in charprocreg() that allowed a buffer to be marked
modified even if no changes were made and there is nothing to
+ Brackets '[' and ']' are now treated like braces and parentheses
when inserting in c-mode. added new #defines for [LR]BRACK to assist
this. (insert.c, estruct.h, main.c)
+ A buffer's local "dos" mode is now set to the same as the global
"dos" mode when empty, fresh, or when dos-style lines equal unix-
style lines. (main.c, file.c, random.c)
+ giving an argument to "set-dos-mode" causes it to turn dos-mode
off rather than on. (file.c)
+ allow backspacing over autoindented whitespace, whether or not
backspacelimit is set. (insert.c)
+ new commands, ^A-i, ^A-o, and ^A-O, corresponding to i, o, and O,
but which do autoindent-override during an insert. Most useful
when pasting into a buffer, since the pasted text often already
has leading whitespace, and autoindent just adds more. this
is a different kind of override than used when pasting in xvile.
hmmm. (insert.c, cmdtbl)
+ fixed core dump resulting from calculating indentlen and checking
for '#' char at start of empty line. (insert.c)
+ add directory and host names to "vile died" message. added ifdef
and prototype for usage of gethostname. currently only used #if
BERK is true. (greg mcfarlane) (file.c, proto.h, estruct.h)
+ apply (greg mcfarlane's) fix for bug in unqname, when it's being
used at startup, and can't ask for input from user. (file.c)
+ only reclaim or destroy empty unmodified buffers if they don't
correspond to existing files. new routine ffexists() to support
this. (buffer.c, file.c, fileio,c, proto.h)
+ changed calls to kbd_key() to tgetc(), since SPEC is now outside
the range that callers can handle. (window.c spawn.c
insert.c history.c exec.c eval.c csrch.c bind.c)
+ changed all references to last1key to refer to lastkey instead,
to accompany above change. last1key is gone. (basic.c, opers.c,
+ kbd_key() now translates system-specific function-key sequences
to canonical '#-c' sequences, which kbd_seq() now interprets.
+ allow 8-bit input, by changing SPEC definition, and some table
sizes. (estruct.h, input.c, mktbls.c)
+ translate X key-events to a default set of xvile FN-bindings,
without using the SPEC define, since it won't fit through the
8-bit wide pipe we've constructed. (x11.c)
+ added new modes, printing-low and printing-high, which define
the range of 8-bit chars which should _not_ be displayed in
octal, but rather as themselves. (modetbl, modes.c, main.c)
+ change how we display 8-bit chars. (display.c)
+ new mode, unprintable-as-octal, to control display of non-printing
chars in hex or octal. (display.c, modetbl)
+ new mode, meta-insert-bindings, which allows meta-bindings (M-c)
to work while in insert mode. when off, all characters, meta
or not, are simply inserted as themselves. when on, meta keys
which are bound to functions execute those functions, all others
insert themselves. (insert.c, modetbl)
+ tb_get now returns a true 8 bits, no sign-extension. (tbuff.c)
+ allow focusFollowsMouse to be disabled by XDefaults (x11.c)
+ apply fix (kev) for infinite loop on extended lines with certain
kinds of tab values. (display.c)
+ attempt at better video support, and raw i/o, for djgpp (ibmpc.c)
+ new routines for ctrl-c/ctrl-break/critical-error handling in
djgpp environment. (main.c, proto.h, new file djhandl.c, makefile,
+ added DJGPP to the direct/dirent ifdef in dirstuff.h
+ fix for sys5 tgetent behavior, when attempting to determine if
we're an xterm. (tcap.c)
+ new targets for motorola delta machines (makefile)
+ fixes for core dumps on window resize (from kev) (x11.c)
+ new define for min no. of lines per window. (estruct.h)
+ change if_OPT_WORKING to simple ifdefs. (file.c fileio.c display.c
+ added vanillashar target to makefile, so i can produce shars
that the gnuish DOS unshar program will unpack. (makefile)
+ clarify help file regarding regions as used by the operator
+ applied contributed fix for null fontname (x11.c)
+ changed logic of tags lookup, so i can understand it, and to
correct logic surrounding "taglength" (again). if taglength is
0, matches must be exact (i.e. all characters significant). if
the user enters less than 'taglength' characters, this match must
also be exact. if the user enters 'taglength' or more
characters, only that many characters will be significant in the
+ fixed bug with wrap-around reverse searching for a string occurring
on the last line of a buffer. (search.c)
+ fixed bug in search/replace operations where replacement string
was of the form 'text\1moretext'. the length of the \1 replacement
pattern was being obtained incorrectly. (oneliner.c)
+ changed GO32 ifdef to DJGPP, to avoid name conflict with
predefinition. (input.c, fileio.c, estruct.h, ibmpc.c, path.c,
+ changed the 'interrupted' global to a routine, so we can poll for
a control-C character when real signals aren't available. (buffer.c,
edef.h, fences.c, main.c, search.c, word.c)
+ corrected EVCURCHAR case in 'gtenv()' that tried to return the
characters at the current position, even when the buffer was empty
+ added ifdef-controls OPT_SHOW_EVAL, OPT_SHOW_REGS, OPT_SHOW_TAGS
(cmdtbl, eval.c, estruct.h, line.c, proto.h, tags.c), and renamed
OPT_MAP_DISPLAY to OPT_SHOW_MAPS (map.c, estruct.h).
+ use OPT_UPBUFF in 'killbuffer()' (buffer.c).
+ added ifdef-control OPT_WIDE_CTYPES (estruct.h, input.c, main.c).
+ use new macro 'chrBIT()' to fix long/short bitmasks in character
tests (estruct.h, line.c).
+ changed 'set_bname()' to a procedure so that it can trim trailing
blanks from the buffer-name. This is done so that a ^X-k command
applied to a buffer-name beginning with "!" will work.
+ corrected length-computation in 'delins()' so that command
":s/abc\[\(..\))/abc[\1]/" works properly (oneliner.c).
+ corrected offset-computation in 'scanner()' so that wrapped search
finds text on the first line after wrapping (search.c).
+ added call to 'update()' in 'ms_processing()' so that
"show-registers" display will be properly updated at the end of
+ corrected logic in 'execute_named_command()' that prevented user from
typing ":0r foo" in an empty buffer (exec.c).
+ corrected 'bclear()', so that the b_ulinep member is reset if it is
+ lint (fileio.c, npopen.c, spawn.c)
+ absorbed 'fnc2key()' into 'fnc2kcod()' (bind.c), to simplify
unbinding of prefix-keys in 'install_bind()'.
+ corrected 'install_bind()' by new procedure 'reset_prefix()', so that
mapping characters that happen to be prefix-keys will override their
+ added definition LTRIMMED, to use in special cases (i.e., scratch
buffers) where we don't really want to show "^J" at the end of lines
when "list" mode is enabled (estruct.h, display.c, file.c, line.c,
+ animated [Mapped Characters] buffer (map.c).
+ modified display of mappings so that using a repeat-count for the
":map" command causes the actual characters to be shown, e.g.,
"#1" instead of "FN1", (map.c, modes.c).
+ added alternate boolean "glob" mode (in contrast to the normal string
mode), for configurations in which vile cannot read filename
expansions via a pipe, e.g., VMS or UNIX (mktbls.c, modetbl, glob.c).
+ moved "glob.h" definitions into estruct.h and proto.h because
the preceding change requires some definitions to precede inclusion
of "nemode.h" within estruct.h (descrip.mms, eval.c, filec.c, glob.c,
main.c, makefile, makefile.djg, makefile.tbc, makefile.wat, proto.h,
random.c, revlist, tags.c).
+ corrected test in 'index2ukb()', which caused the unnamed-buffer
to be shown incorrectly when yanking text after lines had been
+ use 'DOT', 'mode_row()', 'buf_head()' and 'win_head()' macros (basic.c, buffer.c,
csrch.c, display.c, eval.c, exec.c,
file.c, filec.c, finderr.c, globals.c, line.c, random.c, tags.c,
tcap.c, tmp.c, undo.c, window.c, word.c) for consistency and readability.
+ modified lines/cols initialization so that 24x80 is assumed if all
other lookups fail, needed for apollo sr10.2 dial-in (tcap.c).
+ added macro 'KbSize()' (file.c, estruct.h, x11.c, spawn.c, line.c).
+ corrected 'imdying()' to not save temporary buffers, and to suppress
"implybuffer" mode (file.c).
Changes for vile 3.64: (released Wed Dec 23, 1993)
+ change arithmetic expression in mktbls.c, so we don't assume
boolean expression returns exactly 0 and 1. this exercised
a bug in an HP compiler (mktbls,c, from chris sherman)
+ added fallback definition of VDISABLE to termio.c, in case
system doesn'd define it. (termio.c)
+ increased stack size for Watcom DOS builds to 16K. probably
overkill, but the other DOS builds seems to use 16K as well.
+ cleaned up some of the scanf nonsense, but not nearly enough.
+ don't let display-page changes affect the user's chosen cursor.
+ use _previous_ indentation level after a line beginning with '#'
in cmode. (insert.c, proto.h)
+ use COMSPEC environment variable when spawning a DOS shell (spawn.c)
+ assume we're an xterm if the word "xterm" appears anywhere in the
first field of the tcbuf, rather than just in the user's TERM
+ increased size of tcbuf since SCO core dumps on overflow (tcap.c)
+ initialized tb_last in tb_alloc(). (tbuff.c)
+ couple of minor user suggestions for vile.hlp and the README.
+ don't beep when motions fail due to being aborted. (main.c)
+ check modification time on first change to buffer (file.c, exec.c,
+ the filename found for a tags lookup is now passed through doglob(),
which means tagfiles can now refer to environment variables etc.
(tags.c, from S.Suresh)
+ new X resource, "focusFollowsMouse", causes xvile's current window
to track with the mouse cursor. (x11.c, from S.Suresh)
+ added '~' to the characters considered part of a pathname, so
^X-e will pick up ~pgf/foo correctly (main.c).
+ corrected last change to allow pipe to vile, in case it is invoked
via 'rsh' and cannot open /dev/tty (main.c).
+ added config flag OPT_TERMCHRS (estruct.h, bind.c).
+ animated [Terminal] and [Binding List] buffers (bind.c, buffer.c).
+ corrected call on 'slowreadf()' that resulted in wrong line numbers
when a file was piped to vile (main.c).
+ modified TurboC makefile to merge duplicate strings, saving a little
+ corrected logic that makes ".bak" file on MSDOS so that when
appending to a file (e.g., ":w >>foo") the file is copied after
+ consolidated some code that sets errno when user attempts to read or
write a directory-file (fileio.c).
+ applied fix from eric krohn to fix uninitialized structure member
+ corrected "EGA" table entry (ibmpc.c)
+ prevent 'flash' mode from being used until after 'TTopen()' (ibmpc.c)
+ corrected a hole in 'swbuffer()' that tried to use a null value for
+ modified to allow "@" startup file to have errors w/o defaulting to
"vile.rc", by checking to see if a buffer was created (main.c)
+ corrected logic of 'vtputc()' and 'vtset()' to make line-wrap display
properly when the line contains control characters (display.c).
+ corrected limits of highlighting in 'change_selection()' (x11.c)
Changes for vile 3.63: (released Wed Nov 10, 1993)
+ corrected 'pathcat()', to avoid using autoincrement in 'slashc()'
+ cleanup for gcc-2.4.5's -Wall warnings (estruct.h, display.c, exec.c,
finderr.c, glob.c, mktbls.c, modes.c, npopen.c, proto.h).
+ compiled with CenterLine 'clcc' compiler (bind.c, buffer.c,
display.c, eval.c, file.c, filec.c, glob.c, globals.c, line.c,
+ corrected 'backpage()' to update mode-line after "previous-page".
+ modified ibmpc.c to make flash/mouse code more portable.
+ corrected call on 'strncpy()' in 'kbd_reply()' where 'extbuf' may be
copied onto itself. On HP/UX, this causes the destination to be
+ modified initialization of IBMPC to make "flash" mode work better on
+ modified so that on MSDOS and VMS vile properly handles files that
are redirected to it via the standard input (main.c).
+ corrected bug that caused ":e#" command to ignore the '#' character
+ corrected handling of ":tag" command so that if a tag's length is
shorter than the taglength setting, the shorter value is used
+ modified 'writereg()' to prevent inadvertant file-write using a
read-pipe expression (file.c).
+ fixed indenting bug in formatregion(). (word.c)
+ added SHELL=/bin/sh to makefile
Changes for vile 3.62: (released Mon Oct 11, 1993)
+ enable DOS mouse processing for Turbo-C only, since some code
uses Turbo-isms to get at registers (_AX, etc) (estruct.h)
+ change references to x.ax, x.bx, x.di, etc to be x._AX_, x._BX_, etc.
to satisfy the Watcom 386 need for eax, ebx, edi, etc.
+ improper automatic indent on brace insertion fixed (insert.c,
+ the ls -a output in imdying() was producing a line with a lone '.'
on it, which was terminating /bin/mail. use sort -r to rearrange
+ re-ifdefed getscreensize, for machines without SIGWINCH
+ guard against zero values for tabstop and shiftwidth (buffer.c)
+ added global control variable to make it easy to turn off the
"working..." message. (display.c)
+ don't let hst_append() do anything if clexec is set (history.c)
+ click the mouse (with xterm-mouse set) no longer calls showcpos().
if you want the mouse position, turn on "ruler-mode" (tcap.c)
+ flash mode is now off by default. beeps should be beeps until
requested otherwise. (main.c)
+ applied vms path fix in pathcat() (path.c)
+ don't insert tabs during reformat if notabinsert is set (word.c)
+ applied patches for djgpp from Jim Crigler. (estruct.h, ibmpc.c)
+ TurboC compiler warnings (history.c, mktbls.c, oneliner.c, search.c).
+ added TurboC compiler warning patterns (finderr.c).
+ implemented mouse highlighting for MSDOS (display.c, ibmpc.c).
+ made the table-driven combinations for $sres work properly (ibmpc.c).
+ corrected 'repointstuff()', so that undo works properly for multiple
windows; other window's dot wasn't being updated (undo.c).
+ modified 'execute_named_command()' to set dot-moved flag if the
range-computation moves it, fixes warning from 'updpos()' (exec.c).
+ linted remaining size_t usage (basic.c bind.c display.c estruct.h
eval.c exec.c filec.c glob.c history.c isearch.c mktbls.c npopen.c
oneliner.c proto.h regexp.c search.c spawn.c vmsvt.c).
+ guarded &left, &right, related functions against negative indices,
+ changed sizes in regexp-struct to SIZE_T (from short, int) to support
+ added command-line option "-wm" to set X11 window-manager title
(main.c, version.c, x11.c).
+ modified prompts to make ^V echo until the character is followed by
what we want to see a la vi (input.c).
+ modified treatment of '!' character (in shell prompts) to expand it
immediately, more like vi (main.c, history.c, input.c, spawn.c).
+ corrected some ifdefs that broke !-commands when compiling small
configuration for testing (cmdtbl, bind.c, eval.c).
+ whitespace spawn.c
+ corrected redisplay logic in 'execute_named_command()' when repeated
backspace characters were received (exec.c).
+ modified logic in 'imworking()' to be a little more conservative when
erasing leftover text in the message line, e.g., when it happens
during filename-completion on large directories (display.c).
+ corrected a hole in 'hst_append()' that allowed non-interactive use
of the bind-key function to erroneously set the 'clexec' flag
breaking subsequent named-commands (history.c).
+ trailing blank, e.g., "int<sp><nl>tgetc(quotec)<nl>" breaks apollo
ctags by making it generate a pattern only for the "int<sp>" (bind.c,
input.c, isearch.c, search.c).
+ modified 'imply_buffer()' so that c-mode is set as in 'readin()'
+ corrected 'getfile()' to treat names longer than NBUFN as filenames,
and 'unqname()' to assume its 'bname' argument can have a trailing
null (buffer.c, exec.c, file.c, main.c). (This fixes a bug I
introduced in 3.60 that prevented using ":e %+" properly, where "%"
expands to a long buffer name, because the buffer names are compared
+ modified 'getfile()' to suppress redundant prompt by using returned
state of 'unqname()' (file.c).
+ modified 'mlreply_file()' to prompt if a wildcard expands to multiple
files (e.g., when reading a file) (filec.c).
+ modified 'tokval()' to expand ~-paths so macros can refer to user's
home paths (eval.c).
+ corrections to vms filename-completion (path.c).
With Purify demo
+ corrected memory leak in 'FreeBuffer()' (buffer.c).
+ corrected uninit-memory reference in 'kbd_show_response()' (input.c,
history.c), in 'dfputsn()' (display.c).
+ corrected reference to freed memory in 'listmodes()' and modified
logic to use 'animated' logic, and variables 'relisting_b_vals' and
'relisting_w_vals'. As a side-effect, this allows local buffer and
window modes to be set in [Settings] (buffer.c, display.c, edef.h,
+ corrected a null-pointer reference to 'fromline' when a ":0" command
was entered in an empty buffer (exec.c).
Changes for vile 3.61: (released Thu Sep 16, 1993)
+ when files are saved in /tmp, and mail is sent, the list is now
created with "ls -a" to make all files visible. (file.c)
+ when trying to get back to the current buffer in globber(), use
set_curwp() instead of swbuffer(), since swbuffer() may not take
us back to the same window we started in, if the buffer is
multiply displayed. (globals.c)
+ moving the cursor with the mouse (xterm-mouse) causes showcpos()
to be called, as if a ^G had been typed. the message line needed
to be cleared in any case, to delete old ^G output, so i thought
i'd try updating it instead (should a similar change be made in
+ in cmode, parentheses are treated like braces, in that if a line
ends with a left one, the next line is indented, and if it starts
with a right one, the line is aligned with the line containing the
match. this may be useful for parentheses-heavy languages like
+ nits from 3.60 integration (file.c, mktbls.c, proto.h, glob.h)
+ allow "number" mode to be set/unset in scratch buffers (modetbl,
+ use 'delay()' function in TurboC for 'catnap()' (random.c)
+ ifdef'd "dirc" and "history" modes so that they don't appear in
[Settings] when not configured (modetbl, main.c).
+ brought TurboC makefile up-to-date (makefile.tbc).
+ corrected logic of 'makemodelist()' so that both buffer and window
local modes are shown (modes.c).
+ corrected my last change to 'unqname()' to ensure that if the b_bname
field is short enough, it will have a null terminator (file.c).
+ moved logic that reports lines-deleted from 'ldelete()' to common
logic of 'operdel()' and 'operlinedel()', so that using 'ldelete()'
internally won't generate spurious messages (line.c, opers.c).
+ used 'doingopcmd' to modify return-status of motion commands (h,l) to
get rid of special-case handling so that when used internally they
don't fail; obsoleted 'forwchar_in_line()' (basic.c).
+ use macro 'cmdBIT()' to clarify flags for CMDFUNC, added flag OPTREG
to simplify test in 'execute_named_command()', and make test for
optional register and/or line-count more explicit by allowing it only
when non-punctuation follows the command (fixes ":s/pattern")
(cmdtbl, estruct.h, exec.c, input.c).
+ corrected my last change to make "2p work correctly, by using new
function 'index2ukb()' (line.c).
+ modified 'mlreply_file()' so that filename completion works on the ^W
and ^R screen commands (filec.c).
+ modified 'getregion()' to use line-number to simplify computation,
and to work with left-margin. Also whitespaced (region.c).
+ corrected test in 'loop()' that caused j/k commands to go awry in the
[Registers] buffer at blank lines (main.c).
+ corrected test in 'kbd_reply()' to avoid name-completion when the
current-response is a shell-command, e.g., "!foo -?" (input.c).
+ corrected logic in 'forwchar_to_eol()' and 'ins_anytime()' that lets
arrow-keys to go past the end of the line while in insert (or
replace) mode (basic.c, insert.c).
+ corrected logic that allowed a user to begin an insertion in one
buffer, then click the mouse to reposition into a readonly buffer
and continue inserting -- in the readonly buffer (basic.c, insert.c).
+ added mode 'flash' (ibmpc.c, main.c, tcap.c, x11.c)
+ added logic to support msdos-mouse, using defines OPT_MS_MOUSE and
OPT_MOUSE. This version only supports repositioning clicks (basic.c,
display.c, estruct.h, ibmpc.c, termio.c).
+ use symbol ALLOC_T to clarify distinction between size_t/int/unsigned
(display.c, edef.h, estruct.h, eval.c, filec.c, fileio.c, finderr.c,
line.c, oneliner.c, proto.h, regexp.c, tbuff.c, undo.c, x11.c)
Changes for vile 3.60: (unreleased)
+ added "stop" command (synonym for "suspend-vile", aka ^Z) (cmdtbl)
+ ensure shiftwidth and tabstop are always set correctly after modes
are adjusted -- any of cmode, cts/ts, csw/sw can affect. (modes.c)
+ added support to finderr() for OSF1 (DEC Alpha's, at least) compiler
errors, of the form:
/usr/lib/cmplrs/cc/cfe: Error: test.c, line 8: Syntax Error
+ took out leftover dbwrite() call from rangespec() -- may fix errant
behavior on ":.$d" (exec.c)
+ fixed helpfile note about X11 -name option -- it sets the name
used for resource lookups, not the window name. (vile.hlp)
how do we set the window name?
+ under DOS, leave the cursor shape and the keyboard repeat rate
alone. if we get complaints, perhaps we should mode-ify these,
but in general, settings like that are personal, and we shouldn't
muck with them. (ibmpc.c)
+ don't introduce extra path separators in pathcat() (path.c)
+ protect against NULL returns from getcwd, in case the directory
we're in has been removed. (random.c)
+ changed symbol "glob()" to "doglob()" to stop name conflict with
standard libraries (glob.c, eval.c, random.c, filec.c)
+ added prototypes for glob.c to proto.h
+ eliminated infinite loop when using goto-beginning-of-sentence from
end of buffer (basic.c)
+ added mode "multibeep" to control the "one beep per failed motion"
logic -- if multibeep is on (default), then every failed motion
produces a beep. if it's off, then only the first (of a set of
identical) causes a beep. (modetbl, main.c)
+ corrected possible use of uninited locals in file.c (was really
only a warning suppression) and display.c
+ turned off beeping in search.c and csrch.c, now that all failed
motions cause beeps.
+ change "Date" to "installed" in version.c, since modtime really
only reflects installation date.
+ don't let vile use a screen dimension of less than 2 in either
direction (display.c, tcap.c)
+ fixed bug that made all TERM types be thought of as xterms. (tcap.c)
+ fixed documentation of the help commands. it's been wrong
for over three years now, and it's in the first screen of
help! (^X-^H and ^A-^H should be ^X-h and ^A-h) (vile.hlp)
+ added AIX to the machines that need sys/ioctl.h, to pick up
+ reset the "calledbefore" flag in docmd(). fixes chris sherman's
problem where a second substitute-til in a macro would appear to
do nothing. (actually it was reusing its previous args, so there
was simply nothing to do) (exec.c)
+ added '>' to the characters known to the reformatting code, so
you can reformat most email replies. (word.c)
+ added automatic patchfile generation to the makefile. hopefully
i can generate patches for all future releases, in addition to
shar files. (makefile)
+ made ansi.c work with TurboC (ansi.c, main.c, display.c, termio.c),
to use as test-case for COLOR.
+ corrected highlighting code for ":%s" command with ibmpc display
+ modified 'bfind()' to always return a buffer (unless it cannot create
the buffer), use 'find_b_name()' for the no-create mode (bind.c,
buffer.c, eval.c, exec.c, file.c, filec.c, finderr.c, history.c,
main.c, map.c, modes.c, oneliner.c, random.c, spawn.c, tags.c).
+ use macros 'set_bname()' and 'eql_bname()' and function 'get_bname()'
to encapsulate buffer name, which does not necessarily have a
trailing null (bind.c, buffer.c, display.c, estruct.h, eval.c,
exec.c, file.c, finderr.c, input.c, main.c, modes.c, oneliner.c,
spawn.c, tags.c, tmp.c).
+ removed nonstandard 'strncpy()' (main.c).
+ corrected 'kbd_show_response()' to work with expand-chars mode
+ corrected 'kbd_reply()' to make the number of characters shown have
the same limit as the caller's buffer-length, and to make it always
return the data with a trailing null (input.c).
+ made 'animated' mode work for [Registers] buffer (line.c), and
modified the logic so that numbered-buffers are displayed in a
+ make shift-commands work more like vi, allowing repeated '<' or '>'
characters in a :-command to imply a repeat count (bind.c, exec.c,
+ corrected logic of 'dofile()' so that if an error is found in the
startup file, vile properly sets curbp and curwp (exec.c).
+ simplified/corrected command-history logic of to fix error that
prevented scrolling past ":e!" command, and to allow scrolling of
'<', '>' command even when repeated (bind.c, exec.c, history.c,
+ added flag KBD_EXPCMD to handle the case (from rewrite of history)
where %,#,: expansion must be done for shell commands (estruct.h,
+ added OPT_HISTORY to allow ifdef'ing of history.c code (estruct.h,
+ cache home-directories looked up in 'home_path()' to make it run
+ modified glob-expansion to allow "~" expansion. This doesn't work
with wildcards in the user-portion (e.g., "~ab?"), but suffices for
most cases (glob.c).
+ added a find-error case for apollo's C++ compiler (finderr.c).
+ modified logic for 'displaying' vs 'imworking()' slightly, to get rid
of erroneous cursor movement (display.c).
+ added function 'slowtime()' to force updates in 'slowreadf()' more
+ adjusted definitions for better lint checks on apollo sr10.2
+ make piped-input also set error-buffer (main.c).
+ revised logic that sets VAL-structs for modes to correct places where
buffer & window traits are saved without converting to local values.
Also removed code (e.g., copy_val) that checks reference counts,
since they aren't really necessary (buffer.c estruct.h main.c modes.c
+ modified behavior of 'unsetl' command to delete local setting
(eval.c, modes.c). It was only modifying (toggling) boolean modes.
+ corrected 'reframe()' to handle linewrapping case submitted by
+ corrected cursor-update in 'x_scroll()' that left stray cursor images
remaining after ^D/^U commands (x11.c).
+ corrected logic that caused selection-text to be lost when keypress
was received (x11.c).
+ modified X-windows pasting to trim unneeded whitespace when inserting
into cmode or autoindent buffer (bind.c, x11.c).
+ corrected kill-buffer flag KAPPEND, which had the same value as
KLINES (estruct.h, line.c).
+ corrected error in 'doindent()' that caused a "<nl>}" insertion to
delete nonwhite characters (insert.c).
+ corrected ":tags" command for exact (taglen=0) lookups (tags.c)
+ make failed motion-commands sound an alarm like vi (main.c).
+ modified logic for h,j,k,l,^D,^U,^F,^B commands to return false when
they fail, so failed-motion alarm works (basic.c).
+ corrected logic for b,B,w,W,e,E commands to return false only when
backing/forwarding past the buffer ends (word.c).
+ modified alternate-window motions 'scrnextup()', 'scrnextdw()',
'mvdnnxtwind()', 'mvupnxtwind()' to also return failed-motion status,
for consistency (window.c)
+ made new function 'forwchar_in_line()' to do the vi "l" command,
dissociating it from the internal motion-command (basic.c, cmdtbl).
+ made 'backhpage()', 'forwhpage()' motion-commands (cmdtbl).
+ make failed quit-commands return false (main.c).
+ make version-command show UNIX or VMS executable's date (main.c)
+ corrected behavior of 'histbuff()' when user simply toggles with the
"_" command. This did not handle the case in which the alternate
buffer was temporary, and thus had no number (buffer.c).
+ introduced new buffer-attribute 'b_lim_left', macro
'w_left_margin()', ifdef'd with OPT_B_LIMITS, use this to control
cut/paste selection in [Registers] (basic.c, buffer.c, csrch.c,
display.c, random.c, region.c, window.c, x11.c).
+ modified 'execute_named_command()' to recognize register name and
line-count for commands such as ":yank", making it handle cases such
as ":5>6", ":y a 6", ":10,20y b" (exec.c, input.c, line.c).
+ modified ":put" command to report the number of lines added (line.c).
+ split out 'version.c' because main.c got too large for apollo lint
(main.c, makefile*, vms_link.opt, link.msc).
Changes for vile 3.59: (released Wed Aug 18, 1993)
+ added VIEWOK flag for functions that execute macros. it says
it's okay to execute them in view mode, even though they have the
UNDO bit set. this fixes not being able to run @, :map'ed, or
^X-& macros in view-only buffers.
+ made the xterm-mouse mode available in xvile as well as vile, to
make it easier to share .vilerc between the two versions. the
alternative is to insist that people put ~force set xterm-mouse
in .vilerc, to override the error they'll get in xvile from the
mode not being present. (input.c, modes.c, estruct.h)
+ changed default value of "xterm-mouse" to off, to make vile behave
like it used to, and like other character applications, by default.
+ turned off support for the "working..." message for builds that
define USG, since they probably have non-restartable system calls.
+ accept any TERM variable that ends in "xterm" to be an xterm.
+ fixed "uninitialized variable 'req'" when compiling without REVSTA
+ fixed missing closing double quote in "make all" help output.
+ bumped the maximum row count from 100 to 200. i personally can't
read more than about 70 lines on a 19" mono monitor, but maybe
i need glasses. (tcap.c, x11.c)
+ took out extraneous trace.h include from x11.c
+ corrected 'col2offs()' to make it easier to position the mouse on a
tab character (display.c).
Changes for vile 3.58: (released Fri Aug 13, 1993)
+ added "sys$login:" to VMS file search path for vile.rc
+ refined 'imworking()' to get rid of leftover working-message
(display.c, file.c). Make working-message show up only when 'terse'
mode is off (the default).
+ added code to support xterm mouse-clicking (to move dot), with
additional code for later use with highlighted selections. Made this
a mode (xterm-mouse) because it does not implement cut & paste yet
(basic.c, display.c, input.c, main.c, modes.c, tcap.c).
+ added calls to 'TTkopen()' and 'TTkclose()' to termio.c so that (for
all systems) we call these within 'ttclean()' and 'ttunclean()'
+ optimized display of 'ruler' (display.c)
+ use 'displaying' as a semaphore rather than true/false flag, as a
guard against interrupt by 'imworking()' which modifies ttcol and
ttrow (bind.c, display.c, main.c, tcap.c, x11.c).
+ make ":=" command accept address (like vi) to show arbitrary address
value (cmdtbl, estruct.h, exec.c, random.c).
+ don't let 'write-til' move dot (cmdtbl).
+ modified 'doindent()' to trim leading whitespace (like vi) from the
portion of the line after dot (insert.c).
+ modified insert-code to treat the combination of repeat-count and
newline like vi, causing the repeat count to apply only to the
insertion-string before a newline. (edef.h, input.c, insert.c)
+ corrected handling of '.' repeat-count for r,R commands (insert.c)
+ modified user-variables to make them dynamically-allocated, and to
remove the restriction on the length of their names (mktbls.c,
estruct.h, eval.c, main.c). Also corrected treatment of newline in
prompt for user-variable name.
+ used 'strncpy()' to copy return-values from 'kbd_reply()', just in
case macro-tokens are too long (input.c).
+ don't expand '%' or '#' in 'kbd_reply()' if it would be the name of
an invisible buffer (input.c).
+ added universal-modes 'expand-chars' to list the characters to expand
in 'kbd_reply()', and 'expand-path' to control whether %/# are shown
as full, or shortened paths (modetbl, input.c, main.c).
+ modified X-windows config to allow processing of events when the
working-message code is executed (display.c, x11.c). This makes the
screen refresh and keyboard handling work better.
+ added 'animated' buffer-mode to control whether vile updates
scratch buffers when their contents would change (e.g., the buffer
list), made this work for buffer-list (buffer.c, display.c,
estruct.h, modes.c, modetbl).
+ revised the 'killbuffer()' code to work properly with the animated
+ modified mktbls to check for illegal mode-names (mktbls.c).
+ linted with SMALLER set (to get rid of unused functions), introduced
new ifdef with OPT_EVAL to simplify (basic.c bind.c buffer.c cmdtbl
estruct.h eval.c insert.c line.c lint.out modes.c npopen.c proto.h
Changes for vile 3.57: (released Fri Aug 06, 1993)
+ the bug check for b_ulinep pointing at a newly inserted line is
no longer valid, since we can now insert a line, make changes (which
will set b_ulinep), undo those changes, and then undo the insert.
we now just null out b_ulinep when we remove the line it references.
+ changed name of setmode() to avoid library conflict with djgpp, and
changed the other del/setg/delg versions as well. (cmdtbl, modes.c,
+ took out #define USG 0 since djgpp uses an #ifdef on this in a header
+ whitespace in basic.c
+ corrected definition of ScratchName macro for apollo SR10.2
(estruct.h) and a compiler warning (in glob.c).
+ corrected gcc warnings about 'signal()'-arguments for SunOs.
+ use new macros ACTUAL_SIG_ARGS, etc., instead of ACTUAL_SIGNAL so
that the tag-file can find the signal-handling procedures (estruct.h,
display.c, file.c, main.c, proto.h, spawn.c, x11.c).
+ customized the c-suffix default values for VMS, MSDOS and UNIX.
+ VAX/VMS C does not allow continuation-lines in ifdefs (mktbls.c).
+ VAX/VMS C may incorrectly set ferror() when feof() is true (fileio.c)
+ VAX/VMS C 'rewind()' does not work correctly (fileio.c)
+ added code to show "working..." message for time-consuming operations
(display.c, npopen.c, vmspipe.c), and to allow 'slowreadf()' to show
its progress (file.c, fileio.c).
+ linted calls on 'signal()', (main.c, display.c, spawn.c, termio.c).
+ linted calls on 'firstnonwhite()' (basic.c, exec.c, insert.c, line.c,
opers.c, region.c, spawn.c, word.c).
+ use new functions 'end_named_cmd()', 'more_named_cmd()' for clarity
(exec.c, file.c, map.c, oneliner.c)
+ added new mode 'ruler' (to display line+column in a window on the
modeline), and new window-flag WFSTAT to support it (by allowing
non-modal information to affect the modeline). (display.c)
+ corrected error I introduced into 'reframe()', and in 'row2window()'
while adding 'linewrap' mode (display.c).
+ corrected code that frees buffer's fname-field for the special case
of out-of-memory (buffer.c, random.c).
+ added new command 'tagstack' to show the contents of the tag-stack.
Modified 'tags()' to use module-level 'tagname' rather than local
copy of tag-string. (tags.c)
+ always update the modtime-at-warn buffer field when prompting
for the check-modtime mode (file.c).
+ removed (obsolete) code for DEC Rainbow (estruct.h, display.c,
+ modified 'line_no()' to return values in the range 1..MAX+1
instead of 0..MAX (random.c).
+ corrections to make X11 version work with 'number', 'linewrap' modes,
to guard against selection extending outside a window, to highlight
only the actual text within a window, and to use 'yankregion()' to
save the paste-text. (basic.c, display.c, window.c, x11.c)
+ modified 'typahead()' to know when X-windows is pasting, and the
paste-init code to supply an escape to end insert-mode, and to use
TBUFF's so that nulls can be inserted (termio.c, x11.c).
+ put the repeat-count in 'map_proc()' back the way Otto Lind had it
Changes for vile 3.56: (released Tue Jul 27, 1993)
+ after a confirm substitute operation, we now mlerase the confirm
+ be sure the [vileinit] buffer is marked as scratch while doing the
bprintf into it, so undo record-keeping will be suppressed. (main.c)
+ rearranged calls to chg_buff and ldelnewline in ldelete, so that
the buffer will still be marked clean on first toss/copy/tag to
undo. unmodified state is now restored correctly after a :g/^$/d is
+ In regular expressions, \s and \S are now true atoms. they both
must now be followed by * or + to match more than one. also, \s
no longer matches BOL or EOL (thanks to alistair and eric for
pointing out and fixing) (regexp.c) In practice this means that
one should use \s* or \s\+ where one used to use just \s. also,
if a match against ^ or $ is necessary, it must be done explicitly,
e.g. /\(^\s*\|\s\+\)word/ instead of /\sword/
+ adjusted paragraph/section/comment/sentence regexps, with help
from eric, to reflect change to \s and \S
+ make the #ifdef USE_TERMIO version of ttclean() be a no-op under
X11, as it is in the other cases. eric's right -- termio.c needs
a rewrite. (termio.c)
+ don't pass the (0) to getpgrp if we're POSIX and ANSI -- the
library is probably the right one, and there's a high probability
of a prototype conflict if we _do_ pass it. (spawn.c)
+ When looking up X defaults, the old code checked the class first,
then the specific program name. This is backwards since if the
class value exists, there is no way to override it with the -name
+ AIX and pyramid think we have non-constant case expressions (eval.c)
+ There is no requirement in ANSI C for SCRTCH_LEFT and SCRTCH_RIGHT
to be expanded before the ##. Some preprocessors do and some don't.
However, the other #define using just #s and string concatenation
seems to work everywhere. (estruct.h)
+ clarified usage of &sin function, which searches its first argument
for an occurrence of the second. (vile.hlp)
+ renamed UCHARAT to UCHAR_AT; added defs for UCHAR USHORT, UINT and
ULONG for easier linting/reading (bind.c, dirstuff.h, estruct.h,
file.c, history.c, ibmpc.c, input.c, isearch.c, line.c, oneliner.c,
proto.h, tbuff.c, vmalloc.c, vmsvt.c, x11.c, z_ibmpc.c)
+ make 'prc2kcod()' return an int again, some optimization of 'token()'
+ clean-compiled/tested X11 + DEBUGM + OPT_MAP_MEMORY with gcc
(basic.c, edef.h, exec.c).
+ disable filename-completion when OPT_MAP_MEMORY is enabled.
+ added mode 'newline', set to true when reading files that have a
trailing newline (the normal vi-convention), modified (file.c,
+ fixed place where ":ww" garbages the screen before reporting
"wrote 0 buffers" (buffer.c).
+ simplified 'writereg()' and 'ffputline()' (fileio.c, file.c) to allow
'newline' mode to control whether a trailing newline is written to
+ modified 'kifile()' so that it does not insert the trailing newline
if it wasn't present in the file.
+ made 'ldelete()' return from one point (line.c) to simplify 'report'
+ added mode 'report', to specify the number of changes before a
message is emitted:
NN lines deleted 6dd
NN more lines u
NN fewer lines u
NN fewer lines :g/^$/d
NN lines yanked "a8yy
NN substitutions on MM lines :%s/x/XX/g
NN substitutions :%s/x/X/
(globals.c, line.c, undo.c, oneliner.c, random.c, region.c)
+ corrected unnecessary screen-update in 'substline()' (oneliner.c)
introduced in confirm-changes.
+ added 'linewrap' mode (basic.c, buffer.c, display.c, windows.c).
+ corrected cursor movement for large repeat counts with 'H' command
+ ifdef'd 'screen_string()' to handle apollo compiler warning when
testing SMALLER configuration.
+ added stubs for modes 'popup-msgs', 'popup-choices'.
Changes for vile 3.55: (released Mon Jul 19, 1993)
+ new routine, mlquickask(), which prompts for and returns a single
key answer from a user. use this when getting a confirm from a
user for a substitute command. (input.c, oneliner.c, proto.h)
+ documented the 'c' for confirm (vile.hlp)
+ the token() routine now expands numeric escape codes, like \nnn and
\xNNN where nnn are octal and NNN are hex digits. this may affect
vilerc files that have \ sequences in them. support for mapping
to key-sequences like 0xNN is gone -- use \xNN instead. this will
make it easier to do multi-char maps in the future.
note that \000 will cause internal problems, since things are null-
terminated, and the sequences "<sp>", "<tab>", and "^C" are all
problematic when multi-char sequences come around.
+ added highlighted confirm to ":s" command. (oneliner.c, display.c)
+ modified 'makebindlist()' (in bind.c) to format using tabs rather
+ many mods to map.c (and bind.c) to eliminate redundancy between it
+ modified 'prc2kcod()' to look for only one prefix, but allow
hexadecimal code in form 0xff.
+ corrected a recursion bug in 'install_map()' (file map.c)
+ modified ":map" (file map.c) to show show mappings if no values are
+ fix strict gcc warnings in x11.c, consolidated some initialization
code and corrected font-ascent value (so 9x15 works properly).
+ added "on" and "off" to literals in 'stol()' (file eval.c) to use
this in x11.c
+ modified 'killbuffer()' in buffer.c to recognize a repeat-count
(e.g., allows ^X-k within the buffer list to remove a succession of
+ fix strict gcc warnings in ansi.c
+ make command-history record properly for bind-key and map commands
(files bind.c and map.c).
+ modified 'engl2fnc()' (in bind.c) to allow unique abbreviation (so
that scripts don't have to be spelled out), added "se" symbol to
cmdtbl for vi-compatibility.
+ modified 'docmd()' (file exec.c) to allow leading ':' in scripts
+ corrected logic in modes.c to (re)allow trailing whitespace on
the end of set-commands.
+ merged files makmktbl.tbc and makvile.tbc into makefile.tbc
+ eliminated 'VIDEO *' arguments from 'updateline()' in file display.c
because the 'row' argument already provides this information.
+ added 'offs2col()' to correct position of highlighting when
Changes for vile 3.54: (released Fri Jul 09, 1993)
+ will now call setvbuf instead of setbuffer if USG defined in the
POSIX version of ttopen. this to support SVR4 (well, solaris)
+ took out the more stringent prototype warnings (-Wstuff) from the
gcc OPTFLAGS, since we don't pass them yet (someday, alistair).
+ mode and variable symbol names generated by mktbls are now of the
form "s_name__" instead of "s_name", to be more unique. (there
was a conflict with a (naturally named) typedef of signed char to
+ upped the max number of screen columns for x11.c. was 150, now is
200. reduced the max rows number from 200 to 100. the screen
buffers should be made re-allocatable, so we wouldn't eat the space
unless necessary. made the normal (tcap.c) maximums match these.
+ applied Tuan Dang's fixes for my merging of his watcom and djgcc
patches. Thanks Tuan! (makefile.wat, ibmpc.c, estruct.h, path.c,
+ turn DOS mode on by default for DOS versions of vile. (main.c,
Changes for vile 3.53: (released Thu Jul 07, 1993)
+ stop core dump on file completion (":e fi<tab>") by making sure
BFSIZES bit is cleared when building MyBuff
+ in rtfrmshell(), there was a "curwp->w_flag = WFHARD" statement,
with a comment asking if it was needed. in fact, it's wrong, so
i took it out. it was tromping other flags, like WFMODE, for that
window only (spawn.c).
+ in update(), don't add nu_width to screencol if the buffer is empty,
since there is no line number in that case. (display.c)
+ fixed bug when undoing the first insertion into an empty buffer.
the value of dot was being restored to the inserted (and now gone)
Changes for vile 3.52:
+ added a couple of tweaks to tom's check-modtime changes -- prompts
are not suppressed if you're writing the buffer out, and running
a shell only checks visible buffers for modtime changes, rather
than all buffers. (mostly file.c, estruct.h, random.c)
+ changed name of "timeout-value" to "timeoutlen", to match some
versions of vi. (modetbl, vile.hlp)
+ applied patches from Tuan DANG (email@example.com) to support
DJGCC v1.09 (display.c, estruct.h fileio.c ibmpc.c main.c mktbls.c
modes.c path.c random.c spawn.c termio.c)
+ consolidated TURBO, WATCOM, MSC, ZTC, and GO32 under a new,
presumptuous #define, called NEWDOSCC. (mostly same files as djgpp
+ fixed calloc macro (estruct.h) in RAMSIZE ifdef
+ added map.c/map.obj source file for VMS (descrip.mms, vms_link.opt)
+ removed bogus dbgwrite in exec.c, where linespec returns a value
for "toline" which can be null.
Changes for vile 3.51:
+ added a couple of tweaks to tom's check-modtime changes -- prompts
are not suppressed if you're writing the buffer out, and running
a shell only checks visible buffers for modtime changes, rather
than all buffers.
+ added regexp metacharacter "index" in margin of vile.hlp.
+ renested some limit setting in scanner(), so I can understand it
+ changed name of ABS macro to ABSM to avoid namespace conflict
on OSF/1. (cmdtbl, exec.c estruct.h)
+ made :map to SPEC key-sequences work (map.c insert.c)
+ undo now preserves current column as well as row (undo.c estruct.h)
+ changed name of "naptime" to "timeout-value" (main.c modetbl
+ added new variable $mode, which is the name of the user-mode we
e're in: "command", "insert", "overwrite". the value is set
when we enter insertmode, and restored when we leave. this lets
macros invoked from within insert mode find out if they should
enter insertmode. (eval.c, modetbl, insert.c, proto.h, vile.hlp)
+ prc2kcod will now accept literal control chars, and also will
accept hex specifications. so now key-sequences can be specified
as follows: (bind.c map.c vile.hlp)
an optional prefix:
^A (one char)
^A- (three chars)
^X (one char)
^X- (three chars)
followed by an optional "function" prefix:
FN- (three chars)
M- (two chars)
(these two are synonymous)
followed by a character:
C (one char)
^C (one char)
^C (two chars)
0xNN (four chars)
0XNN (four chars)
<tab> (five chars)
<sp> (four chars)
+ removed old BEFORE ifdefs (input.c insert.c)
+ better error checking on parsing of key-sequences in exec'ed files.
+ if dobuf() encounters an error, it switches to that buffer. but
until now, this error propagated back through nested dobuf()'s,
and we ended up looking at the 'source "filename"' line in the
outermost buffer. now we only switch on the most deeply nested
dobuf(). also, we no longer set file buffers that we're executing
to view-mode. (exec.c)
+ if we get an error on startup, we skip right to the editing loop,
so the user gets confronted with the error right away. (main.c)
+ gave adjustmode a real return value -- used to always return TRUE.
+ when looping backwards backspacing, check if the input char was
killc or wkillc before checking isbackspace(c), since otherwise
if killc is DEL, we'll treat it as backspace first. (this is
because ^H and DEL are both assumed to be backspacers initially)
+ implemented new universal mode, "naptime", which is the number of
milliseconds to delay before accepting a lone ESC character,
rather than as the start of a function key sequence. also added
boolean arg to catnap(), which controls whether detection of user
input will abort the catnap delay. the default for this mode is
500 milliseconds. the old value was 50, which was fine for fast
local displays, but didn't work well for serial terminals or
rlogin sessions. (which surprises me somewhat -- 9600 baud
translates to roughly 1 character per millisecond -- why is a
delay of 50 ms not enough for the second character of a function
key generated by a terminal?) (proto.h fences.c input.c random.c
modetbl vile.hlp main.c)
+ applied patches for Watcom C/386, from Tuan DANG (firstname.lastname@example.org).
I haven't had a chance to try them yet. ( mktbls.c cmdtbl estruct.h
dirstuff.h ibmpc.c main.c fileio.c random.c termio.c display.c
glob.c npopen.c path.c proto.h spawn.c makefile)
+ renamed turbo makefiles, to be more similar to the watcom makefiles.
+ fixed insert-string to really insert instead of overwrite.
+ added buffer-mode 'check-modtime' to check if the disk-file is newer
than the buffer when reading, writing or popping a window (adapted
from a patch by Randy Winney, modifies (files file.c, fileio.c,
buffer.c, random.c, spawn.c). Note that moving the cursor between
buffers does not perform this check.
+ use macro 'for_each_line()' in some more places (files: buffer.c,
globals.c, random.c, spawn.c, vmalloc.c).
+ use new function 'SetCurrentWindow()' in file window.c.
+ added checking in 'SetVarValue()' (file eval.c) to guard readonly
buffers from modification.
+ added checks in file mode.c to prevent major-mode changes to scratch
buffers (and corrected the settings of WFMODE in file modetbl).
+ tested/augmented RAMSIZE configuration option (files main.c,
display.c), made a mode 'showram' to control it.
+ merged field that shows major-modes in the modeline (e.g.,
"view-only"), and added "cmode" when it is active.
+ added buffer-flag BFSIZES; use it in 'bsizes()' to compute byte/line
counts only when buffer has been changed. Also, added function
'add_line_at()' to merge file-reading logic which initializes the
byte/line counts (files: buffer.c, file.c).
+ if dos-mode is set on a buffer, trim carriage-returns from files that
are inserted into it (file file.c).
+ renamed macros in file buffer.c that test BUFFER.b_flags, added
macros for setting/clearing these flags, moved the macros to
estruct.h to use in files bind.c, buffer.c, file.c, history.c,
modes.c, random.c, spawn.c, tags.c, undo.c.
+ corrected size shown for buffer-list within the buffer-list display
+ use window-colors for modelines rather than global values (file
+ disable ":p" command from within buffer-list display (oneliner.c)
Changes for vile 3.50:
+ finished (yeah, right) the changes for infinite undo. implemented
mode to control how many changes are stored (called "undolimit").
the modified bit (BFCHG) now gets reset if the right number of
undos is done. (estruct.h main.c modetbl undo.c buffer.c vile.hlp)
+ rearranged calls to copy_for/tag_for/toss_to_undo and chg_buff
so that the BFCHG flag is unmodified before the first call to
preundocleanup(). this gives undo the true state of BFCHG.
Changes for vile 3.49:
+ implemented infinite undo, on keys ^X-u (undo) and ^X-r (redo).
probably affected location of cursor after some undo operations --
don't if this will be significant or not -- i doubt we matched
vi before in this regard anyway. (undo.c, cmdtbl, buffer.c, proto.h
+ use an explicit %s when printing lone filename, to protect against
filenames with % in name. (display.c) (eric krohn)
+ don't allow kbd_putc to print to last column of display, since if
the terminal autowraps, this causes a scroll. this should check
the :am: capability, but we're at the wrong layer to do that, and
it doesn't seem worth adding to the TERM struct to make that info
available (unix-pc behavior pointed out by eric krohn).
+ added Otto Lind's initial :map implementation (map.c, main.c,
cmdtbl, makefile, proto.h) This is a good start, but has the
following limitations: 1) no string to string maps. only simple
keysequences are mappable. 2) not integrated with the keyboard
macro routines -- this would make sense, and allow for recursion
to be detected more properly. but the keyboard macros are pretty
tied into the named registers, which are stored in KILLREGS,
which doesn't seem right for the :map'ed things. perhaps we could
dispense with the KILLREGS, and replace them with tbufs. then some
small changes the layering of start/finish_kbm and kbm_started
could allow the :map code to share those routines.
+ added alistair crooks' lint stuff and change for the NeXT. (proto.h,
+ modified file undo.c so that changes to scratch buffers can be
+ modified 'imply_alt()' in file buffer.c so that the top/current line
numbers are propagated into the alternate buffer.
+ changed environment variable 'directory' to 'cwd' so that 'directory'
can be used for vi-compatible directory variable (used to control
where the temp-file is written).
+ implemented environment variable 'directory' (files modetbl, eval.c)
and used it to control temp-file location (npopen.c, tmp.c). This is
set by the environment variable TMP.
+ changed logic that opens/closes temp-file in tmp.c to use 'tempnam()'
to derive the filename; added entrypoint 'tmp_cleanup()' to remove
the temp-file on exit, and 'exit_program()' to file main.c to make a
single exit-point from which to call 'tmp_cleanup()'.
+ Use macro 'ExitProgram()' to hide whether we call 'exit_program()' or
'exit()' (files main.c, display.c, ibmpc.c, spawn.c, vmsvt.c, vt52.c,
termio.c, termcap.c, file.c, window.c, x11.c).
+ modified 'mktbls.c' to generate definitions for 'nemode.h' in a
form that allows modes to be conditionally compiled.
+ added a column to 'modetbl' to ifdef out modes that are not used.
+ made 'crypt', 'fcolor' and 'bcolor' modes ifdef-able (files main.c,
+ simplified 'promptpattern()' and 'expandp()' in file isearch.c
+ corrected USE_D_NAMLEN ifdef in 'expand_pattern()' (file glob.c)
+ corrected behavior when user inserts a newline into an empty buffer
+ moved environment variable definitions from cmdtbl to modetbl to
ensure that name-completion table for modes+vars is updated in one
place. Sorted the environment variable names in modetbl and vile.hlp
+ include "nevars.h" within main.c to allow common name-completion
table (without introducing lots of extra string-pointer variables).
+ modified mktbls.c to put the environment-variable names into the
'all_modes' array in nemode.h (to support common name-completion).
+ modified 'listvars()' in file eval.c to optionally show all modes
and environment variables in one list (if the user supplies a numeric
argument before the "show-variables" command).
+ modified 'gtenv()' in file eval.c to recognize mode-names as well as
environment names, and logic in file modes.c to recognize environment
names. Thus, for example, the commands
":setl dos" and
+ changed use of 'sprintf()' to 'lsprintf()' (files buffer.c, modes.c)
+ use macros 'FreeAndNull()' and 'FreeIfNeeded()' to simplify code
(buffer.c, eval.c, file.c, filec.c, main.c, modes.c,
npopen.c, oneliner.c, search.c, random.c, x11.c)
+ changed case-statements for EV-variables to if-then-else-if in
file eval.c because VAX-C cannot handle constant-expression
OFFSETOF as case-values.
+ added 'tempnam()' to file vms2unix.c (to support testing of
Changes for vile 3.48:
+ added FILEC_PROMPT flag to mlreply_file call in writeregion, to
make ^W file-writing operator work.
+ folded some long lines (opers.c filec.c file.c)
+ corrections to make undo work properly with mapped-memory option
(files buffer.c and tmp.c).
+ use symbol 'null_ptr' to tidy up references to '(LINE *)0'
(files buffer.c fences.c line.c main.c undo.c)
+ changed LINE.l_size to SIZE_T (to make it lintable)
+ corrected "poison" code in 'lfree()' (file line.c)
+ added logic to finderr.c to handle lint output on apollo.
+ added logic to handle line truncation (files buffer.c, file.c,
+ added function 'l_region()' to file tmp.c; use this (with some
reorganization) in files file.c, oneliner.c, region.c, word.c to
track LINEPTR adjustments in REGION structs. (Converted most of the
calling procedures to single-return to clarify this).
+ moved options-logic in 'substreg1()' (file oneliner.c) down to make
this simpler (and avoid unnecessary goto). (This procedure has too
much logic to convert to single-return). Also fixed a place that
should have used 'end_string()'.
+ used macro 'same_ptr()' to compare LINEPTR's directly (a bit more
+ implemented page-swapping logic in file tmp.c
+ modified ifdefs in files bind.c, eval.c, finderr.c to get rid of
compiler warnings when SMALLER, REBIND and APROP ifdefs are turned
+ used 'memcpy()' and 'memset()' in files buffer.c, line.c to simplify
loops copying text into LINE's.
+ modified interfaces of functions that may modify 'LINE *' pointers
(or, equivalently, cause swapping of a LINE to a different address)
to use LINEPTR arguments (for example, 'line_no()' can iterate over
all lines, causing swapping). Also modified functions (especially in
files line.c and undo.c) to use LINEPTR variables where they call
lower-level functions that may page-swapping. Affects files
buffer.c, display.c, exec.c, file.c, filec.c, input.c, line.c,
oneliner.c, random.c, region.c, search.c, vmalloc.c, word.c
+ replaced call on 'lalloc()' in file exec.c with 'addline()' (only
difference is that the latter also sets b_dot).
+ converted several functions in file undo.c to static (to simplify
tinkering with LINE/LINEPTR tradeoffs).
+ modified calls on 'lalloc()' in file undo.c to use special codes for
l_used member directly.
+ added options -Wconversion -Wstrict-prototypes -Wmissing-prototypes
to gcc flags in makefile; addressed these warnings (except for
'signal()' arguments, which cannot be fixed) on sunos. Modified
files bind.c, file.c, filec.c, fileio.c, glob.c, insert.c, line.c,
path.c, random.c, region.c, spawn.c, tcap.c.
+ corrected ifdef in 'string_has_wildcards()' (file glob.c) for VMS.
Changes for vile 3.47:
+ introduced 'l_ref()' and 'l_ptr()' functions, rippled-through changes
to support mapped data (files basic.c buffer.c csrch.c display.c
estruct.h eval.c exec.c fences.c file.c filec.c finderr.c globals.c
history.c insert.c line.c oneliner.c path.c proto.h random.c region.c
search.c spawn.c tags.c tmp.c undo.c window.c word.c)
+ added logic to file tmp.c to allocate LINE structs from a pool of
pages (note that deallocation isn't done, nor is swapping to a
tmp-file as yet).
+ added code to test return-value of 'glob()' in file eval.c
+ corrected 'get_recorded_char()' (file input.c) to reset 'buffer'
variable after 'finish_kbm()' makes it obsolete.
+ provided more useful defaults for TERMCAP, IBMPC and COLOR
definitions in file estruct.h
+ corrected value of MK in 'FreeBuffer()' (file buffer.c), which caused
multiple frees of the same LINE struct.
+ supplied initialization for wp->w_dot.l and wp->w_line.l in
'reframe()' (file display.c) to handle the case when vile is invoked
with no filename parameters.
Changes for vile 3.46:
+ suppress attempts at reading a null file into the [vileinit]
+ don't require the d_namlen field in a DIRENT struct -- some systems
don't have it, and most of those that do null terminate the name
anyway. (dirstuff.h, filec.c, glob.c, path.c)
+ changed compile flags for uts, on user suggestion (makefile)
+ in ffread(), after doing read(), do an fseek to sync up. this
keeps some stdio implementations from not bothering to seek back
to the start in case we have to discard the read and resort to
slowreadf() due to long lines. (fileio.c)
+ avoid realloc(ptr,0) when long lines are encountered in quickreadf()
+ make M and L commands take account of too few lines in window (i.e.
do the right thing when end of file is on screen). (basic.c)
+ even if the global dos-mode is on, empty (new) buffers should come
up as non-dos. (file.c)
+ fnc2engl() now tries to return a longer, meaningful name for a
function (i.e. "exit" rather than "Q"). (bind.c)
+ test-compiled VMALLOC, DEBUGM options on apollo.
+ introduced 'set_lforw()' and 'set_lback()' macros to use in mapped
memory option. Added stubs in new file 'tmp.c'. Modified files
buffer.c exec.c file.c filec.c line.c undo.c, verified mechanically.
+ added definition of LINEPTR and 'lsync()' to files estruct.h, proto.h
+ fixed a memory leak in 'glob()', and changed interface to
'glob_free()' (files filec.c, glob.c, glob.h).
+ revised logic in ibmpc.c that sets screen resolution ($sres) to
make it more table-driven.
+ corrected 'forwline()' in file basic.c (repeated movement down
sometimes reset the cursor to column 1 unlike vi).
+ added prototypes to 'mktbls.c'.
+ modified file main.c so that if the standard input isn't a terminal
then vile reads it into a buffer and reopens /dev/tty (unix only).
+ modified files main.c and epath.h to allow (for unix systems) vile
to find vile.hlp even if vile isn't in the path.
Changes for vile 3.45:
+ got rid of LOOKTAGS mode, and all of its ifdefs (filec.c, main.c,
modetbl, proto.h, tags.c)
+ got rid of NeWS ifdefs (basic.c, bind.c, buffer.c, edef.h,
estruct.h, exec.c, file.c, input.c, isearch.c, main.c, modes.c,
+ resolved vile.hlp modes documentation and modetbl (vile.hlp)
+ added missing mlreply call in goto-named-mark processing, to
allow "goto-named-mark a" to be used in a command file. (basic.c,
+ added man page (don't get excited -- it's short), and turbo makefiles
vile.mak, mktbls.mak. (makefile)
+ fix to ins/inschar/istring to correct for bad backspace limiting
+ fixed off-by-one bug for column count under X. (x11.c)
+ turned off typahead detection for X11. updates were being held
off incorrectly. (termio.c) related change, possibly unnecessary:
reordered initial mlforce() and initial update() in main, because
xvile was not starting up properly.
+ no longer set _bspace bit in _chartypes[backspc], and isbackspace()
macro tests backspc directly. will make rebinding of backspace
simpler. (estruct.h, termio.c)
+ some changes to set-terminal stuff -- took out the keys that can
be rebound with bind-key, i.e. those that have effect only in
command mode. added help. (bind.c, vile.hlp)
+ no longer strip the SPEC bit in ttgetc, so a meta key can be used
to generate "function keys" (termio.c, vile.hlp)
+ updated README
Changes for vile 3.45:
+ more fixes for long/int complaints from TurboC (files tags.c spawn.c
random.c main.c display.c bind.c).
+ added logic to fileio.c so that (MSDOS only) overwriting a file
saves the old version renamed to ".bak" suffix.
+ simplified argument processing in file main.c; reduced size a little.
+ reorganized code that uses tungetc so that it isn't used as often.
This also makes 'tpeekc()' obsolete. Moved extern-defs for 'tungotc'
to edef.h (files input.c, exec.c, globals.c, oneliner.c, termio.c).
+ modified 'setvar()' in eval.c to show warning message if attempt is
made to modify a readonly variable, or if for some other
reason an environment variable cannot be set.
+ modified 'ibmcres()' in ibmpc.c to allow user to reset using value of
CDSENSE as argument.
+ corrected inequality-test in 'newscreensize()' (file display.c) that
prevented user from correctly setting $sres back to VGA in IBMPC
+ renamed entrypoints in file crypt.c to 'ue_setkey()' and 'ue_crypt()'
to avoid confusion with unix crypt(3) (files fileio.c, file.c
crypt.c, main.c, cmdtbl).
+ corrected core dump when using encryption from command line by
splitting out 'ue_makekey()' from 'ue_setkey()'; used this from
'resetkey()' in file.c
+ corrected handling of -k (crypt option); added a global 'cryptkey'
which is used to set the encryption key only in files listed as
command arguments (files edef.h, main.c, buffer.c).
+ overwrite -k parameter value in main.c (for those systems where this
has an effect, it changes the value shown in a "ps" command).
+ made 'quickreadf()' decrypt file.
+ corrected 'resetkey()' so that it doesn't automatically use crypt key
for files that aren't the same as the buffer.
+ The prompt added to 'resetkey()' also required moving some calls on
'ttclean()' (file.c). Simplified some of the ttclean code using
CleanToPipe and CleanAfterPipe macros.
+ corrected 'resetkey()' so that if no password is provided (at least
for pipes), the operation will proceed properly (i.e., read/write
+ modified 'modeline()' in display.c to show if the current buffer is
+ made NAMEC and TESTC define to variables name_cmpl and test_cmpl,
which can be modified at run-time (files estruct.h, edef.h).
+ added commands "set-terminal" and "show-terminal" to set/show special
characters (including NAMEC/TESTC values!). Put this into file
bind.c (reusing pieces of 'bindkey()').
+ make '#' (special prefix-key) rebindable, like cntl_a-prefix.
+ make display-routines in bind.c show the actual characters to which
CTLA and CTLX are bound (function 'kcod2str()'). Note that
'prc2kcod()' still assumes that CTLA and CTLX are bound to control
+ changed argument type of TERM.t_cres to 'char *' to allow consistent
usage of variable 'sres' (files tcap.c, ibmpc.c, z_ibmpc.c).
+ changed values recognized by ibmpc.c for "$sres" to be the names
that it returns (e.g., "VGA") and the number-of-lines (from main.c's
+ finished off 'npopen()' for MSDOS (allows write-pipes) and
implemented 'inout_popen()'; used in file spawn.c for filter-region
Changes for vile 3.44: (pgf)
+ fixed indentation if openup used in cmode, with a single word on
the current line -- indentation was coming from the _next_ line,
+ finderrbuf() now remembers its last argument (finderr.c)
Changes for vile 3.44:
+ corrected file descrip.mms; the vms_link.opt file no longer applies
to mktbls.exe; also fixed 'clobber' rule.
+ corrected file glob.c (don't treat '$' as a wildcard on vms).
+ correction: moved call on 'global_val_init()' before
'expand_wild_args()', to make wildcard globbing work on vms and
ms-dos (file main.c).
+ corrected logic of 'kbd_reply()'; last_eolchar was not being set
properly when NAMEC wasn't space (file input.c).
+ modified 'kbd_engl_stat()' in file bind.c so that if NAMEC is not
bound to space, then name-completion for :-commands is turned on.
+ added option KBD_NULLOK to 'kbd_reply()' and used it in function
'kbd_engl_stat()' to re-allow commands to be empty (files bind.c,
input.c, estruct.h), needed after decoupling NAMEC and space.
+ corrected 'slowreadf()' in file file.c so that dos-mode files are
read properly. (The code stripped CR's even when dos-mode wasn't
+ implemented 'npopen()' and 'npclose()' for MSDOS; used this to make
MSDOS logic for ^X-! the same as on UNIX (modified files fileio.c,
+ modified 'makename()' to yield essentially the same result for
MSDOS as for UNIX (in file.c), because 'npopen()' works similarly.
+ added tests in 'ffropen()' and 'ffwopen()' to prevent accidentally
opening a directory-file.
+ corrected handling of FIOFNF in 'readin()'; made this work on MSDOS
as well as UNIX (files file.c, fileio.c, display.c). The value of
'errno' was not being saved to report in the error message. Added
'mlerror()' to display.c to encapsulate the error reporting better.
+ moved 'errno' declarations into 'estruct.h' (files display.c, file.c,
+ added function 'set_febuff()' to encapsulate the 'febuff' and
'newfebuff' variables; moved these to finderr.c (files file.c,
+ corrected test in 'filename()' (file.c) for ":f" command.
+ corrected test in filec.c for pre-existing file (don't prompt if it
is a pipe-command).
+ corrected tests in filec.c for prompt for re-read (didn't look for
+ test-compiled CRYPT, VMALLOC configuration flags on TurboC. Modified
files crypt.c, estruct.h, vmalloc.c
+ began addressing TurboC warnings for conversion between long/int.
+ deleted obsolete defines in file estruct.h (CLRMSG, CTRLZ).
+ added 'set_rdonly()' to encapsulate the places where an automatically
created buffer is made read-only. This makes them more consistent.
Files: bind.c, exec.c, main.c, oneliner.c, random.c, spawn.c
+ modified 'update()' in file display.c so that '.' commands don't
redisplay if VISMAC is configured (previously, only keyboard macro
redisplay was suppressed).
Changes for vile 3.43:
+ changed NAMEC from SPACE to TAB (estruct.h). changed eolchar arg
passed to kbd_reply in kbd_engl_stat from NAMEC to ' ', to
compensate. added check against command term'ed with ' ' in
+ added check for iswild() when scanning for wildcard chars in glob.c
+ allow nulls as well as newlines to separate filenames in glob-pipe
+ added finderrbuf() routine (command is "error-buffer" or "find-next-
error-buffer-name"), to set the name of the buffer to scan for errors.
(finderr.c, proto.h, cmdtbl, vile.hlp)
+ fixed pathname bug when scanning output that contains Entering/
Leaving pairs. We no longer just keep a pointer to where we
found the directory name, but now malloc space for it.
+ horizontal scrolling moves by half screens by default (window.c,
+ added AIX to machines that need sys/ioctl.h (termio.c, display.c)
+ further fix to repeat counts and the '.' command, so that all cases
( 6dw , 3d2w , etc.) work.
+ support for letting a named register on a '.' command override
what was originally typed: "adw"b. will put one word in register
a and the nex in register b. (input.c line.c exec.c)
+ corrected define in dirstuff.h to make TurboC compile again.
+ corrected logic of 'makename()' in file.c for MS-DOS.
+ added type CMASK to correct use of _chartypes array on MS-DOS
(e.g., in 'screen_string()' in input.c).
+ deleted VMS-DCL file 'vile.com', since this causes conflict on
+ lowercased color names in file modes.c
+ modified ibmpc.c to get true white and yellow colors (had gray and
+ modified files ibmpc.c and display.c to allow MS-DOS version to do
+ removed unused assignments from file insert.c
+ substituted all l_fp references to lforw macro, l_bp references to
lback macro, verified mechanically.
+ make special case in 'dotcmdplay()' to allow (like vi) the repeat
count on '.' command to replace that on the replayed command.
+ modified logic of 'writereg()' to allow its call on 'imply_alt()' to
correctly set the 'copy' parameter (only if a whole file is written).
+ introduced new function 'same_fname()' to correct places where
matches between a filename and the buffer's filename broke (either
because it was not in canonical form, or because VMS version numbers
were not stripped).
+ modified fileio.c to read/write binary files on MS-DOS to avoid
truncating files at ^Z. This does not make ^M visible however.
+ ifdefd out contents of 'dot_replays_macro()' in input.c to avoid
+ corrected logic of 'tungetc()' in file input.c; this had broken
replay of keyboard macro "iX<esc>/Y^MaZ<esc>".
+ split out 'expand_wild_args()' from main.c into a new file glob.c,
which contains globbing code. Moved 'glob()' from path.c to glob.c
+ moved function 'is_directory()' from filec.c to path.c; made it
+ added function 'no_memory()' to encapsulate the more common places
that vile/msdos runs out of memory; use this in several places to
simplify error reporting.
+ added universal-mode "history", to allow turning that function off,
and instrumented history.c to automatically turn logging off if vile
runs out of memory. (It is annoying to get out-of-memory errors on
+ modified display.c to fill in the long space before program & version
identifier for the scratch buffer (on the mode line).
+ added option to 'mlreply_file()' to allow expansion of wildcard to
multiple files. Use this in file.c (for ":e" and ":view" commands).
+ modified files descrip.mms and vms_link.opt because (with new module
glob.c) the link-command line got too long. Other mods to file
descrip.mms to make file vile.com generated (to avoid leaving it
around for ms-dos configuration), and the 'clean' and '.last' rules
(to make them less noisy).
+ corrected 'ffronly()' in fileio.c; on VMS this caused some files to
+ implemented scrolling in file vmsvt.c
+ implemented 'glob' mode to control how wildcards are expanded
(affects files main.c, modes.c, glob.c) and the corresponding piped
commands for glob-mode.
+ added logic to 'makename()' to handle embedded blanks in filenames.
Changes for vile 3.42:
+ added routine tb_stuff() (tbuff.c), which is roughly the
converse of tb_peek(), to allow simple replacement of a character
in a tbuff.
+ used tb_stuff() to increment the buffer number when referencing
the numbered buffers -- i.e. "1p becomes "2p in a '.' command.
+ backed out change to 'get_recorded_char()' (input.c) that caused
dd..."1P... to continue deleting lines after the P operation.
+ added horizontal scrolling mode, to cause whole screen to shift
instead of just one line when cursor goes "off screen". this
mode ("set hs", or "set horizscroll" is now the default. (display.c,
vile.hlp, main.c, modetbl, proto.h)
+ allow cursor to rest in last column, if line is just that long, to
prevent extra horizontal scrolling. (display.c)
+ split up the ins() function, to provide an inschar() function that
istring could use. istring() now called by insstring() and
overwstring(), which are bound to "insert-string" and new
"overwrite-string" commands. all this to allow "insert-string"
to take advantage of autoindent, cmode, wordwrap, etc. will
need tweaks later when tty chars are rebindable (^U, ^W, etc.)
+ compiled with "-Wmissing-prototypes", which turned up a bunch of 'em.
+ some linux gcc cleanup, mostly just including some more headers
(display.c file.c main.c)
+ ifdefed out the onamedcmd() function, and it's binding (cmdtbl,
+ took out the extern declarations of getpwnam and getpwuid that i
put in recently. they seem to be causing more problems than they
were fixing. in general, providing prototypes for system routines
is a real pain. i wish there were an "ifnprototype" construct.
Changes for vile 3.41:
+ ifdef ioctl.h for APOLLO (note: you shouldn't use '"'-form for system
includes, since that could pick up files in the current directory,
and also because it does weird things to the include-path).
+ moved code to support USE_LS_FOR_DIRS from filec.c to path.c, making
it look like unix-style directory routines. Added ifdef for
OLD_STYLE_DIRS just in case...
+ modified 'slowreadf()' in file.c so that piped input scrolls from the
bottom of the window, rather than the middle.
Changes for vile 3.40:
+ the makefile no longer supplies any -I options. this will cause some
machines to not find "ioctl.h" where it's in the sys subdirectory,
but I just spent a day tracking a bug caused by picking up the wrong
system headers (i needed the gcc "fixincludes", and they had moved).
+ now honor LINES and COLUMNS in getscreensize (display.c)
+ now handle searching multiple tags files specified in "set tags"
+ bugfix to fences.c, which fixes indentation when inserting '}'
+ added firstnonwhite() calls to godotplus, so we can publish it as
"whole-lines" (files basic.c, cmdtbl).
+ added 'setjmp()' code to files main.c, input.c to handle ^C with
+ added define USE_LS_FOR_DIRS to files dirstuff.h and filec.c to
accommodate systems w/o a 'readdir()' function.
+ corrected $pagewid (was returning length instead of width) in file
+ use lsprintf to form [Macro nn] names (file exec.c)
+ corrected 'ffwopen()' in fileio.c so that write of current buffer on
VMS works properly (forgot to strip version number).
+ made 'flook()' work properly for vms (file bind.c)
+ moved 'dname' table into file exec.c and 'cname' table into file
modes.c; did this to get rid of 'comma' macro, which does not work as
intended on Turbo-C (the comma got evaluated too soon).
+ to prevent redefinition error in Turbo-C, removed redundant includes
for <stdio.h>, <string.h> and <signal.h> (already in file estruct.h)
from the ".c" files: ansi.c at386.c basic.c bind.c buffer.c crypt.c
dg10.c display.c eval.c exec.c file.c globals.c hp110.c hp150.c
ibmpc.c input.c isearch.c line.c main.c modes.c npopen.c oneliner.c
regexp.c region.c search.c spawn.c st520.c tcap.c termio.c tipc.c
vmsvt.c vt52.c window.c word.c wordmov.c x11.c z309.c z_ibmpc.c
+ moved macro 'P' from file proto.h to estruct.h, adjusted definitions
in file 'estruct.h' to allow use of 'P' macro in CMDFUNC definition.
Added definition of type 'CmdFunc' for the actual pointer-type.
+ use P-macro for TERM struct definitions (and added TTscroll),
modified files estruct.h and display.c
+ corrected logic of 'dot_replays_macro()' in file input.c (for the
special case of macro "@w" followed by "dd" command, I noticed that
'.' replayed both commands).
+ compiled with Turbo-C, turned on warning if function was called w/o a
prototype. Added prototypes (including those for static procedures)
to get rid of these and other compiler warnings. Doing this found an
error in eval.c and one in history.c (files modified: bind.c buffer.c
display.c eval.c exec.c fences.c file.c fileio.c history.c ibmpc.c
input.c insert.c main.c mktbls.c modes.c npopen.c opers.c path.c
random.c regexp.c region.c spawn.c tbuff.c window.c).
+ corrected MSDOS-specific pathname translation in files path.c and
+ corrected d_namlen value supplied in readdir function for VMS (file
+ implemented first version of filename completion for VMS. (Directory
names are not completed; there are still some ambiguities between
scratch buffer names and VMS directory paths).
+ added option KBD_UPPERC to input.c; use this to force prompts for VMS
filenames to uppercase.
+ removed redundant declarations for 'getenv()'; it is already in file
+ added new file 'vmspipe.c' which provides a piped-read facility
+ modified file finderr.c to recognize lint output on SUNOS; also
corrected it to ensure that sscanf doesn't scan past the string
limits (no EOS was formerly on each line).
+ added/used new functions 'pathleaf()' and 'pathcat()' to file path.c
to hide vms/unix pathname differences.
Changes for vile 3.39 (from Tom Dickey):
+ corrected error in 'get_recorded_char()' (file input.c) that caused
command "ix^[j.j.j.j." to not repeat properly.
+ corrected prompt-string in 'ShellPrompt()' (file spawn.c)
+ corrected behavior of filename completion (file filec.c) so that
internal names and shell names can have blanks in them.
+ provided a last-replay value for 'execfile()' in file exec.c (it was
defaulting to the current buffer, which is wrong).
+ corrected pointer test in 'tb_sappend()', which was null in the
special case of a ":w" command before any ":e" or other read.
+ simplified MSDOS-drive translation (untested) in file random.c to
accommodate changes made for VMS in other files.
+ modified 'cd()' procedure in file random.c to chdir to home directory
on systems that have one.
The following are changes to support VMS:
+ added new files (shown in makefile and descrip.mms): dirstuff.h,
+ use new file 'dirstuff.h' for definitions in filec.c and path.c
+ corrected some dependencies in descrip.mms
+ corrected logic in 'imply_alt()' (file buffer.c) that lost the
original filename argument (replaced it with the lengthen-path).
+ corrected logic in 'getfile()2' (file file.c) to account for the
distinction between buffer-names and file-names. Simplified
'getfile()' and 'getfile2()' because of modifications to
'shorten_path()' and 'lengthen_path()'.
+ corrected logic of 'ffread()' (file fileio.c); on VMS a single read
does not necessarily read an entire file.
+ corrected definition of macro 'isready_c()' for VMS.
+ modified 'shorten_path()' (file path.c) to provide the "./" prefix
that was added in files buffer.c and display.c; also absorbed the
test for MSDOS device prefix (e.g., "c:") there. This was needed to
allow VMS port to show native pathnames. The equivalent of "./" on
VMS is "".
+ use VMS function 'fgetname()' and 'getname()' to determine the
fully-resolved path in 3 cases: after writing a file, after reading a
file, and in 'lengthen_path()' (files file.c and path.c). This makes
it know the current version number of each file.
+ modified 'makename()' (file file.c) to account for VMS pathnames.
Note that DecShell names (which the C runtime library accepts as
arguments to fopen, etc.) look much like unix filenames.
+ added new function 'is_internalname()' to file path.c; this serves
the same purpose as the (now obsolete) macro isScratchName. This
makes a better check (to keep VMS paths distinct from scratch buffer
names) than the macro.
+ deleted macro isScratchName from file estruct.h; changed macro
isInternalName to use function 'is_internalname()'. Adjusted other
macros in estruct.h and display.c to make VMS port work properly.
+ added new function 'non_filename()' to file path.c; use this in files
bind.c and random.c to encapsulate the program+version string. Use
'non_filename()' in 'is_internalname()'.
+ corrected logic of 'screen_string()' (file input.c) to handle the
distinction between "[" and "]" used to delimit pathnames on VMS, and
to indicate scratch-buffer names.
+ corrected wildcard, path and scratch-buffer characters for VMS (file
+ corrected/modified file path.c so that the functions therein support
VMS filenames. Added several new functions to do this.
+ corrected code for 'catnap()' (file random.c) for VMS.
+ corrected several 'exit()' arguments (file termio.c)
+ corrected VMS's ttgetc function (its interaction with 'typahead()'
was wrong; also 'typahead()' was not really implemented (file
+ ifdef'd out a redundant 'ttclean()' call (which caused the output on
VMS to be closed more than once, which is really an error).
+ guard 'vtinit()' (file vmsvt.c) against t_mcol or t_mrow too small
Changes for vile 3.38:
+ cleaned up internal naming and help for alt-tabpos mode.
alt-tabpos on implies emacs-style, and it's off by default
+ corrected status-check in 'ffclose()' (in fileio.c) that generated
spurious 'Error on close' message, visible when nothing was read from
a pipe. (Also eliminated redundant defs for 'npopen.c' in fileio.c
+ corrected place in 'globals.c' where (if the buffer was readonly),
the '/' delimiter after an s-command was not eaten.
+ modified loop-limit in "show-registers" command to display the
+ corrected file fences.c, allowing C preprocessor lines to have
leading whitespace before '#'. The cursor may be on any character
from the first column through the '#'.
+ rewrote procedure 'cpp_fence()' in file fences.c, allowing it to
recognize "elif" keyword. Added 'nextchar()' to file basic.c to
+ modified procedure 'ShellPrompt()' in file spawn.c to eliminate the
": " before prompts for ^X-!.
+ corrected 'kbd_reply()' in file input.c to invoke 'tgetc()' directly
when ^V is used to escape a character.
+ corrected 'kbd_kill_response()' in file input.c; ^W is not supposed
to trim blanks before a word.
+ corrected 'update()' in file display.c; the VISMAC define does not
apply to "." command. This fix allows showmatch to work with "."
command. Also, in 'fmatch()' in file fences.c; test return-value of
'update()' to avoid catnap when update fails.
+ corrected 'insert()' and 'insertbol()' in file insert.c; the cursor
was not being advanced after repeated insertions like vi.
+ corrected file input.c so that it can handle a "." command within a
keyboard macro. The macro was "iA^[l2." (for testing).
+ modified file input.c (new procedure 'dot_replays_macro()' so that
the "." command after defining or executing a keyboard macro causes
the macro to be (re)invoked.
+ split 'kcod2prc()' in file bind.c into 2 parts; the new one (i.e.,
'kcod2str()') is used to support 'dot_replays_macro()'. Also use new
+ added new function 'kbm_started()' to file input.c to get rid of then
non-recursive variable 'kbdplayreg'.
+ save/restore "." repeat counts in 'start_kbm()' and 'finish_kbm()' so
that repeat works properly for keyboard macros.
Changes for vile 3.37:
+ works on osf/1 alpha now, with hacks applied to termio.c and
+ added files 'descrip.mms' and 'vms_link.opt'; compiled on VAX/VMS
(but did not make it run) (tom dickey)
+ pathname tracking fixes (calling shorten_path() correctly everywhere)
Changes for vile 3.36 (from Tom Dickey):
+ supplied initial value for dirc-mode
+ guarded 'mlreply_file()' against missing curbp->b_fname (for use in
+ corrected logic in 'kbd_reply()' (file input.c) that caused backspace
to be treated as a command-delimiter.
+ corrected logic in 'kbd_reply()' (file input.c) that caused '/'
character in complex substitutions to be eaten, e.g.,
broke after the 's'.
+ corrected calls (broke in 3.35) on 'mlreply_file()' from 'insfile()'
and 'operwrite()' (mods to files estruct.h, filec.c, file.c and
opers.c). The ^R and ^W commands always prompt for name, rather than
taking it from the screen.
+ corrected end-of-line logic in 'do_a_mode()' (file modes.c). This
had allowed history scrolling to display keywords that were separated
by blanks; fixed this by testing for both space and "=" characters.
+ added calls to 'hst_glue()' in 'unqname()' and 'getfile2()' to add
blank in command history before the responses these functions solicit
+ added macro 'char2int()' to file estruct.h, use this in fileio.c and
tbuff.c to hide byte-masking.
+ changed data in TBUFF to 'char' (unsigned char does not buy that much
conciseness); absorbed macros 'tb_values()' and 'tb_length()' into
file tbuff.c as functions.
+ corrected logic of 'tb_leaks()' (file tbuff.c); I had only exercised
this at the end of execution.
+ removed unused define for TMPSTOP
+ recoded handling of keyboard macros in file input.c to use TBUFF
structs (so there is no limit on length of keyboard macros).
+ modified 'execkreg()' to remove length-limit on macros there as well
+ modified 'execkreg()' to allow invoking registers 0-9 (file line.c)
+ modified files input.c and line.c so that "." and @-commands can be
invoked from within a keyboard-macro (i.e., ^X-&).
+ modified files insert.c and input.c so that repeated "." command
works properly for i,I,R commands (the cursor must appear at the end
of the insertion).
+ modified so that ^Z (job suspension) works properly on apollo sr10.3
(files termio.c and spawn.c).
+ modified 'ttgetc()' in file termio.c so that (for apollo) it reads in
+ added flag to 'tgetc()', allowing it to suppress the conversion of
intrc to abortc (files basic.c csrch.c eval.c exec.c input.c
insert.c). This change also lets users quote ESC characters.
+ corrected unused args in 'globber()' (file globals.c)
+ corrected special case in use of 'canonpath()' on apollo (user could
type in path beginning with "/", which was not getting "//" portion
of pathname prepended.
+ renamed "vitabpos" mode to "alt-tabpos" mode, avoiding conflict with
+ added "implybuffer" (ib) mode to use in splitting out vi-style
buffer-implication from 'autobuffer' mode (files modetbl and main.c).
+ added "samebangs" (sb) mode to allow the ^X-!! and :!! commands to
be optionally the same.
+ Corrected logic of 'imply_alt()' so that it works with files read, as
well as written (files buffer.c and file.c).
+ split out the pathname functions into file path.c
+ added function 'is_appendname()' to path.c to better encapsulate the
isAppendToName macro's knowlege of the ">>" length (files path.c,
filec.c, fileio.c, random.c). Used this to make functions
'canonpath()', 'lengthen_path()', 'shorten_path()' and
'is_pathname()' work properly with ">>" prefix.
+ added code to 'path.c' to resolve "~" as user's home-directory.
+ corrected code in 'makebufflist()' that caused b_bfname member to
be modified (file buffer.c).
+ moved MSDOS drive-logic from 'ch_fname()' into 'lengthen_path()'
(files random.c and path.c)
+ added procedure 'copy_val()' to modes.c to encapsulate the make-local
and make-global macros. This fixes a case in which memory could be
freed more than once: if the user had done 'setl' commands for two
+ made variables 'doslines' and 'unixlines' local to the procedures
'slowreadf()' 'readin()' in file.c; initialized these so that
successive reads of a set of files will treat the dos/unix line
+ added command "set-dos-mode" to force the current buffer to be
in DOS-mode (trimming CR's).
Changes for vile 3.35 (from Tom Dickey):
+ addressed compiler warnings from gcc 1.36 on apollo sr10.3. (I know
it is old, but it gives useful warnings). This required some minor
adjustments to defines/includes in files estruct.h, proto.h, main.c,
fileio.c, npopen.c, random.c to accommodate order-of-definition
problems in stdio.h and signal.h
+ tested with gcc 1.40 on sunos 4.1.1
+ tested compiling with SMALLER=1; fixes to files eval.c, input.c,
mktbls.c, npopen.c, proto.h, random.c (On my machine, this only cuts
about 10% from the binary).
+ added EOS at mismatch-point in 'fill_partial()' in file bind.c, fixes
bug that caused incorrect display after repeated name completion and
+ guarded 'kbd_complete()' against embedded nulls in its buf-argument,
by testing for nulls before completion logic in file input.c
+ added a flag 'kbd_expand' to make calls on 'kbd_putc()' via
'mlforce()' and related functions show tabs as a space. This
modifies files bind.c, edef.h, display.c to fix a problem I
introduced in 3.32
+ use 'kbd_expand' flag in file input.c to fix non-displaying ^M; other
fixes include quoting and backslash fixes, as well as correction to
+ modified finderr.c to make the embedded tabs as "\t" digraphs, so
they are visible. Added pattern to use with apollo C compiler.
+ corrected logic in 'updpos()' (file display.c) so that vile displays
cursor location just-like-vi for tabs and control characters.
+ made 'wordcount()' code (file word.c) work properly.
+ corrected 'join()' (file word.c) so that blanks are not inserted when
joining after a space, or joining a blank line. Also (like 'vi'), if
there is trailing whitespace on the first line, don't modify it.
+ corrected flags for join-lines in file cmdtbl so that the region-
oriented code can work.
+ made join-lines work with regions (files opers.c, word.c).
+ restored GLOBOK flag for join-lines-til (regions work now).
+ interchanged order of calls on 'toss_to_undo()' and 'lremove()' in
'ldelnewline()', since this was causing incorrect cursor placement
after an undo. (The particular case arose in the rewritten
join-lines, when joining a blank line to a non-blank line).
+ modified 'edithistory()' in file history.c to ifdef out the ESC code
(with new symbol KSH_HISTORY), merge the loops to use 'escaped' flag
to avoid redundant logic, and pick up control chars (e.g., ^N and ^P)
for scrolling. This also modified files input.c and exec.c
+ corrected logic in history.c (from 3.34) that uses the function
'WillExtend()' to modify/macroize !-commands. The code did not
provide for the case in which the user would modify the text after
scrolling to it.
+ corrected call on 'hst_flush()' in file pipecmd.c (it was not called
if the pipe-command failed).
+ revised 'tgetc()' in file input.c to make it use a single return
point (simplifies testing and debugging).
+ corrected file modes.c so that user can abort from a set command.
+ deleted code for unused global 'lineinput' (files bind.c, input.c,
+ renamed ifdef for LAZINESS to (global mode) TAGSLOOK, added an entry
to modetbl for "looktags" to test/update this code. Note that this
is turned off by commenting out the "LookTags" line in modetbl. This
affects also files main.c, file.c modes.c and tags.c
+ added file 'filec.c' to perform filename completion. Moved code that
was ifdef'd LAZINESS there, and recoded so that it stores paths
normally (not reversed!).
+ created function 'mlreply_file()' in filec.c, used this to
consolidate prompting for filenames in file.c (Note that now all
filename prompts can get data from the screen).
+ made most of the calls on 'mlreply_file()' default to the current
filename; this is simpler than the last name given to the command.
+ moved check for writing view-only buffer from 'filewrite()' as new
local function 'writable()', before calls on 'writereg()' This
affects 'filewrite()', 'filesave()', 'imdying()' and 'writeregion()'
+ use 'mlreply_file()' in 'execfile()' (file exec.c)
+ use 'mlreply_file()' in 'operwrite()' (file opers.c)
+ added 'no_such_file()' to file.c; use this in 'execfile()' so that
":source" will report an error if the file is not found.
+ created function 'mkreply_dir()' modeled after 'mlreply_file()' in
filec.c, used this to allow pathname completion in 'cd()' in random.c
+ added mode "dirc" to file modetbl, to support directory name
+ added l_number to LINE struct, b_bytecount to BUFFER struct (file
estruct.h) to use in caches for # of bytes and lines displays.
+ added macro 'for_each_line' to file estruct.h
+ added procedure 'bsizes()' to buffer.c to compute values for l_number
and b_numchars, b_numlines values. Will later get this to cache
results to speed up 'line_no()' and related code.
+ corrected column-splitting in file modes.c (error in 3.34 changes)
which caused dos-mode to not be shown.
+ corrected flag in 'modetbl' for dos-mode: this makes dos-mode show in
+ added new entrypoints to tbuff.c: tb_copy, tb_scopy, tb_bappend
+ merged code in 'spawn1()' and 'pipecmd()' (file spawn.c) so that
!-commands and !!-commands work consistently.
Changes for vile 3.34 (from Tom Dickey):
+ modified mktbls.c to use 3rd column of modetbl (window-flags). Moved
window-flag defines in estruct.h to allow their use in nemode.h
+ in modes.c, moved the code that updates window hints-flags from the
'adjustmode()' to 'adjvalueset()' procedure so that it can use the
new window-flags entry in nemode.h
+ modified mktbls.c (and estruct.h, edef.h) to support global modes.
+ added to modes.c: 'new_regexval()', 'free_regexval()', and
'free_val()'. Use these in main.c and modes.c to simplify
+ added to estruct.h defines to use in testing memory leaks using both
dbmalloc as well as apollo-specific traces.
+ added to main.c ifdef for NO_LEAKS; used this in testing for
permanent memory leaks (freeing data also finds specific types of
allocator corruption). Added test-code for this purpose to:
buffer.c, display.c, line.c, regexp.c, tbuff.c, window.c
+ plugged memory-leak in 'getfile()' in file.c by splitting it after
the temporary-buffer allocation, making tbp a static value, and
deleting the line that set the tbp.b_fname pointer to null.
+ revised the value-checking in 'adjvalset()' (file modes.c) so that
unnecessary changes are ignored.
+ further modified file modes.c so that typing ' ' (except after string
or pattern values) will continue the prompting for further set-modes,
as in noninteractive use.
+ put the TTputc for '\r' back into 'kbd_putc()'; omitted this when
taking code for 'mlmsg()' from display.c
+ added new function 'GetEnv()' to eval.c to guard against
null-return from 'getenv()'.
+ added new command (to file line.c) "show-registers" to show the
contents of kill-buffers and registers.
+ added new module 'history.c'. This implements up/down scrolling in
an invisible buffer "[History]", which logs all :-commands.
+ coded-around apollo sr10.3 optimizer-bug in 'execkreg()':
kbdend = &kp->d_chunk[i];
resulted in kbdend == kp->d_chunk.
+ moved autobuffer and c-suffixes modes to global-table. Deleted 'cwd'
+ modified mktbls.c so that each table will be sorted by name (not by
type&name). Modified modes.c to take advantage of this and display
the modes sorted in columns (more like 'vi'), except for long strings
(which are deferred to the bottom of the display, still).
+ make modes.c show the actual color name in addition to the index.
+ rewrote 'kbd_string()' to interface it with 'edithistory()'. Split
out entrypoint 'kbd_reply()' to support integration of history with
+ redefined 'kcod2key()' in terms of N_chars; added macro 'isspecial()'
+ revised 'kbd_engl_stat()' and 'namedcmd()' to use the 'kbd_reply()'
entrypoint so that user can scroll through history of any portion of
+ modified 'search.c' to log history for '/' and '?' commands.
+ modified x11.c to use memcpy rather than bcopy (for consistency).
+ made x11.c compile properly on apollo sr10.3 (there is a conflict
between prototypes in <string.h> and <strings.h>).
Changes for vile 3.33:
* many: cleanup for gcc-2.3's -Wall warnings
* bind.c: added new function, insertion_cmd(), which returns char
that gives us simple insert mode. used in x11.c and input.c, for
pasting and for insert-mode arrow keys
* estruct.h: don't redefine "const" on linux
* makefile: added aix warnings, changed name of ENV to ENVIR, due
to name conflict with linux make
* random.c: add include of sys/select.h for AIX
* x11.c: added code to support arrow keys and function keys from
Changes for vile 3.32 (from Tom Dickey):
* modified estruct.h, proto.h and display.c to compile vile on HP/Apollo
SR10.2 (CC 6.7). Added new definitions ANSI_PROTOS and ANSI_VARARGS
to simplify this.
* modified 'mktbls.c' to produce nemode.h; use these definitions
to replace buffer/window mode definitions in estruct.h and edef.h
(note that this obsoletes symbol MAX_STRING_W_VALUE, reordered
window int-modes). Further modified 'mktbls.c' to only create
".h" files for the cases where it has data (so that I can split
modetbl off from cmdtbl, avoiding unnecessary recompiles).
* supplied an ifdef (at least for APOLLO!) in termio.c so that ^C
and ^U work properly.
* added buffer-mode 'wrapmargin' to file insert.c (which overrides
wrapwords iff it is set to nonzero).
* added new module 'tbuff.c' to manage dynamic buffers in places
where local static buffers exist now.
* modified 'ins()' in insert.c so that it reallocates 'insbuff',
allowing arbitrarily-large re-inserts.
* modified 'input.c' to dynamically allocate 'tmpcmd' and 'dotcmd'
buffers. This allows arbitrarily-large commands to be repeated
* guard 'lengthen_path()' in file.c against shell/pipe/internal names.
* added variable "$shell" (files cmdtbl and eval.c) to override
environment-variable "SHELL" in pipe-commands.
* made 'show-vars' (file eval.c) show leading '$' or '%' to be
consistent with the way the user must type them.
* suppress 'show-vars' (file eval.c) ERROR values (these correspond to
* corrected error in nextbuffer/swbuffer (file buffer.c) that allowed
vile to crash if "set noautobuffer" was specified in .vilerc
* corrected display in 'show-vars' (file eval.c) of "$kill" (reference
to volatile data).
* made new function 'kbd_complete()' (file bind.c) to allow keyboard
completion in tables other than NTAB.
* modified logic in new function 'kbd_complete()' to show permissible
completions in response to '?'.
* consolidated logic in exec.c, display.c, bind.c, input.c with new
procedures 'kbd_putc()', 'kbd_puts()', 'kbd_erase()', 'kbd_alarm()'
These hide random use of 'ttcol'.
* make 'kbd_engl_stat()' (file bind.c) recognize word-delete character.
* eliminated redundant unget/get (files bind.c, exec.c) in the interface
of 'kbd_engl_stat()'; this caused an infinite loop in the call from
* modified bug-test in 'updpos()' (file display.c); I had a process hang
in that loop for some reason.
* collapsed expand/dobackslashes args of 'kbd_string' (file input.c)
into one mask.
* modified 'mktbls.c' further to produce table 'all_modes', to use
this for name-completion of mode.
* modified 'mktbls.c' to recognize color-types so I could get rid of
upper/lower case kludge in modes.c
* modified 'modes.c' to use color-types. The interactive behavior now
uses 'kbd_string()' to split the input at the '=' mark (if given).
* added option-flag KBD_LOWERC to 'kbd_string()' (file input.c) so that
things that are forced to lowercase will be shown in that way on
* modified 'token()' (file exec.c) to handle the 'eolchar' for
non-interactive calls on 'kbd_string()'.
- modified 'eval.c' to recognize '=' as a separator between
variable-name and value, as in 'modes.c'.
- modified 'eval.c' to perform name-completion for environment
variables (i.e., those beginning with '$').
- modified 'modes.c' to accept vi-style multiple assignments in a ":set"
command (this works non-interactively).
- corrected 'imply_alt()' in buffer.c; ensure that the fname-argument is
non-null. If called via 'filterregion()', it will be null.
Changes in 3.31: (Tom Dickey)
* corrected test in 'find_alt()', which caused the %/# toggle to work
incorrectly in noautobuffer mode.
* updatelistbuffers after 'cd' command
* added 'chg_buff()' & 'unchg_buff()' to encapsulate logic to update
buffer-list after buffers are modified. The function 'lchange()'
is replaced by 'chg_buff()'.
* modified 'histbuffer' to toggle according to 'find_alt()'
* make the filename/buffer/number change for 'killbuffer' apply to
* corrected handling of repeat-count in 'C' command.
* updated vile.hlp
* revised 'mktbls.c':
* filter out redundant ifdef's
* tab-align data items for readability
* modify 'nefunc.h' to use prototypes rather than K&R style
definition, also split the extern-definitions from the
data items for readability.
* make procedures static, linted
* modified so that 'evar.h' definitions are automatically
generated, so that "show-variables" can show a sorted
list of variables. The new filename is "nevars.h".
* corrected window refresh flag for 'U' (lineundo) command.
* added an apollo-specific code in 'imdying()' to generate a walkback
* corrected an error in 'zotwp()': reference to data that had been
* corrected an error in 'onlywind()': it did not delink window-pointer
after freeing it.
* noticed that references to 'dfoutfn' weren't reentrant: I did a
":show-var" from the buffer-list and got only part of the heading.
Reorganized display.c to ensure that it is reentrant by using a
local copy of 'dfoutfn'. Note that I didn't add 'dfoutfn' as an
argument to 'dofmt()' to avoid complications with varargs.
* corrected 'dfputli()': it didn't do hexadecimal.
* corrected 'updateline()': it sometimes failed to highlight the ends
of the mode-line.
* corrected (my last change) to 'vtset()' so that "^J" is shown in
* moved 'writeall()' from main.c to buffer.c; it belonged there, and
I used local macros for simplifying it.
* remove SIGHUP handler before normal call on 'exit()' to avoid
vile-died messages when running it in an xterm.
* corrected VMS definition of exit codes; added def of BAD-macro.
modified main.c, display.c, window.c accordingly.
Changes in 3.30, mostly from Tom Dickey:
This is lots of changes, mostly in buffer.c:
* lint-clean: buffer.c
* linted also: file.c, modes.c (though I left size_t alone for now).
* added "list-vars" & "show-vars" to show the current variables
* modified 'killbuffer' so I could add binding ^X-k to point to
a buffer-name in the buffer-list and kill it.
* also modified 'killbuffer' to recognize filename if buffer-name is
not found, also buffer-number.
* modify buffer.c so that the number shown by '_' and '*' is consistent
* fixed ^X-o and ^X-O so they update buffer-list, as well as some
other places I missed before.
* make some functions static (where they are really private), because
my per-module lint library got too large. (I believe there are
too many externals). In modes.c, this involved reordering, since
my practice is not to have forward-refs on static functions, to
make this work with some awful compilers. This meant that I
deleted lines from 'proto.h'.
* introduced new macro 'isreturn()', used this in correction in
'histbuff()'. I used it in one bug fix & also where I could find
explicit compare for \r, \n.
* added mode 'autobuffer':
* the default is 'autobuffer' (the vile lru buffering)
* curbp no longer is necessarily equal to bheadp
* added members b_created, b_last_used, b_relink to support
the autobuffer/noautobuffer mode.
* if "noautobuffer" is set, ":rewind" and ":n" apply only
to the original command-line files.
* added macros SCRTCH_LEFT, SCRTCH_RIGHT, ScratchName, IsInternalName
to encapsulate use of '[' in names.
* added macros SHPIPE_LEFT, isShellOrPipe to encapsulate use of '!' in
* added function is_pathname to encapsulate tests for pathnames
beginning with '.'. This fixes the display of ".vilerc" from the current
directory as "./.vilerc".
* added new char-types _scrtch and _shpipe to support killbuffer from
screen. Use these types in new macro 'screen_to_bname()' which uses
modification of 'screen_string()'. Used 'screen_to_bname()' to
make ^X-e and ^X-k "correctly" parse the bname, fname columns from
* fixed the error you mentioned in modeline (the position of col-80 mark
taking into account sideways and number modes).
* supplied a missing TTflush in input.c
* modified 'makebufflist()' to show only the flags actually used in the
* modified 'makebufflist()' to show '%' and '#' by the corresponding
* added macros 'for_each_buffer()' and 'for_each_window()' to simplify
code as well as to keep visible references to bheadp & wheadp
confined to buffer.c and window.c respectively.
* added/used macro SIZEOF
Changes in 3.29:
(fixes supplied by tom dickey, eric krohn, and willem kasdorp)
buffer.c: changes for keeping the buffer list more up to date when
fences.c: allow match of fence that is first char. in buffer
file.c: avoid inf. loop when choosing unique name for buffers that have names
containing "x" in the NBUFN-1 position and allow ":e!" with no file
to default to current file
globals.c: implemented 'v' command
isearch.c, line.c, display.c: ifdef of some unused code
main.c: added .C, .i to cmode suffixes, for C++ and cpp output files
makefile, install target: test for presence of vile in destdir before
trying to move it to ovile
oneliner.c: don't allow pregion to be used if the plines buffer is current,
and set the WINDOW list mode, not the BUFFER list mode, so :l works
again, and fix for s/.//g bug
regexp.c: fixes for interaction of BOL and \s etc.
spawn.c: lint cleanup mostly casting strcXX() to void.
tcap.c: hack to supply CS or SR for scrolling region control, missing
from some xterms
termio.c: added missing fflush in two of the ttclean() routines
word.c: fix for counts on 'J' command
The rest of the changes lister here are grouped only roughly, and represent
the delta of version 3.28 from vile version three. -pgf Dec 30 1992
- made ^N, ^P, and ^T do exactly what they do in vi. (next line,
previous-line, and tag-pop) Use ^X-o to switch windows, and ^X-2 to
- ANSI style arrow keys now work from either command or insert mode. Any
ANSI function key of the form ESC [ c can be used as a command
key -- the binding is FN-c
- the '#' key may now be used to force the following character to be treated
as a function key. Thus #1 is now equivalent to FN-1.
- some modes/values have changed names: aindent is now autoindent, swrap is
now wrapscan, exact is now noignorecase, and they all have the vi
shorthands (e.g. tabstop is the same as ts, ic is the same as
- the "paragraphs" and "sections" values are now implemented, but as
regular expressions -- they look pretty ugly, but I think they
do what vi does.
- the sentence motions ')' and '(' now work. they may not do exactly what
vi does, but they're close. they're controlled by regular
expressions that find the ends of sentences -- then they move
forward to the start of the next one. The regular expressions are
set in the new "sentences" value setting.
- "showmatch" mode now works, and momentarily shows the previous matching '('
- "magic" mode, or rather "nomagic" mode, now works more like vi: special
characters are still available by escaping them in nomagic mode.
- there is a new mode, settable as "set terse" and "set noterse", which will
suppress some of the extra messages that vile prints, reducing
traffic for slow terminals.
- the '%' command now scans forward for a fence character if you're not on
one to begin with (thanks to Dave Lemke). I also added '^X-%', which
scans backward instead.
- the ":&" command now works, and repeats the last ":s" or '^X-s'
substitution. it re-uses trailing p and l options, which vi does
- the '&' now works, and repeats the last ":s" or '^X-s' substitution.
- replacement sub-expressions work (\( and \), \1, etc.), as do \U \L \u \l
- there is a new operator, '^A-&', which is similar to '&' but acts on a
region. I expect that if you want it, you'll probably rebind it to
something else (like '&') since typing it is awkward, to say the least.
- ^W and ^U are now both read from the tty settings, and they work in both
insert mode and on the : line. There is a "backspacelimit" setting
that controls whether these (and regular backspacing (^H or DEL)
will backspace past the insert point in insert mode.
- The '@' command can now be used to execute the contents of a named register,
as if it were entered at the keyboard. Thus @k executes register k.
- The "keyboard macro" obtained with ^X-( and ^X-) can be saved into a named
register with the ^X-^ command. This lets you record a keyboard
macro and save it for use with the new '@' command.
- And, along to further complement the '@' command, it is possible to pre-load
the named registers with the "load-register" command. In a .vilerc
you can say:
use-register a load-register ihello^[
(where ^[ is really an ESC entered with ^V-ESC), and then from
within vile you can execute '@a', and the word "hello" will be
- the H, M, and L commands are now absolute motions
- insert mode now takes a repeat count, so '80i=ESC' inserts 80 '=' chars
- two new functions, to make normal motions more vi compliant --
forward-character-to-eol and backward-character-to-bol, which won't
move past the boundaries of the current line.
- you can no longer backspace from the beginning of a line to the end of
the previous. (rebind 'h' and '^h' from "backward-character-to-bol"
- a motion caused by an undo is considered absolute, and the "last dot"
mark is reset.
- added 'vi +/searchstring file.c' invocation syntax
- you can now specify a count to the ~ command.
- backslashes now have a protective effect on the : line -- they guard
against expansion of #, %, :, and \.
- a lone ":f" without filename now gives same info as ^G
- 'x', 's', 'r' will no longer delete a line if used on an empty line.
- after a ":e!" command, the buffer name changes to match the filename, as
if this were a new file read. It used to just suck a new file into
an old buffer, and the names didn't match.
- there is now a "taglength" setting, and the name of the tags file is in
the "tags" setting.
- the "cd" and "pwd" commands now work
- shiftwidth has been implemented, so ^T, ^D, '<', and '>' all do pretty
much what they do in vi
- there is a separate c-shiftwidth, used when in cmode, much as c-tabstop
replaces tabstop when in cmode.
- ": args" is now similar in spirit to the vi command of that name
- reading files in general is _much_ faster, unless the file contains lines
longer than 255 characters, in which case things slow down again.
- regular expressions are more powerful and much, much faster than they
were. vile now uses Henry Spencer's regexp code. This has the
side effect of making '\|' a new metacharacter, for alternation
of expressions. '\+' and '\?' are also new, and stand for "one
or more" and "zero or one" occurrences. they can be used from
the I-search commands as well.
- in addition, \< and \> find beginnings and ends of words, and \w, \s,
and \d find "word" characters, "space" characters, and digits.
\W, \S, and \D find the converse
- related to the above change, replacement metacharacters now work, so you
can use '&' and '\1' through '\9' in the replacement string, and
you'll get the right thing.
- Dave Lemke contributed code to support vile under X windows -- including
support for cutting/pasting, etc. Thanks Dave!
- the '%' command will now find matching #if/#else/#endif sets.
- the '%' command will now find matching C comment sets. Yes, it does
the (non-)nesting correctly.
- tabstops can now be set to any value, and there is a separate value for
tabstops in C mode. (c-tabstop)
- there is now some support for horizontal scrolling, using ^X-^R and ^X-^L
- the ! filter command for running text through an external filter now
- quite a bit of code cleanup, at least I think so -- it has ported pretty
easily to a R6000, linux, 386bsd, Sony NeWS, NeXT, and the UNIXPC.
it's close to lint-free, and Saber has very few problems with the
code. it'll now use prototypes if __STDC__ is defined, and it
passes gcc -Wall -Wshadow with no warnings, if you ignore implicit
declarations of system calls and lib routines. the code should now
be more portable, to various compilers and systems. there are new
targets in the makefile to make building on various platforms
easier. the makefile even supports microsoft C.
- the code now builds and runs under DOS, using (at least) Microsoft C 6.0.
Peter Ruczynski has done a great job porting vile to DOS -- he
calls that version "pcvile". He has used the Zortech compiler in
the past -- I didn't try to break that, but you never know.
NOTE THAT THE DOS CODE IS KNOWN TO BE MUCH BUGGIER THAN THE UNIX CODE!
- quite a few bug fixes, including all (I think) of those reported by users
- the "last dot" mark, accessed with the names ' and ` doesn't get reset
needlessly as often -- that is, if an absolute motion results in no
move (e.g. a failed search or tags operation, or an undo) then the
"last dot" mark is unchanged.
- the "source" ("execfile") command now does globbing on the file being run
-- be sure to put it in quotes, as in :source "$HOME/.vilestuff"
- entab, detab, and line-trim are now all operators (^A-tab, ^A-space, and
- "make install" installs to /usr/local/bin or $HOME/bin, whichever is
- the english names of functions, particularly new ones, have been
"rationalized", hopefully making it easier to remember their names.
- if you invoke a substitute command with ^X-s, it will always act globally
across lines. (i.e. it behaves like "s/s1/s2/g", not like
- a QUIT signal will no longer cause core dump unless built with DEBUG on
- the display optimizes scrolling if possible when the window scroll
commands ^E and ^Y are used.
- values/modes have been reworked. Some are now attached to buffers, some
to windows. By default, all values use the global settings of
those values, and will track changes to the global settings. If a
local setting is specified, it breaks the link between the local
and global value, and the local value will no longer track the
global value. ":set all" is now more informative.
- the "set list" value is now attached to a window, not a buffer, so a
single buffer can be displayed in two windows, "list"ed in one but
not the other.
- reading from other processes into a buffer is now _much_ faster
- it is no longer legal to write out the contents of a buffer that has view
- the format region command (^A-f) now restarts with each fresh paragraph,
so you can format an entire file at once, without collapsing it all
into a single paragraph. It also knows a little bit about C and
shell comments, so you can now reformat blocks of commentary text.
(There can't be any non-commentary stuff in front of the comments.)
- the position of the cursor within a window (the framing) is now preserved
while the window if "off-screen" -- it no longer reframes when made
- there is now a mode indicator on the modeline: I for insert, O for
overwrite, and R for replace-char.
- a line starting with '#' won't shift-right if the buffer is in C mode.
- :s/s1/s2/5 now works, to change the 5th occurrence on a line
- there are new commands to write all buffers: :ww is a synonym for
"write-changed-buffers", and :wwq is now a synonym for
- it is now legal to "kill-buffer" a displayed buffer
- there are new variables, $word, $pathname, and $identifier, which return
the appropriate type of string from the cursor's location
- all of the variables, and the functions and directives of the extension
language have been documented, and most have been tried, if not
- two new functions: &rd and &wr, return whether a file is readable or writable
- a new mode, "tabinsert", has been created to fill the needs of the
"I hate tabs" camp.
- filenames are now put into canonical form -- this keeps "junk", "./junk",
"./somedir/../junk" from appearing as different files to the editor.
- there is a new mode, "tagsrelative", which, when set, causes filenames
looked up via tags to have the directory name of the tags file
prepended to them before being accessed. This allows one to cd into
a build tree from within the editor, to facilitate a grep or a local
build, and have tags lookups continue to work.
- the find-next-error code now honors the "Entering/Leaving directory"
messages that GNU make (and others?) puts out.
- job control now works right
- internally, most pointers into the buffer, consisting of a LINE * and an
int offset are now represented with a MARK structure -- in the
nineties, it's time to start using structure assignment.
- the set of values that are frequently handed about between buffers and
windows, or windows and their "children" are now grouped into
B_TRAITS and W_TRAITS structures, for easier bookkeeping. There
are lots of macros to hide the added data structure depth.
- if you add a new setting that should be inherited by and selectable
on a per-buffer or per-window basis, add it to the W_VALUES or
B_VALUES structs. Otherwise, if its just a global value, like the
X font, make it a variable. I intend to merge the setting of
variables in with the other values one of these days.
- there is now a generic printf facility built in, which is layered under
mlwrite() for the message line, bprintf() to print into a buffer,
and lsprintf() to print into a string
- LINE structures can now have NULL l_text pointers -- empty lines don't
have memory associated with them (except for the LINE struct
- line text is now "block malloc"ed -- now for most files there is are two
mallocs and a single read, no copies. previously there were two
mallocs per line, and two copies (stdio's and ours). This change
implies that LINE structures and their text should not be moved
between buffers -- the space they occupy may have come from the big
chunks attached to the buffer structure, and not from the malloc
pool directly. So lfree() and lalloc() now take a buffer pointer
- there is "line poisoning" code, in line.c, which trashes the contents of
freed lines and LINE structs, to make it easier to find bad usage.
- do_fl_region() is a convenient wrapper for writing operator commands that
work on full lines -- there isn't yet a similar wrapper for partial
- use mlwrite() for informative messages that terse mode will suppress,
mlforce() for messages that _must_ be seen, and mlprompt() for
messages that need a response from the user unless they're in a