+ Bug fixes, lots. General changes =============== + change default for $XSHELLFLAGS from "-c" to "-e", which matches the documentation for $xshell-flags. + several related changes to regexp.c: - add first cut of logic for bounds - implement POSIX character classes and analogous escapes like \d to make them more vile-like + add "buffer" and "directory" parameter types (macros). + if the user specifies ":w!", and the file is not writable, vile will (try to) temporarily chmod the file for writable access. Note that the view-only mode overrides this behavior, unlike vim. + on win32 and unix hosts, modified capturecmd (aka ^X-!) to support find operations that span directory tree(s). This feature is enabled via a find-cfg mode. + added a section to the help file entitled: Working in a project hierarchy which describes several features that enable quick access to many files spread over a directory hierarchy. Features discussed include: - Directory navigation (the pushd, popd, et. al. commands). - Hierarchical tags - File/Directory traversal (win32/Unix hosts only) + reimplement ":args" command to accept a filename expression. If no filename is given, as before it will show the buffer list, but if a filename is given, it will replace the list of visible buffers with those matching the expression. Use ":args!" to discard changes pending to one or more buffers + add macros/gnugpg.rc, examples of using GNU gpg to encrypt/decrypt a buffer. + extend insert-exec to allow ^A and ^X prefixes to be interpreted in insert mode + modify modeline display to show local recordseparator values (cr, lf, crlf) rather than dos mode, since the latter is redundant in that context. + implemented '< and '> marks, which denote the limits of the selection. + add command-line -D option which turns on macro tracing (~trace on). + cache stat() results for files to improve performance on systems that do not do this automatically. + add checks to ensure vile does not open non-files such as /dev/tty. + improve describe-key so it displays bindings for named procedures and perl commands. + implemented bindings for shift/control/alt modifiers for function keys in xvile and winvile. This does not support remapping. + implement directory buffers, i.e., a sorted list of filenames which is loaded when user attempts to read a directory. + update the [Marks] buffer dynamically, e.g., when a buffer changes size, or a mark is moved. + improve error handling in macros : + consistently return a special "ERROR" token on error condition. + return the "ERROR" token from builtin functions whose parameters are "ERROR" tokens, except for special cases such as the &error function. + add error-checking for divide-by-zero in ÷, and &modulo. + check for ABORT return in prompts for missing macro parameters, to cancel execution of the corresponding macro. + extend support for key bindings: + duplicate the default special-key bindings at initialization so they can be customized independently. For example, this lets one define in vileinit.rc a different home/end key binding for command-mode than for the default. + use different buffer names for describe-xxx-bindings commands, i.e., [Command-Bindings], [Insert-Bindings] and [Select-Bindings], to make it simpler to distinguish them. + allow users to set strings and patterns to an empty value with 'unset'. + modify history mechanism to store quoted tokens in [History] so that the tokens retrieved for editing command history will restore embedded blanks. + modify macro parameter handling to force interactive input of parameters which have not been specified in the command. This allows a user to write a macro which can be bound to a function key and still prompt for parameter values. New Commands ============ + add command dirs-clear, which clears dirstack and kills dirstack buffer. + add command dirs-add, which adds a directory to dirstack[top -1]; cwd remains unchanged. This command permits initialization of dirstack via a macro and/or startup file. + added select-all and selection-clear commands. The former command selects, highlights, and yanks all text in the current buffer to the unnamed register. The latter command removes a selection's highlighted attributes. Select-all is only available on hosts where vile provides integrated mouse support. + add commands leading-detab-til and leading-entab-til, binding those to ^X-' ' and ^X-^I. Most of the logic was available internally. + add commands for manipulating menus: hide-menus, show-menus, load-menus and remove-menus. + add setenv (set-environment-variable) command. + add a show-key-names command to show the #-style coding for function- and cursor-keys. + add write-all-buffers command, to attempt to write all buffers whether or not modified + implement show-error-expressions command, which shows more complete information about the [Error Expressions] buffer. + add commands "ww!" and "wall!", to respectively write all changed buffers and write all buffers, using the "w!" behavior of ignoring readonly file permissions. New Modes ========= + "showformat" mode, to control when the recordseparator is shown in the status line. Choices are foreign, local, differs, always or never. + support for reading/writing Macintosh files, i.e., recordseparator=cr. New commands set-rs-cr, set-rs-lf, set-rs-crlf extend the set-unix-mode and set-dos-mode commands to include Mac's. + swap-title mode, if set, the causes editor's title to be displayed as " - " instead of the usual " - ". The former is more concise and readable on a task bar. + undo-dos-trim mode, which when true causes vile to make the trimming of ^M's done as part of setting dosmode or set-dos, set-unix commands undoable. Also, trim ^Z character if it is the last line in the buffer. + majormode submode "qualifiers", which can be set to "all" to specify that both suffix and preamble must match. This is used to keep rcmode and vilemode from conflicting. + extended check-modtimes mode to check if the inode changes, which is a better indication of whether the file's contents have changed. + cindent-chars reimplements the special-character logic from cindent mode and is used in other modes such as esqlmode and cppmode. New Variables and Functions =========================== + $menu-file variable. + &stoken function, which searches for a token in a string, e.g., "perl" in $cfgopts by &stoken "perl" "," $cfgopts + &translate function, e.g., &trans "," " " "a,b" to change commas to spaces + three functions for working with timestamps: &ftime, &stime, and &date, respectively for file modification time, system time, and formatted date/time. + &default built-in function, which returns the initial or default value for modes and some state variables. + $prompt variable, to allow changing the command-line prompt. + &qpasswd, which solicits a password string from the keyboard. Each typed character is echoed as '*'. The password is not recallable via vile's usual history mechanism. This feature enhances the security of the gpg macro wrappers (which have been successfully tested on Unix and Windows). + $findpath and $find-cmd state variables. + $majormode-hook, which can override the suffix/preamble rules for choosing a majormode for the current buffer. If the associated script sets the majormode, the other rules are not run. + $with-prefix variable which shows the prefix string in effect from a "~with" or "~elsewith" directive. + $title-format variable which can be used to specify a customized title for xvile or winvile. + variables $error-expr and $error-match, which show the last error expression and the text it matched. + several keywords to $cfgopts to allow macros to know more about vile's configuration, e.g., "noshell" and the various flavors of X libraries. New Syntax Filters ================== + syntax filter for BASIC, and majormode basicmode. + Verlog filter and corresponding majormode vlogmode + syntax filter for ECLiPSe, a dialect of Prolog + lisp syntax highlighter (lispfilt.l) + C preprocessor parsing to xresmode, for files that use xrdb. + syntax filters for Windows ".def" and ".rc" files. Embedded Perl changes ===================== + several changes to shell.pm: - some documentation updates - a new command called "xterm". which starts a shell in one of vile's buffers just as "start-shell" already does, but also starts an xterm through which one may (also) interact with the shell. The shell output (and echoed input) is displayed in both the xterm and a vile buffer. + implement perl/Breadcrumbs.pm + two new perl extensions for vile: 1. man.pm is a Unix manual pages viewer in vile. 2. dict.pm is a dictionary/thesaurus interface (uses the DICT protocol) Drop both the files in the appropriate path ($HOME/.vile/perl for Unix) and add the following lines in your .vilerc perl "use dict" perl "use man" + add perl/Help.pm + add perl/CaptHook.pm, which provides useful wrappers for Vile's "hook" variables. Win32 changes ============= + added "Select All" to winvile's right-mouse-button menu. + add popup-menu mode for winvile + added basic win32 printing for winvile via these two new commands: winprint winpage-setup + added "Print..." and "Page setup..." selections to winvile system menu. + added icursor (insertion cursor) mode for win32 hosts. + add Visual Basic majormode (vbmode). + when popup-menu is inactive, if text is selected, right-click copies to w32clipboard; otherwise right-click pastes from w32clipboard. + improve paste-by-right-mouse-click operation in winvile by NOT setting the insertion point at the position where the mouse happens to be when executing the right-click, but rather pasting at the current DOT (i.e. right-mouse-click never sets DOT). + change paste in winvile to insert at DOT rather than after. Also, when pasting in insert mode, set DOT to the end of the inserted text. + modify ntconio.c so that default fcolor is 7 + filter scrollbar-tracking events to make winvile's scrollbars work for files longer than 65536 lines. + added a static child window that shows winvile row/col geometry as winvile is resized (Win2K/NT/XP only). + winvile's right-mouse-button displays the key bindings of all menu items that are bound to vile commands. + check if winvile's argument list matches an existing filename, and open that if so. This allows one to use SendTo to open files with blanks in their names. + implement bold/italic/underlined fonts in winvile OS/2 changes ============ + add 'mouse' mode for OS/2 (CSet), to disable mouse when not wanted. Modify logic in os2vio.c to sleep briefly in the loop polling the keyboard and mouse, thereby reducing CPU time for that