hello -- I've just put vile 9.6 up for ftp at: http://invisible-island.net/vile/ ftp://invisible-island.net/vile/vile-9.6.tgz and it is mirrored at ftp://ftp.phred.org./pub/vile/vile-9.6.tgz PC binaries are also available for DOS and WinNT. Vile is a text editor which is extremely compatible with vi. It has extended capabilities in many areas, including: multi-file editing and viewing, mouse support, infinite undo, additional operators, rectangular operations. Vile has an optional Perl interface for UNIX and NT. It can also be built as "xvile", which is fully X-aware, or "winvile" for Win32, with scrollbars, menus, etc. It runs under VMS, BeOS, QNX, OS/2, DOS, Win95 or NT. Binaries for some PC operating systems are available. (OS/2 is currently native or EMX console mode port, NT is both console and GUI). ------------------------------------------------------------------------------- Highlights since 9.6: + Bug fixes, lots. See the CHANGES file for details. General changes =============== + implement basic support for Unicode (see Locale Improvements). + implement vi-style modeline, limited to setting buffer- and window- modes, or majormodes. + implement patterns as line-specifiers in ex-mode. + revised command-line option parsing to use scripting more effectively: + multiple startup files are allowed. + most command-line options are translated to their equivalent script and executed, rather than saving state for the most recent of each option. This makes the -s, -S, -g, -G options obsolete (but still accepted). + add "-c" option (the POSIX form of "+"). + disallow source'ing from the current directory if the source'd file might be writable by other users. + make mouse work for curses driver just like the termcap/terminfo driver. + improve majormodes for complex fences by initializing the (non-string) buffer mode values for submode groups according to the values in the submode. This makes ignorecase work as expected in the complex fence matching for vbmode. + improve name-completion by saving/restoring the original window and buffer when [Completions] closes, rather than the closest window. + add named marks for decimal digits . + modify ":describe-bindings" to show whether the command accepts a range, and whether it is undoable. + correct comparisons used for handling bounds in regular expressions, e.g., the "2" in "\(this\|[l-m]\)\{2\}". + change behavior of regular expression OR'd alternatives - only the first match was used rather than the longest one. + modify "filename" shown in :show-filtermsgs to use the buffer name if no filename is available. Locale Improvements =================== + several changes to provide usable Unicode support: + add mode percent-utf8 to set a threshold for file-encoding mode "auto" detection of UTF-16/UTF-32 files. + file-encoding mode can be set to "auto", to detect UTF-16 files, which are loaded as UTF-8. + UTF-8 files are detected based on the file-encoding mode as well. + Unicode values are displayed (where no locale controls) as "\uXXXX" in 4 hexadecimal digits. + add unicode-as-hex mode to override locale, forcing Unicode values to display as "\uXXXX". + for buffers with UTF-8 encoding, show illegal bytes as "\?XX". + Unicode values can be inserted into buffers using ^VuXXXX form. + modify manfilt.c to provide UTF-8 output in a UTF-8 locale. Limitations: + terminal drivers support Unicode display in varying degrees: + winvile - multicolumn characters, depends on font selection + termcap/terminfo - relies on terminal emulator, knows about multicolumn characters + xvile - displays only single-column characters + curses - depends on the curses library, e.g., ncursesw + win32 console - not yet implemented + combining characters are not combined. + registers hold byte data, will show the UTF-8 encoding for data rather than a \uXXXX (unless the file-encoding for [Registers] is changed). + some "characters" such as the report for yanked text is still really a byte-count. + inserting a \uXXXX into the minibuffer will display the UTF-8 encoding. + regular expressions are not wide-character aware. + UTF-16 and UTF-32 files are detected based on BOM and/or the contents of the first line of the file. + external syntax filters do not handle BOM or UTF-16, UTF-32. + add character classes [:ident:], [:octal:] and [:path:], and change the association of \w and \W to [:ident:], making [:alnum:] no longer include "_". + modify regexp.c so tab is not matched by \p or [[:print:]] for consistency with POSIX regular expressions. New Commands ============ + add rename-other-buffer command, use that to modify spell.rc so it can work with scratch buffers which otherwise would be lost, e.g., "[Help]". + add "describe-&functions" and "describe-$variables" commands. + add ":goto-percent" command. + add (nvi/vim) ex-commands: a!, c!, i! + add ":c" as alias for ":change-til" (nvi/vim). New Modes ========= + UTF-8 is supported via new modes "byteorder-mark" and "file-encoding" + add mode xterm-fkeys, to allow termcap driver to generate shift/control/alt modifiers for function keys. + add "rectangle-insert-mode". + add "showvariables" mode, for testing expressions used in [Variables]. + add "echo-to-clipboard" mode for Win32 hosts: all text selected with the mouse is automatically copied to the Windows clipboard. + add "bufname-expr", "identifier-expr" and "pathname-expr" buffer modes to provide regular expression parsing of $bufname, $identifier and $pathname in the show-variables command as well as for the related expansion of tokens from the cursor position. If the expressions are empty, the code falls through to use the corresponding older character-class parsing. Default values are provided for each *-expr mode. + add cursor-tokens mode to control whether vile uses regular expressions, character classes or a combination to obtain tokens from the screen. New Variables and Functions =========================== + add new symbols "$return" and "$_" which can be used to implement simple functions . + add "%n" and "%N" substitutions for $title-format + change "%n" in modeline substitutions to use file name (pathleaf) rather than relative path (shorten_path). Use "%r" for the latter. + add ">motion" function for scripts. + add $buf-fname-expr to show the combined bufname-expr, pathname-expr used to interpret ^X-e. + improve handling of enumerated values by forcing all to lowercase, e.g., to eliminate the need for the special case in 9.1x to handle "TRUE" and "true". + update title when doing a "cd", in case it uses %r substitution. Syntax Filters ============== + modify syntax filters to use flex's character classes. + add configure check for lex's which support character classes, and add filters/noclass.sh to work around those which do not. + several new majormodes, with corresponding syntax filters: + add confmode for "ordinary" config-files. + add csmode (for C# ".cs" files). + add csvmode for ".csv" files. + add delphi mode + add docbookmode + add lua mode + add mcrlmode for mCRL/mCRL2 modeling language. + add midlmode, for Microsoft IDL. + add rtfmode for RTF files. + add wbtmode for WinBatch. + add xpmmode + add majormodes for bnf, css, php + extend suffixes for several majormodes: + add ".ebuild" suffix for shmode. + modify preamble for xml- and html-modes to ensure that the first tag determines the type. + add output from rcshist to diffmode. + add ".vbp" files to inimode. + add ".reg" files to inimode. + add ".ddl" suffix to sqlmode. + add ".dsr" suffix to vbmode. + add several package-related suffixes to sqlmode. Other improvements to majormodes: + modify majormode inferencing to check preamble for [Standard Input] and [Output] buffers. + modify preamble patterns for shell modes such as awk, etc., to allow for programs without an absolute pathname, e.g., "#! awk". + improved cppmode's identifier-expr. + updated python keywords + improve bas-filt.l by not highlighting incidental matches in the attribute section of a Visual Basic form-file. + add section definitions to vbmode. + add complex fences to vbmode. + improve vl-filt.l based on Verilog LRM draft + fill in complete list of event names for xres.key from Xt/TMParse.c + fix sh-filt.l for parameter substitutions containing an escaped quote, e.g., VERSION=${VERSION#*VERSION \"} VERSION=${VERSION%\"*} + change htmlfilt.l to highlight character- and URI-references as numbers to make them distinct from strings with ordinary text. + add "+", ",", "&", "@" and ";" to URL patterns in filters. + fixes for termcap syntax highlighter, i.e., tcmode: + allow description field to be empty + color the "|" between aliases. + improve string- and escape-parsing + fixes for terminfo syntax highlighter, i.e., timode: + allow description field to be empty + color the "|" between aliases. + allow aliases to contain blanks. + add check in m4-filt.c for unbalanced quote, show the affected area as an error. + several improvements and fixes to lex-filt.l (a rewrite which makes it very complete, however it now requires flex). + minor fixes to make most of the lex filters build with "old" lex, + make autocolor work for curses-driver, e.g., --with-screen=ncurses + improve vilefilt.l, highlighting mode names and displaying error for unknown mode, function and state variables. + modify spellflt.l to chop words according to Camel-case, so tokens such as "ChopWords" are treated by the spell checker as multiple words. + modify spell- and txt-filters to allow users to add words to their respective ".keywords" files to override the builtin highlighting. + make ShowFormatted macro more configurable by allowing environment variables $VILE_NROFF_FILT and $VILE_TABLE_FILT to override the choice of programs therein. X11 changes =========== + add -class option to xvile. + make cursor-adjustment after paste in xvile dependent on whether the pasted text ended with a newline. Win32 changes ============= + change winvile's registry subkey for recent-folders and recent-files to match environment variable settings from 9.4r, e.g., change "Software\winvile\MRUFiles" to "Software\VI Like Emacs\MRUFiles" + modify winvile's command-line parsing, adding "-i" option to perform the case used for "Send To": use the part of the command line after options as the filename and change working directory to match. + improve paste-performance in winvile by passing whole-line chunks to the insert-function. + improve repainting in winvile while processing external command. also modify keyboard handling to provide type-ahead while processing external command. + correct order of evaluation from 9.4w when setting record-separator, which was setting "crlf" ending temporarily when computing the buffer size, even when "lf" was intended. That would cause an immediate write from winvile (without change) for a buffer to write too many characters. + add a character-class check to find_b_file() to prevent names such as "" from being canonicalized into "vile.1" on win32 via FindFirstFile(). This fixes a problem where ^X-n would sometimes display the wrong buffer. + add shifted-cursor-key bindings for winvile, like xterm. + add KEY_xxx definitions to OS/2 and Win32 drivers, defining up to KEY_F35 for the former and KEY_F24 for the latter . + add &pquote in manpage.rc, to allow it to format html output when vile-manfilt, etc., reside in directories containing spaces in their name. + correct check of return of ffread() in spellflt.l's workaround for platforms such as win32 which have no usable popen(). That made spelling checks require two ^X-i presses. + modify ntwinio.c to invoke build_recent_file_and_folder_menus() in the WM_INITMENUPOPUP event rather than WM_SYSCOMMAND. This makes winvile initialize the recent-folders and recent-files if one uses a right-click on the title of the window. + modify spell filter so that it can get VILE_SPELL_FILT from the registry on win32. + improved winvile's "flash". + fixes for 64-bit warnings of Visual Studio .NET 2003 + modify wvwrap.exe to work with pathnames containing "$", "&" and "'". + improve winvile.iss (Inno Setup): + use values in patchlev.h to set the package version information. + add context menu and Send To shortcuts + install the keyword files VMS changes =========== + minor build-fixes for VMS: + modify vmsbuild.com to simplify workaround for broken MMS 3.8 + provide dummy variables for xvile to reflect modularization changes with respect to vmsvt.c + move VMS-specific code from termio.c to vmsvt.c Other portability ================= + use va_copy() in dofmt() to work with Linux on powerpc + modify configure script to omit lex-filt.l from build if lex is not really flex, since the tables are too large for the older program. + improve os2vio.c, adding a check to distinguish between fullscreen and VIO to allow using bright background colors in the latter . + modified regexp.c, add headers vl_regex.h, vl_alloc.h and vl_ctype.h to allow it to be easily built outside vile . + add KEY_BackTab to the output of show-key-names + fix kcod2prc() so that a shifted-tab is converted to "Shift+^I" rather than emitting a literal tab in the result. Performance =========== + modify the symbol-table lookup in filters.c to use tsearch() when available. For an 8Mb rtf file this improved performance by about a factor of two (on Linux - Visual C++ has no tsearch). + use new module blist (binary search of lists) to reduce linear searches in the places where btree is not already used. + add configure check for getc_unlocked(), putc_unlocked() and tsearch() to use in performance improvements for syntax filters.