File: README.html

package info (click to toggle)
elvis 2.1i-3
  • links: PTS
  • area: non-free
  • in suites: hamm
  • size: 4,120 kB
  • ctags: 5,838
  • sloc: ansic: 53,854; sh: 811; makefile: 263
file content (913 lines) | stat: -rw-r--r-- 40,762 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
<HTML><HEAD>
<TITLE>README.html file for elvis 2.1i-beta</TITLE>
<META name="description" content="Quick intro to elvis 2.1g-alpha, with links to source code and binaries">
<META name="keywords" content="vi, elvis, unix, linux, msdos, win32, windows95 windowsNT, nt, editor, source">
</HEAD><BODY>

<STRONG>CONTENTS</STRONG>
<MENU>
<LI><A HREF="#thisfile">1. ABOUT THIS FILE</A>
<LI><A HREF="#new">2. RECENT CHANGES</A>
	<MENU>
	<LI><A HREF="#2.1i">Between 2.1h-beta and 2.1i-beta</A>
	<LI><A HREF="#2.1h">Between 2.1g-beta and 2.1h-beta</A>
	<LI><A HREF="#2.1g">Between 2.1f-alpha and 2.1g-beta</A>
	<LI><A HREF="#2.1f">Between 2.1e-alpha and 2.1f-alpha</A>
	<LI><A HREF="#2.1e">Between 2.1d-alpha and 2.1e-alpha</A>
	<LI><A HREF="#2.1d">Between 2.1c-alpha and 2.1d-alpha</A>
	<LI><A HREF="#2.1c">Between 2.1b-alpha and 2.1c-alpha</A>
	<LI><A HREF="#2.1b">Between 2.1a-alpha and 2.1b-alpha</A>
	<LI><A HREF="#2.1a">Between 2.0 and 2.1a-alpha</A>
	</MENU>
<LI><A HREF="#future">3. FUTURE PLANS</A>
<LI><A HREF="#links">4. LINKS TO RELATED FILES</A>
</MENU>

<hr>
<H1><A NAME="thisfile"></A>1. ABOUT THIS FILE</H1>

This file is written in the HTML markup language.
You can view it with any WWW viewer, such as Netscape.
You can also use elvis 2.1i-beta to view it; this version of elvis
has the ability to view HTML documents, and print them.

<P>This file has many hypertext links.
Use them!
If you're using elvis 2.1i-beta to browse this file, then hypertextual
references will appear as underlined text.
(Except on color PCs;
since color video cards don't support underlining,
hypertextual references will be colored -- white on red, by default.)
To follow the hypertext link, move the cursor onto the underlined
text and press (Enter).
To go back, press (Control-T).
The (Tab) key moves the cursor forward to the next hypertext reference.

<P>If elvis 2.1i-beta doesn't automatically start up in HTML mode when you view this file,
then you'll need to force it into HTML mode by giving the command
"<code>:display html</code>".

<H1><a name="new"></a>2. RECENT CHANGES</H1>

The following is a summary of changes made since the release of elvis 2.0.
For a more detailed (but cryptic) list, see the "BUGS" file included in the
source and binary distribution archives.

<H2><a name="2.1i"></a>Changes between 2.1h-beta and 2.1i-beta</H2>

Well, I broke my own rule this time.  Even though elvis is in beta-test, there
are some significant new features in this update for OS/2 and MS-DOS users.
Other than that, most of the changes are bug fixes, portability enhancements,
or standards conformance tweaks.

<DL>

<DT>OS/2 support
<DD>Elvis can now be compiled on OS/2 as a native program -- you aren't stuck
using the MS-DOS version anymore!  Currently it only runs as a text-mode
program using the "vio" interface, which looks and acts a lot like the
termcap interface for other operating systems.  A graphical version, based
on Presentation Manager, is not yet available.

<DT>More free memory under MS-DOS 
<DD>Elvis now uses Thomas Wagner's "exec 3.3b" functions to swap itself out
to EMS/XMS memory or a temporary file, while it runs any external programs.
Typically, only about 2K bytes remain resident.  This makes a <em>huge</em>
difference -- DOS users can finally run a compiler from within elvis!

<P>Since elvis doesn't have to conserve memory quite so much, most of
the features that had to be disabled in previous versions are now enabled.
Also, the default block size has been increased from 512 bytes to 1024 bytes;
this should make elvis run faster.

<DT>Regular expressions
<DD>In regular expressions, some problems with character classes were fixed.
Character classes are symbols such as <CODE>[:alpha:]</CODE> which appear
inside <CODE>[...]</CODE> metacharacters.

<P>Also, there were problems parsing a / character that appeared as part of
a character list inside <CODE>[...]</CODE> metacharacters.  That's fixed now
too.

<DT>X11 detection
<DD>In addition to checking the value of the TERM environment variable for
a known X terminal emulator, elvis now checks for the existence of WINDOWID.
This will usually allow elvis to automatically select the "x11" user interface
even if you start it from a terminal emulator that isn't known to elvis.
However, when starting elvis from a menu (e.g., from the window manager), you
will still need an explicit "-Gx11" flag.

<DT>Error logging
<DD>When elvis is invoked with "-VVV", it writes debugging information to
stdout and stderr.  However, Windows95 and WindowsNT discard anything written
to stdout or stderr by a graphical program, which made WinElvis configuration
problems hard to diagnose.  So I added a "-o logfile" argument which redirects
that information out to a file.

<DT>Documentation
<DD>Many typos in the online manual have been fixed.
Unclear verbage has been revised.
Errors have been corrected.
Many broken hypertext links have been fixed.
The discussion of character classes in the "Regular expression" chapter has
been expanded.
In the "Ex commands" chapter, the description of file arguments has been
greatly expanded, describing all of the special characters you can use in
file names.
The new OS/2 port is discussed.

<DT>Miscellany
<DD>The convention for extended tags has been revised again; elvis and its
related programs have been tweaked to use the new convention.
If an expression uses $VARIABLE and there is no environment variable with a
case-sensitive matching name, then elvis tries the lowercase equivelent,
$variable.
Some problems with single-line aliases were fixed.
Lots of little bugs have been fixed, some of which could have caused
elvis to crash.
</DL>

<H2><a name="2.1h"></a>Changes between 2.1g-beta and 2.1h-beta</H2>

Elvis is now in beta-test, so no big new features will be added until
after the official 2.1 release.  Consequently, all of the changes between
2.1g-beta and 2.1h-beta are bug fixes and documentation updates.
The following is a list of bugs fixed:

<DL>

<DT>The X11 User Interface
<DD>Elvis was miscalculating the size of the window, so that its requested
window size wasn't equal to the base size plus an integer times the increment
size.  When this happened, some window managers tried to force elvis to resize
the window, at which point elvis would miscalculate the size again, resulting
in a loop.  This loop had no visible effects, but it did burn CPU cycles.
This is now fixed.

<P>In a related problem, if two configure events for different sizes happened
to be in the message queue, then would try to adjust to the first configure
event and and force the window to its miscalculated size before handling the
second queued configure event.  This resulted in an endless loop in which
elvis cycled between two or more different window sizes.  Fixing the
miscalculation described in the previous paragraph reduced the chance that
two configure events could be queued, but it didn't eliminate the chance.
Consequently, elvis will now try to detect multiple configure events and
ignore all but the last.  This should solve the problem.  It also has the
unfortunate side-effect that if you manually resize the window rapidly then
elvis may wait a while before responding.

<p>The XGetInputFocus() function is now assumed to return a void value.
In previous versions of X it returned a success indicator; elvis was testing
that value, but it didn't really need to and the test was interfering with
X on some platforms.

<p>Modifiers on non-US keyboards weren't working correctly.  I took a stab
at fixing this one, but since I don't have a non-US keyboard I can't really
tell if it works.  (What's the German phrase for "Cross your fingers"?)
Anyway, it still works great for US keyboards, so apparently I didn't break
anything.

<DT>The Graphical WIN32 User Interface
<DD>When dropping a file into elvis, the special characters weren't being
quoted.  This prevented elvis from accepting files whose names contained
spaces, etc.  This should be fixed now.

<DT>Compatibility Problems
<DD>In osunix/tcaposix.h, the sigaction() calls don't use sa_restorer anymore
because it is obsolete and not universally supported.

<P>In osunix/osnet.c, the function netread() tried to return -1 to indicate
an error.  It should return False.

<P>Problems remained with terminals that support dim text but not bright text
(the md/me/mh termcap attributes).  Hopefully this is now fixed.

<P>The "configure" script has been patched to support FreeBSD.

<DT>Obscure features
<DD>The [charlist] notation in regular expressions didn't allow ] to be
included in a regexp.  It should be allowed as the first character, or after
an initial ^ character for negating the list, or after a - as the end of a
range.  Now it is!

<P>The backslash changes for aliases seemed to break backslash handling
for commands like...
<pre>	g/foo/a\
  	one\
  	two</pre>
  ... which suddenly started adding an extra blank line.  This is now fixed.

<P>In ex mode if you hit <Enter> at the end of a file, elvis used to say
"bad delta".  Now it gives a better error message, "no more lines".

<P>The "tags" option needs to support a notation for "look in the directory
of the current file".  Elvis now allows you to say "./tags" to denote that.

<P>After a &lt;L command, elvis gave the message "15 lines NULLed".  Now it will
correctly say "15 lines &lt;ed".

<P>Added a dummy "redraw" option.

<P>Improved the entry in "elvis.syn" that describes HTML highlighting.  Now
it includes all tags in HTML 3.2, and most of the parameters as well.

<P>When the "number" option is set, clicking the mouse would set the
preferred column to the wrong value; if you clicked and then hit j/k,
the cursor jumped to a different column.  This is fixed.

<P>A crash was reported in the "tex" display mode.  I suspect this was caused
by overflow when elvis encountered a very long token.  I have now gone through
that code and ensured that elvis always detects token buffer overflow and
handles it gracefully.

<P>The hacked ctags program couldn't quite handle derived classes:
"class&nbsp;foo:&nbsp;public&nbsp;bar&nbsp;{...}" should
generate an entry for "foo" and ignore "bar".
I've managed to fix this particular bug, but others remain.

<DT>Changes to the Manual
<DD>The use of multiple -V flags was never explained.  Now the "Sessions..."
chapter describes it at the top of the "Initialization" section.

<P>Due to memory constraints, the DOS version is missing some features.
Notes have been added to the manual where necessary to warn DOS users when
features about to be discussed are unavailable to them.

<P>The online manual title said "elvis 2.0" -- I changed to "2.1".

<P>I fixed a reference to "14.x" which should actually read "16.x".

<P>The "Tips" chapter of the manual has a new section that discusses
how to make elvis run faster.

<P>I added a paragraph to the manual describing how to embed ']' and '-'
characters in a character list in a regular expression.


</DL>

<H2><a name="2.1g"></a>Changes between 2.1f-alpha and 2.1g-beta</H2>

<DL>

<DT>In the "x11" interface
<DD>The bug which intermittently prevented the scrollbar's "down" button
from being drawn.
Another bug has been fixed which caused the toolbar to be drawn incorrectly
on some systems, notably AIX.
Changed the name of the "scrollbar" option to "xscrollbar", to avoid
a clash with WinElvis's "scrollbar" option.

<P>Added a pushpin to the dialog's icon.
Dialog fields can be declared to be of type "locked".
The labels of the dialog's [Submit] and [Cancel] buttons can be
changed via some new options named "submit" and "cancel"; the default
values of those options are drawn from the "elvis.msg" file.

<p>Added a "-mono" command-line flag.



<DT>Some "win32" fixes...
<DD>UNC names (e.g., "\\machine\directory\file") are parsed correctly.
There was a bug which caused elvis to leave
temp files lying around; This is fixed.

<P>The "windows" user interface is now described in the online manual.
In WinElvis, the names of some options have changed, in order to avoid
clashes with X11 option names (which shared the same names, although
they have different meanings).  Specifically, "normalfont" was changed
to "normalstyle", "boldfont" to "boldstyle", and so on.

<P>WinElvis now supports -Gquit, so you can print elvis' files using
lptype=windows.

<P>The text-mode version now allows you to resize the console buffer by
giving the command ":set ttyrows=... ttycolumns=...".
Text-mode elvis can now read from external programs again (":r !cmd").


<DT>Some tag enhancements...
<DD>In the <code>:ta</code> command, you can now quote special characters
by preceeding them with a backslash.  The tag search code has been extended
to support unsorted tags files, if "!_TAG_FILE_SORTED 0" appears near the
start of the tags file.
There are also new "tagprg" and "tagprgonce" options, for running
an external tag search program.  With suitable wrappers, this allows
you to use CSCOPE or Shigio Yamaguchi's GLOBAL program for tags.

<P>The default behavior of "ctags" has changed.  If you invoke it without
any flags, it assumes it should use the "-s -t -v -h" flags.

<DT>In input mode...
<DD>^L doesn't redraw the screen anymore; that was causing problems
for some people's macros.
Abbreviations weren't expanded before &lt;Return&gt; or &lt;Esc&gt;;
now they are.
Rapid left-arrow in input mode could cause characters to be dropped.
(I had fixed *part* of that last bug before, and this should complete the job.)

<DT>A new :alias command has been added.
<DD>It uses a syntax similar to csh's alias command.
Run "<code>:help :alias</code>" for more info.
Also there are now :while/:do commands, and the { ... } notation for
grouping commands can now be nested.

<DT>Lots of little bug fixes...
<DD>"<code>:w &gt;&gt;foo</code>" wasn't setting the alternate file name correctly.
The "<code>:set</code>" command didn't permit trailing spaces after the last name=value clause.
Macros couldn't be undone in a single step; now they can.
Under MS-DOS, elvis was writing each output character twice, and
mouse selections didn't look right when using ANSI.SYS.
The saveregexp option wasn't saving the replacement text.
Long cursor movements didn't always center the cursor correctly.
Large "<code>:copy</code>" commands didn't work right.
The syntax-coloring mode's keyword table was too small to handle PERL.
The Linux console version didn't save the shell prompt's screen colors.
</DL>

<H2><a name="2.1f"></a>Changes between 2.1e-alpha and 2.1f-alpha</H2>

<DL>

<DT>Changes to filename handling
<DD>Under some circumstances a leading backslash was removed from file names;
this has been fixed.  Also, file name completion (the &lt;Tab&gt; key) has
been modified insert a backslash before special characters, such as spaces,
to "quote" them so they're treated as normal characters.  Win32 menu items
which prompt for a file name will do this too.

<DT>The :mkexrc command is slightly more powerful
<DD>Previously :mkexrc couldn't store window-specific GUI-dependent options.
This was siginificant in WinElvis, because the font is a window-specific
option.  Now :mkexrc will store the values for the current window; those
values will then be the defaults for all windows the next time you start
elvis.  The generic window-specific options and colors already worked this
way.

<P>Also, WinElvis' "Options->Save" menu item will now add a "!" to the :mkexrc
command line, so it can overwrite any existing <code>elvis.rc</code> file.

<dt>Clipboard
<dd>The GUI's cut buffer is now referred to as "^ (doublequote carat)
regardless of whether you're cutting or pasting.  Previously the buffer was
referred to as "&gt; when cutting, or "&lt; when pasting, but that seemed
counterintuitive to a lot of people.

<dt>Comments in "syntax" mode
<dd>Single-line comments are now marked with keywords, rather than simple
one- or two-character strings.  Since one- or two-character strings can be
defined as keywords, this shouldn't cause any problems.  It does, however,
offer a lot of interesting new possibilities.  

<p>You can use actual words to start comments, such as "rem" in DOS batch
files.  You can make comments appear in any font, not just the one defined
by the commentfont option.  You can configure multiple keywords for starting
comments.

<p>Also, the syntax mode now allows you to restrict certain keywords to
a particular column, via an "anchor" line in the description.  For example,
if your elvis.syn file contains the line "<code>anchor 1 BEGIN END</code>" then 
the BEGIN and END words will only be keywords if they appear at the start
of a line.

<dt>The X11 user interface
<dd>The text cursor now defaults to the solid "xor" shape, instead of the
"hollow" shape.  It reverts to the "hollow" shape whenever the window looses
input focus, just like an xterm window.

<p>You can now attach configurable dialog windows to any toolbar button.
The dialogs allow you to edit some options before the toolbar's ex
command is run.

<dt>Text-mode Win32 improvements
<dd>Under Win32, the termcap interface runs much faster, and all of the display
bugs have been fixed (knock on wood).  Also, you can now access Windows'
clipboard via the "^ cut buffer.

<dt>Scripts
<dd>The POSIX "-s" flag (and archaic "-" flag) for running scripts is now
supported.  The flag for setting the "safer" option has been changed to
"-S" (uppercase) to avoid a name clash.

</DL>

<H2><a name="2.1e"></a>Changes between 2.1d-alpha and 2.1e-alpha</H2>

<DL>

<DT>The tag file format has been tweaked.
<DD>The authors of Vim, Elvis, and Exuberant Ctags are working together
to define a new standard for tags files.
A new standard is needed because the old format doesn't work well for C++.
The new tags format is almost identical the extended tags that were introduced
in elvis 2.1b; in fact,
2.1e should still be able to read tags files created for 2.1b through 2.1d.

<DT>The Win32 graphical interface has been improved.
<DD>Most of the changes were bug fixes.  Some of the more visible ones are:
<UL>
<LI>When the mouse pointer is moved into the left margin (the area used
for selecting whole lines) the cursor shape changes.
<LI>Italic characters were always shifted slightly to the left.  This was
done to compensate for the skewing that Win32 uses to simulate italics.
However, if you disabled the skewing by ":set italicfont=n" then elvis
still shifted them needlessly.  Now it won't shift italics if italics
are displayed as normal unskewed characters.
</UL>

<DT>The X11 graphical interface has been improved.
<DD>Many improvements were added in 2.1d-alpha.  Here are some that were
added after that:
<UL>
<LI>Changed the X resources so that toolbar buttons now have separate
foreground and background resources.  Previously, the button face was
drawn in the scrollbar foreground, and th button label was drawn in
the normal text foreground; this foreground-on-foreground combination
used to show as solid black on some workstations.
<LI>The "-client" option should be smart enough now to ignore elvis servers
which are running on a different host, or have a different user ID.
</UL>

<DT>Lots of little GUI-independent bugs have been fixed.
<DD>These are the main reason for 2.1e-alpha!
<UL>
<LI>The handling of backslashes in filenames has changed slightly, so that
fewer MS-DOS file names will cause problems.  Now a backslash is only
seen as a quote when it precedes a dollar sign, parenthesis, or another
backslash.
<LI>The :lpr command now supports appending.  E.g., ":lp &gt;&gt;foo".
<LI>If the last line didn't end with a newline, and you did a Y on the
last line, then elvis used to go into an infinite loop.  Not any more!
<LI>Newly created windows now acquire input focus immediately.  Previously
they didn't acquire input focus until the next keystroke was read; this
prevented macros from creating new files and doing something in them.
<LI>The :s command (with no args) should repeat the previous :s/old/new/
command, just like :&amp;.  It didn't, but now it does.
<LI>Some cut buffer bugs have been fixed.  This also affects cut&amp;paste
between applications.
<LI>The "Hit &lt;Enter&gt; to continue" prompt is disabled during the execution
of a macro.
<LI>Fixed a minor bug in the handing of the scrollbar (for any graphical
interface) which caused the screen to jump slightly as soon as you
started to move the scrollbar's thumb.
<LI>The :close command was dangerous.  It could conceivably close the last
window even if there were unsaved buffers.  This has been fixed.
<LI>The :only command caused core dumps on some systems.
<LI>The markup display modes (html, man, and tex) used to widow punctuation
that occurred near the end of the line.  This shouldn't happen any more.
</UL>

</DL>

<H2><A name="2.1d"></A>Changes between 2.1c-alpha and 2.1d-alpha</H2>

<DL>
<DT>Network I/O has been improved several ways.
<DD>These affect the use of elvis as a Web browser.
<UL>
<LI>FTP protocol is supported, in addition to HTTP
<LI>The FTP protocol can be configured to access selected sites using
your own account, instead of the default anonymous access.
<LI>Elvis can be configured to use HTTP proxies, either to reach past a
firewall or to use protocols which elvis doesn't support directly.
<LI>While a file is being received, elvis displays the total number of
expected, in addition to the number of bytes received so far.
<LI>Directories can be read via FTP.  They are converted into HTML
documents so you can use elvis as a remote file browser.
</UL>

<P>By the way, the combined FTP/HTTP network access adds only about 8k bytes
to the executable.
If you want to reuse the code for your own project, grab url.c, http.c, ftp.c,
os*/osnet.c, and parts of elvis.h, elvisio.h and opsys.h.

<DT>The X11 interface has been slightly improved.
<DD>These are in addition to the 2.1e-alpha changes, listed above.
<UL>
<LI>The "x11" initialization has been split into a separate "elvis.x11"
configuration file.  This was done mostly to keep "elvis.ini" small.
<LI>An optional status bar has been added.  It is enabled by default; to
disable it, give the command "set nostatusbar".
<LI>Toolbar buttons can now be assigned one-line descriptions.  These are
displayed on the statusbar while you hold the toolbar button down.
<LI>A weird bug has been fixed which caused elvis to continually adjust
the size of the window.
</UL>

</DL>

<h2><a name="2.1c"></a>Between 2.1b-alpha and 2.1c-alpha</h2>

<dl>

<dt>The "x11" user interface has been reorganized.
<dd>The "x11" interface began as a quick hack;
I intended to replace it with the REAL "x11" interface fairly quickly.
But I never got around to that, so now I've decided to clean up the hack,
and give it a future.

<p>Most of the changes merely affect the internal organization of the
interface, with the intent of making it easier to add new features
such as a menubar in the future.
However, some of the changes are detectable now:

<ul>
<li>If the toolbar has too many buttons to fit on a single row, then
	the toolbar will wrap onto multiple rows.
<li>The gaps between groups of related buttons will now be expanded,
	so the button groups are spread across the whole width of the 
	toolbar.  Also, a tiny dimple is drawn in each gap.
<li>The toolbar buttons now perform their assigned action when you
	<em>release</em> the mouse button.
	Previously, they acted when you <em>pressed</em>
	the mouse button, but that caused problems with the [Quit] button.
<li>If no toolbar buttons are defined, then the toolbar is always hidden,
	even if the "toolbar" option is set.
<li>Some of the X11 resources have changed names, to avoid clashes.
<li>The scrollbar's position is now configurable.  A new "scrollbar"
	option can be set to one of {<code>left right none</code>} to control this.
<li>Many x11 options which used to be locked after initialization,
	can now be changed at any time.  You can switch fonts, or change
	the scrollbar's width or position, with a simple ":<code>set</code>"
	command.
</ul>

<dt>Elvis can now fetch files via HTTP.
<dd>In addition to being a really good editor,
elvis can also be used as a crappy Web browser...
currently under Unix only, but it should be fairly easy to add to Win32 as well.

<p>I implemented this partly just to see how hard it would be.
It took less than one day, and added maybe 4k bytes of code!
It was worth the effort.

<p>I added a new section to the "Tips" chapter of the online manual,
describing elvis' Web facilities.  Basically, it boils down to:
<ul>
<li>If a file name starts with "http:", elvis loads it via network using HTTP.
	For example...
	<pre>:e http://www.cs.vu.nl/~tmgil/vi.html</pre>
	...will load the Vi Lovers' Home Page.
<li>Other network protocols are not supported yet.  FTP is greatly
	missed, and is a high priority for me.
<li>I tweaked the "html" display mode to work better for other
	peoples' documents.
<li>It will probably never support graphics, forms, or secure
	connections.  Bill and Marc can relax!
</ul>

<dt>A new "locked" option has been added.
<dd>It prevents practically all types of changes to a buffer.
By default, it is set for some of the more delicate internal buffers.
The default "elvis.arf" file also sets them for Web pages which were read via
the network, just as a convenience:
You probably don't want to edit them anyway.

<p>The "locked" option is totally separate from the "readonly" option.

<dt>A new "lpnumber" option has been added.
<dd> It causes printouts to have line numbers, just like the "number"
option does for windows.
Also, for the <code>normal</code> and <code>syntax</code> display modes, it causes
each page to include a header which shows the file name, page number, and
date/time that the printout was created.

<dt>A new "tex" display mode has been added.
<dd>Don't get excited, it isn't that good.
This is just a two-day hack by somebody (me!) who doesn't use TeX very much.
Obviously I expect TeX folks to find it useful...
but I'm worried that if I say anything good about it, I'll get mail from
somebody saying, "I know TeX.  TeX is a very good friend of mine.
And Mister Kirkendall, <em>elvis is no TeX!</em>"

<p>It shares a lot of code with the <strong>html</strong> display mode.
Consequently, it only increases the size of elvis by about 3k bytes!

<dt>The "^Wd" command is a little smarter.
<dd>The <kbd>^Wd</kbd> command toggles the display mode between the buffer's
<code>bufdisplay</code> mode, and one other mode.
Previously, that other mode was always <strong>normal</strong>,
but now it will use the <strong>syntax</strong> mode whenever appropriate.

<p>For example, if you're editing an HTML file, then <kbd>^Wd</kbd> will
toggle between the <strong>html</strong> and <strong>syntax html</strong>
display modes.

</dl>

<h2><a name="2.1b"></a>Between 2.1a-alpha and 2.1b-alpha</h2>

<dl>

<dt>Bugs
<dd>Many small bugs have been fixed.  See the "BUGS" file for a detailed list.

<dt>The "showname" option
<dd>A "showname" option has been added.
When set, it causes the name of the buffer to be displayed at the bottom of
each window.

<dt>The % visual command.
<dd>The <kbd>%</kbd> visual command has been enhanced.
There is a new option, "matchchar", which stores a list of character-pairs
to be matched.
The default is <code>matchchar=()[]{}</code> which makes % act like it always has.
You might want to try <code>matchchar=()[]{}&lt;&gt;\&quot;\&quot;</code> though.

<p>Also, in the "syntax" display mode, the % command can match #if/#else/#endif
preprocessor directives.
The cursor must be on or before the '#' character for this to work.

<dt>Buffer browser
<dd>A <code>:bb</code>[<code>rowser</code>][<code>!</code>] command has been added.
It constructs an HTML document listing all of the edit buffers, with
hypertext links to each of them so you can select a buffer just by
double-clicking it.
Normally <code>:bb</code> lists the user buffers, but <code>:bb!</code> (with a !)
lists <em>all</em> buffers including elvis' internal ones.

<dt>Tags
<dd>Elvis' handling of tags has been enhanced to work better for C++.
The specific changes are:
	<ul>
	<li>Elvis finds <em>all</em> tags with the requested name, and moves
		the cursor to the most likely match.  If you immediately
		request the same tag name again, then elvis moves the cursor
		to the next most most likely match, and so on through all
		possibilities.
	<li>After a tag search, elvis tries to leave the cursor on the tag
		name (not simply at the start of the line).  This way,
		if elvis chooses the wrong overloaded tag, you can find the
		next one just by typing <kbd>^]</kbd>.
	<li>The <code>ctags</code> program has been extended slightly.  If invoked
		with <code>-h</code> it will add some extra hints to the tags file
		which should help elvis guess which overloaded tag you're
		probably trying to find.  This is <em>not</em> the ultimate
		ctags program; this is just a quick hack to allow elvis' new
		tags features to be put to the test.
	<li>Elvis now requires the <code>tags</code> file to be sorted; this helps
		elvis search faster.  The <code>ctags</code> program has been
		modified so that it will now sort the tags on all operating
		systems.  (Previously, the tags weren't sorted under DOS or
		Win32.)
	<li>Elvis remembers the hints from recent successful or failed tag
		searches, and uses them to guess the likelyhood that any later
		tags are the ones you're looking for.
	<li>The syntax of the <code>:tag</code> command has been extended to allow
		you to restrict tags which have a specific hint, or to tweak
		the remembered hints that elvis uses to sort the matching tags.
	<li>There is a new <code>:br</code>[<code>owse</code>] command which builds an
		HTML document listing selected tags from the tags file, with
		hypertext links which take you to the definition points in your
		source code.
	</ul>

<dt>X11 resources
<dd>The "x11" user interface can now read some of its defaults from the
X resources database.
The resource values are used as defaults for options or color table entries.
The supported resources are:
<pre graphic>
.----------------------------.----------------------------------.
| Resource name              | Option, default                  |
|----------------------------|----------------------------------|
| elvis.toolbar              | toolbar, yes                     |
| elvis.font                 | normalfont, fixed                |
| elvis.geometry             | geometry, 80x34                  |
| elvis.foreground           | (normal foreground), black       |
| elvis.background           | (normal background), white       |
| elvis.dblclicktime         | dblclicktime, 4                  |
| elvis.control.font         | controlfont, variable            |
| elvis.cursor.foreground    | (cursor foreground), red         |
| elvis.cursor.selected      | (cursor background), red         |
| elvis.cursor.blinktime     | blinktime, 3                     |
| elvis.scrollbar.foreground | (scrollbar foreground), gray75   |
| elvis.scrollbar.background | (scrollbar background), gray60   |
| elvis.scrollbar.width      | scrollbarwidth, 14               |
| elvis.scrollbar.repeat     | scrollbartime, 3                 |
^----------------------------^----------------------------------^
</pre>
In each case, if your .exrc file sets the option or color, then the value
from the resources database is ignored.
All times are given in units of 0.1 second.

<dt>:only and ^Wo
<dd>The <code>:on[ly]</code> and <kbd>^Wo</kbd> commands have been added.
They close all windows except the current one.

<dt>:buffer <var>name</var>
<dd>When <code>:buffer</code> is given a buffer name as an argument, it will now
cause the current window to switch to the named buffer.
(Previously, <code>:buffer</code> <var>name</var> would simply rename the current
buffer.)

<dt>Numbered buffers
<dd>Each buffer now has a bufid option.
User buffers' bufid options are assigned consecutive numbers, and you can use
those numbers in place of a buffer name.
For example, if your first file is named "foo.c", then your first buffer will
be named "foo.c" as well.
Since it is your first, its bufid will be 1.
You can then refer to the buffer by name (<code>:(foo.c)%p</code>) or number
(<code>:(1)%p</code>).
Also, anywhere that elvis is expecting a filename, elvis will replace
"<code>#</code><var>n</var>" with the filename of the buffer whose
bufid=<var>n</var>.
You can use <code>:buffer</code> (with no arguments) to list all user buffers'
names and bufid values.

<dt>The untar program
<dd>On POSIX-compliant systems, the <code>untar</code> program can now restore
timestamps and permissions of the files that it extracts.
These features are enabled when untar.c is compiled with _POSIX_SOURCE defined.

<p><em>Note:</em> The <code>untar</code> program isn't really part of the elvis
package.

<dt>Binary and text conversions
<dd>The "binary" option has been deleted.
It is replaced by the following:
<ul>
<li><strong>fileeol(</strong><var>filename</var><strong>)</strong> is a
new function which tries to guess a file's format by examining its first
hundred bytes.
<li><strong>readeol</strong> is a new option which is used to determine
what conversions are used when reading a file.
<li><strong>writeeol</strong> is a new option which influences the conversions
that elvis performs when writing a file.
</ul>
The default configuration handles binary, unix text, dos text, and mac text
files automatically.

<dt>DOS Mouse
<dd>The MS-DOS port now supports the mouse.
The DOS port is a text-mode application, and you must have a mouse driver
installed and running for the mouse to work.
The mouse behaves the same as it does in the Win32 text-mode port;
they are both subsets of the X11 mouse support.
Specifically...
<ul>
<li>Clicking the left button cancels any pending visible selection and
	moves the mouse.
<li>Clicking the right button moves the mouse and extends any pending
	visible selection to the cursor's to new location.
<li>Dragging the mouse with the left button pressed selects characters,
	like the <kbd>v</kbd> command.
<li>Dragging the mouse with the right button pressed selects whole lines,
	like the <kbd>V</kbd> command.
<li>Dragging the mouse with the middle button pressed selects a rectangular
	area, like the <kbd>^V</kbd> command.
	If you have a two-button mouse, you can achieve the same effect by
	dragging the mouse with <em>both</em> buttons pressed.
<li>Double-clicking the left button on a word performs a tag search on that
	word, like the <kbd>^]</kbd> command.
<li>Double-clicking the right button anywhere will return from a tag search,
	like the <kbd>^T</kbd> command.
</ul>

</dl>

<h2><a name="2.1a"></a>Between 2.0 and 2.1a-alpha</h2>

<ul>

<dt>Bugs
<dd>Many small bugs have been fixed.  See the "BUGS" file for a detailed list.

<dt>WinTags
<dd>Serge has also provided a "WinTags.exe" version of ctags.
The only change is that WinTags shows a feedback window so you can see which
file it is currently scanning.
Unfortunately, I have an ancient version of Visual C++ and this window isn't
updated correctly.
I intend to update my Visual C++ as soon as possible, which should solve that
problem.

<dt>Default values of options
<dd>The options listed by ":set" (with no arguments) are now chosen in a
slightly different way.
Immediately after executing the "elvis.ini" script, elvis stores the value
of each option.
Later, setting that option to a different value will set a flag allowing that
option to be output by ":set"; setting it back to its original value will
reset that flag.
This is closer to the POSIX definition of how ":set" should behave.

<dt>X11 "textcursor" option
<dd>The "x11" user interface has a new option: <em>textcursor</em>.
It can be set to one of <strong>hollow, opaque,</strong> or <strong>xor</strong>
to control how the text cursor is drawn.

<dt>Syntax-coloring strings
<dd>The syntax-coloring display mode, "syntax", has been extended slightly
to allow it to handle languages whose string contants don't require a backslash
before an embedded newline.
This allows elvis to do a better job of coloring Perl source code.

<dt>Graphical Win32 interface
<dd>A graphical interface has been added for Win32.
Microsoft doesn't allow a single executable to support both Windows and console
I/O, so the graphical version of elvis resides in a separate executable, named
"WinElvis.exe".
After starting WinElvis, you can give the command ":set guiwin" to see the
names and values of the new configuration options.

<p> The Win32 graphical interface was written by
<a href="mailto:serge_pirotte@gtech.com">Serge Pirotte</a>.
If you wish to report a bug which exists only in the graphical Win32 version of
elvis, then write to him.
You can also thank him, if you feel so motivated.
(Other bugs should still be reported to
<a href="mailto:kirkenda@cs.pdx.edu">Steve Kirkendall</a>.)

</dl>

<H1><a name="future"></a>3. FUTURE</H1>

Lee Johnson is working on a graphical port to OS/2.
I can't make any estimates on when it will be available.

<p>One of the biggest tasks on my list is to rewrite the ctags program
so that it will be able to parse C++ code, and (optionally) place extra
hints in the tags file so that elvis' tag heuristics can do a better job.
It should read the language descriptions from "elvis.syn", and do at least
a half-assed job of generating tags for any language described there.
I'm also toying with the idea of a statistical tags generator, but that's
still pretty nebulous at this point.

<p>I intend to add a true extension language to elvis someday, but it
won't be in 2.1.
The language interface will be general enough to support a variety of
languages.  The first language supported will probably be PERL, followed
rapidly by Python and TCL.

<H1><a name="links"></a>4. LINKS TO RELATED FILES</H1>

If the main site (<a href="ftp://ftp.cs.pdx.edu/pub/elvis/unreleased/README.html">ftp.cs.pdx.edu</a>) is too slow, try the mirror site at
<a href="ftp://ftp.false.com/pub/elvis/unreleased/README.html">
ftp.false.com</a>.

<p>Most of the following are binary files, not text or HTML files,
so you can't view then with your Web browser.
But you can use your browser to download the files.
For Netscape, use &lt;Shift-Click&gt;;
for MSIE, use &lt;LeftClick&gt; and "download".

<dl>

<dt><a href="ftp://ftp.cs.pdx.edu/pub/elvis/untar.c">untar.c</a>
<dd>This is the complete source code for "untar",
a little program which extracts files from a gzipped tar archive.
Comments near the top of "untar.c" describe how to compile and use it.
If you already have the gzip and tar utilities, then you don't need this.

<dt><a href="ftp://ftp.cs.pdx.edu/pub/elvis/untardos.exe">untardos.exe</a>
<dd>This is an MS-DOS executable, produced from the above "untar.c" file.
It can also be run under Windows 3.1, in a Dos-prompt window.
For brief instructions on how to use <code>untardos,</code>
run it with no arguments.

<dt><A href="ftp://ftp.cs.pdx.edu/pub/elvis/untarw32.exe">untarw32.exe</a>
<dd>This is a Win32 executable, produced from the above "untar.c" file.
It runs under WindowsNT and Windows95.
It runs somewhat faster than the MS-DOS version.
It also supports long file names.
For brief instructions on how to use <code>untarw32,</code>
run it with no arguments, in a text-mode window.

<p><strong>NOTE:</strong>
MS-Windows95 and MS-DOS use incompatible methods for mapping long file names
to short ones.
So if you extract the files under Windows95, DOS programs won't be able to
find them with their expected names, and vice versa.
Consequently, you must use <code>untardos.exe</code> to unpack
<code>elvis-2.1i-msdos.tar.gz</code>, and <code>untarw32.exe</code> to unpack
<code>elvis-2.1i-win32.tar.gz</code>.

<dt><a href="ftp://ftp.cs.pdx.edu/pub/elvis/untaros2.exe">untaros2.exe</a>
<dd>This is an OS/2 executable, produced from the above "untar.c" file.
For brief instructions on how to use <code>untaros2,</code>
run it with no arguments.

<dt><a href="elvis-2.1i.tar.gz">elvis-2.1i.tar.gz</a>
<dd>This is a gzipped tar archive of the source code and documentation for
Elvis 2.1i-beta and its related programs.

<dt><a href="elvis-2.1i-msdos.tar.gz">elvis-2.1i-msdos.tar.gz</a>
<dd>This archive contains the documentation and MS-DOS executables
for Elvis 2.1i-beta.

<dt><a href="elvis-2.1i-win32.tar.gz">elvis-2.1i-win32.tar.gz</a>
<dd>This archive contains the documentation and Win32 executables
for Elvis 2.1i-beta.
These were compiled and tested under Windows95, but should work under
WindowsNT 3.51 (or later) as well.

<dt><a href="elvis-2.1i-os2.tar.gz">elvis-2.1i-os2.tar.gz</a>
<dd>This archive contains the documentation and OS/2 executables
for Elvis 2.1i-beta.

</dl>

</BODY></HTML>