home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / os2vile.zip / CHANGES < prev    next >
Text File  |  1993-02-03  |  14KB  |  317 lines

  1. The following changes are grouped only roughly, and represent the delta
  2. of the current release from vile version three.  -pgf   10/22/91
  3.  
  4. ------------------------------------------------------
  5.  
  6. VI COMPLIANCE:
  7. ===============
  8.  
  9. - made ^N, ^P, and ^T do exactly what they do in vi.  (next line,
  10.     previous-line, and tag-pop) Use ^X-o to switch windows, and ^X-2 to
  11.     split them.
  12.  
  13. - ANSI style arrow keys now work from either command or insert mode.  Any
  14.     ANSI function key of the form ESC [ c can be used as a command
  15.     key -- the binding is FN-c
  16.  
  17. - the '#' key may now be used to force the following character to be treated
  18.     as a function key.  Thus #1 is now equivalent to FN-1.
  19.  
  20. - some modes/values have changed names: aindent is now autoindent, swrap is
  21.     now wrapscan, exact is now noignorecase, and they all have the vi
  22.     shorthands (e.g.  tabstop is the same as ts, ic is the same as
  23.     ignorecase).
  24.  
  25. - the "paragraphs" and "sections" values are now implemented, but as
  26.     regular expressions -- they look pretty ugly, but I think they
  27.     do what vi does.
  28.  
  29. - the sentence motions ')' and '(' now work.  they may not do exactly what
  30.     vi does, but they're close.  they're controlled by regular
  31.     expressions that find the ends of sentences -- then they move
  32.     forward to the start of the next one.  The regular expressions are
  33.     set in the new "sentences" value setting.
  34.  
  35. - "showmatch" mode now works, and momentarily shows the previous matching '('
  36.     or '{'.
  37.  
  38. - "magic" mode, or rather "nomagic" mode, now works more like vi:  special
  39.     characters are still available by escaping them in nomagic mode.
  40.  
  41. - there is a new mode, settable as "set terse" and "set noterse", which will
  42.     suppress some of the extra messages that vile prints, reducing
  43.     traffic for slow terminals.
  44.  
  45. - the '%' command now scans forward for a fence character if you're not on
  46.     one to begin with (thanks to Dave Lemke).  I also added '^X-%', which
  47.     scans backward instead.
  48.  
  49. - the ":&" command now works, and repeats the last ":s" or '^X-s'
  50.     substitution.  it re-uses trailing p and l options, which vi does
  51.     not.
  52.  
  53. - the '&' now works, and repeats the last ":s" or '^X-s' substitution.
  54.  
  55. - there is a new operator, '^A-&', which is similar to '&' but acts on a
  56.     region.  I expect that if you want it, you'll probably rebind it to
  57.     something else (like '&') since typing it is awkward, to say the least.
  58.  
  59. - ^W and ^U are now both read from the tty settings, and they work in both
  60.     insert mode and on the : line.  There is a "backspacelimit" setting
  61.     that controls whether these (and regular backspacing (^H or DEL)
  62.     will backspace past the insert point in insert mode.
  63.  
  64. - The '@' command can now be used to execute the contents of a named register,
  65.     as if it were entered at the keyboard.  Thus @k executes register k.
  66.  
  67. - The "keyboard macro" obtained with ^X-( and ^X-) can be saved into a named
  68.     register with the ^X-^ command.  This lets you record a keyboard
  69.     macro and save it for use with the new '@' command.
  70.  
  71. - And, along to further complement the '@' command, it is possible to pre-load
  72.     the named registers with the "load-register" command.  In a .vilerc
  73.     you can say:
  74.         use-register a load-register ihello^[
  75.     (where ^[ is really an ESC entered with ^V-ESC), and then from
  76.     within vile you can execute '@a', and the word "hello" will be
  77.     inserted.
  78.  
  79. - the H, M, and L commands are now absolute motions
  80.  
  81. - insert mode now takes a repeat count, so '80i=ESC' inserts 80 '=' chars
  82.  
  83. - two new functions, to make normal motions more vi compliant --
  84.     forward-character-to-eol and backward-character-to-bol, which won't
  85.     move past the boundaries of the current line.
  86.  
  87. - you can no longer backspace from the beginning of a line to the end of
  88.     the previous.  (rebind 'h' and '^h' from "backward-character-to-bol"
  89.     to "backward-character"
  90.  
  91. - a motion caused by an undo is considered absolute, and the "last dot"
  92.     mark is reset.
  93.  
  94. - added 'vi +/searchstring file.c' invocation syntax
  95.  
  96. - you can now specify a count to the ~ command.
  97.  
  98. - backslashes now have a protective effect on the : line -- they guard
  99.     against expansion of #, %, :, and \.
  100.  
  101. - a lone ":f" without filename now gives same info as ^G
  102.  
  103. - 'x', 's', 'r' will no longer delete a line if used on an empty line.
  104.  
  105. - after a ":e!" command, the buffer name changes to match the filename, as
  106.     if this were a new file read.  It used to just suck a new file into
  107.     an old buffer, and the names didn't match.
  108.  
  109. - there is now a "taglength" setting, and the name of the tags file is in
  110.     the "tags" setting.
  111.  
  112. - the "cd" and "pwd" commands now work
  113.  
  114. - shiftwidth has been implemented, so ^T, ^D, '<', and '>' all do pretty
  115.     much what they do in vi
  116.  
  117. - there is a separate c-shiftwidth, used when in cmode, much as c-tabstop
  118.     replaces tabstop when in cmode.
  119.  
  120. - ": args" is now similar in spirit to the vi command of that name
  121.  
  122.  
  123. MISCELLANEOUS
  124. ===============
  125.  
  126. - reading files in general is _much_ faster, unless the file contains lines
  127.     longer than 255 characters, in which case things slow down again.
  128.  
  129. - regular expressions are more powerful and much, much faster than they
  130.     were.  vile now uses Henry Spencer's regexp code.  This has the
  131.     side effect of making '\|' a new metacharacter, for alternation
  132.     of expressions.  '\+' and '\?' are also new, and stand for "one
  133.     or more" and "zero or one" occurrences.  they can be used from
  134.     the I-search commands as well.
  135.  
  136. - in addition, \< and \> find beginnings and ends of words, and \w, \s,
  137.     and \d find "word" characters, "space" characters, and digits.
  138.     \W, \S, and \D find the converse
  139.  
  140. - related to the above change, replacement metacharacters now work, so you
  141.     can use '&' and '\1' through '\9' in the replacement string, and
  142.     you'll get the right thing.
  143.  
  144. - Dave Lemke contributed code to support vile under X windows -- including
  145.     support for cutting/pasting, etc.  Thanks Dave!
  146.  
  147. - the '%' command will now find matching #if/#else/#endif sets.
  148.  
  149. - the '%' command will now find matching C comment sets.  Yes, it does
  150.     the (non-)nesting correctly.
  151.  
  152. - tabstops can now be set to any value, and there is a separate value for
  153.     tabstops in C mode.  (c-tabstop)
  154.  
  155. - there is now minimal support for horizontal scrolling -- the code for
  156.     keeping the cursor on lines that are too short to be visible at all
  157.     is still broken.
  158.  
  159. - the ! filter command for running text through an external filter now
  160.     works
  161.  
  162. - quite a bit of code cleanup, at least I think so -- it has ported pretty
  163.     easily to a R6000, linux, 386bsd, Sony NeWS, NeXT, and the UNIXPC. 
  164.     it's close to lint-free, and Saber has very few problems with the
  165.     code.  it'll now use prototypes if __STDC__ is defined, and it
  166.     passes gcc -Wall -Wshadow with no warnings, if you ignore implicit
  167.     declarations of system calls and lib routines.  the code should now
  168.     be more portable, to various compilers and systems.  there are new
  169.     targets in the makefile to make building on various platforms
  170.     easier.  the makefile even supports microsoft C.
  171.  
  172. - the code now builds and runs under DOS, using (at least) Microsoft C 6.0. 
  173.     Peter Ruczynski has done a great job porting vile to DOS -- he
  174.     calls that version "pcvile".  He has used the Zortech compiler in
  175.     the past -- I didn't try to break that, but you never know.
  176.     NOTE THAT THE DOS CODE IS KNOWN TO BE MUCH BUGGIER THAN THE UNIX CODE!
  177.  
  178. - quite a few bug fixes, including all (I think) of those reported by users
  179.  
  180. - the "last dot" mark, accessed with the names ' and ` doesn't get reset
  181.     needlessly as often -- that is, if an absolute motion results in no
  182.     move (e.g.  a failed search or tags operation, or an undo) then the
  183.     "last dot" mark is unchanged.
  184.  
  185. - the "source" ("execfile") command now does globbing on the file being run
  186.     -- be sure to put it in quotes, as in :source "$HOME/.vilestuff"
  187.  
  188. - entab, detab, and line-trim are now all operators (^A-tab, ^A-space, and
  189.     ^A-t)
  190.  
  191. - "make install" installs to /usr/local/bin or $HOME/bin, whichever is
  192.     writable
  193.  
  194. - the english names of functions, particularly new ones, have been
  195.     "rationalized", hopefully making it easier to remember their names.
  196.  
  197. - if you invoke a substitute command with ^X-s, it will always act globally
  198.     across lines.  (i.e.  it behaves like "s/s1/s2/g", not like
  199.     "s/s1/s2/")
  200.  
  201. - a QUIT signal will no longer cause core dump unless built with DEBUG on
  202.  
  203. - the display optimizes scrolling if possible when the window scroll
  204.     commands ^E and ^Y are used.
  205.  
  206. - values/modes have been reworked.  Some are now attached to buffers, some
  207.     to windows.  By default, all values use the global settings of
  208.     those values, and will track changes to the global settings.  If a
  209.     local setting is specified, it breaks the link between the local
  210.     and global value, and the local value will no longer track the
  211.     global value.  ":set all" is now more informative.
  212.  
  213. - the "set list" value is now attached to a window, not a buffer, so a
  214.     single buffer can be displayed in two windows, "list"ed in one but
  215.     not the other.
  216.  
  217. - reading from other processes into a buffer is now _much_ faster
  218.  
  219. - it is no longer legal to write out the contents of a buffer that has view
  220.     mode set.
  221.  
  222. - the format region command (^A-f) now restarts with each fresh paragraph,
  223.     so you can format an entire file at once, without collapsing it all
  224.     into a single paragraph.  It also knows a little bit about C and
  225.     shell comments, so you can now reformat blocks of commentary text.
  226.     (There can't be any non-commentary stuff in front of the comments.)
  227.  
  228. - the position of the cursor within a window (the framing) is now preserved
  229.     while the window if "off-screen" -- it no longer reframes when made
  230.     visible again.
  231.  
  232. - there is now a mode indicator on the modeline: I for insert, O for
  233.     overwrite, and R for replace-char.
  234.  
  235. - a line starting with '#' won't shift-right if the buffer is in C mode.
  236.  
  237. - :s/s1/s2/5 now works, to change the 5th occurrence on a line
  238.  
  239. - there are new commands to write all buffers: :ww is a synonym for
  240.     "write-changed-buffers", and :wwq is now a synonym for
  241.     "write-changed-buffers-and-quit"
  242.  
  243. - it is now legal to "kill-buffer" a displayed buffer
  244.  
  245. - there are new variables, $word, $pathname, and $identifier, which return
  246.     the appropriate type of string from the cursor's location
  247.  
  248. - all of the variables, and the functions and directives of the extension
  249.     language have been documented, and most have been tried, if not
  250.     tested
  251.  
  252. - two new functions: &rd and &wr, return whether a file is readable or writable
  253.  
  254. - a new mode, "tabinsert", has been created to fill the needs of the 
  255.     "I hate tabs" camp.
  256.  
  257. - filenames are now put into canonical form -- this keeps "junk", "./junk",
  258.     "./somedir/../junk" from appearing as different files to the editor.
  259.  
  260. - there is a new mode, "tagsrelative", which, when set, causes filenames
  261.     looked up via tags to have the directory name of the tags file
  262.     prepended to them before being accessed.  This allows one to cd into
  263.     a build tree from within the editor, to facilitate a grep or a local
  264.     build, and have tags lookups continue to work.
  265.  
  266. - the find-next-error code now honors the "Entering/Leaving directory"
  267.     messages that GNU make (and others?) puts out.
  268.  
  269. - job control now works right
  270.  
  271. IMPLEMENTORS NOTES:
  272. ===================
  273.  
  274. - internally, most pointers into the buffer, consisting of a LINE * and an
  275.     int offset are now represented with a MARK structure -- in the
  276.     nineties, it's time to start using structure assignment.
  277.  
  278. - the set of values that are frequently handed about between buffers and
  279.     windows, or windows and their "children" are now grouped into
  280.     B_TRAITS and W_TRAITS structures, for easier bookkeeping.  There
  281.     are lots of macros to hide the added data structure depth.
  282.  
  283. - if you add a new setting that should be inherited by and selectable
  284.     on a per-buffer or per-window basis, add it to the W_VALUES or
  285.     B_VALUES structs.  Otherwise, if its just a global value, like the
  286.     X font, make it a variable.  I intend to merge the setting of
  287.     variables in with the other values one of these days.
  288.  
  289. - there is now a generic printf facility built in, which is layered under
  290.     mlwrite() for the message line, bprintf() to print into a buffer,
  291.     and lsprintf() to print into a string
  292.  
  293. - LINE structures can now have NULL l_text pointers -- empty lines don't
  294.     have memory associated with them (except for the LINE struct
  295.     itself)
  296.  
  297. - line text is now "block malloc"ed -- now for most files there is are two
  298.     mallocs and a single read, no copies.  previously there were two
  299.     mallocs per line, and two copies (stdio's and ours).  This change
  300.     implies that LINE structures and their text should not be moved
  301.     between buffers -- the space they occupy may have come from the big
  302.     chunks attached to the buffer structure, and not from the malloc
  303.     pool directly.  So lfree() and lalloc() now take a buffer pointer
  304.     argument.
  305.  
  306. - there is "line poisoning" code, in line.c, which trashes the contents of
  307.     freed lines and LINE structs, to make it easier to find bad usage.
  308.  
  309. - do_fl_region() is a convenient wrapper for writing operator commands that
  310.     work on full lines -- there isn't yet a similar wrapper for partial
  311.     line operators.
  312.  
  313. - use mlwrite() for informative messages that terse mode will suppress,
  314.     mlforce() for messages that _must_ be seen, and mlprompt() for
  315.     messages that need a response from the user unless they're in a
  316.     command file.
  317.