-
Notifications
You must be signed in to change notification settings - Fork 20
/
CHANGES
2053 lines (1983 loc) · 103 KB
/
CHANGES
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
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
CHANGES BETWEEN 7.15 and 7.16:
Chuck Martin
-The marks for the last nine edited cells are now updated properly
even if the data entered or edited is a string constant.
-When assigning a numeric value to a cell with = (or "let"), the
numeric part of the cell will be cleared if no expression or value
is specified (e.g. "let A0 =").
-Fixed a bug that caused references to cells in rows 0-3 to some-
times be incorrect when copying.
-The vv command now increments modflg properly so sc knows that the
file has been modified.
-Added vi-like abbreviations, defined with the abbrev command and
undefined with the unabbrev command (shortcut key is ~). See the
man page for usage details.
-When in navigate mode, ^V now acts like the ESC key, which allows
you to use ^V^V to disable expansion of abbreviations, as in vi.
You can still use 'v' to insert the numeric value from the current
cell into the command line.
-Added support for POSIX regex functions (regcomp() and regexec()),
using extended regular expression syntax, and made it the default
in the Makefile. Also combined all regex variables into a single
variable in the Makefile.
-Rewrote the code that copies a marked cell. This fixes several
problems: the IS_CLEARED and MAY_SYNC flags are now correctly set
(thanks to Michael Karcher for bringing that bug to my attention),
sc will no longer copy into a locked cell, and copying a blank cell
into a nonblank cell now clears the nonblank cell (it previously
had no effect).
-When in quick numeric entry mode and a command is started using
a digit or the +, -, or . keys, any cursor movement while the
cursor is at the end of the line and the line ends with a + or -
will automatically switch to navigate mode.
-The "+" key now works like "=" if the numeric part of the current
cell is empty, except that the entry will begin in navigate mode.
If quick numeric entry mode is enabled, after switching to insert
mode the first time, the cursor keys will behave as if the entry
was started with a digit or decimal.
-When defining a range in navigate mode and the character immedi-
ately preceding the cursor is either a + or -, or the cursor is
at the beginning of an empty "let" expression, pressing + or -
will insert "@sum(" into the line, followed by the range, followed
by ")" and then the character pressed (either + or -), and will
remain in navigate mode. Pressing TAB, :, or . in such a case
will do the same thing, but without the final + or -, and without
remaining in navigate mode.
-Pressing the space bar in navigate mode while highlighting a range
will enter the highlighted range in the command line, followed by
a space, but will remain in navigate mode. Otherwise, it will
move forward a column, as before. This is handy for entering
copy, move, or frame commands, for example, which accept more
than one range in the command.
-The openrow command now works like the 'o' command instead of the
'i' command, as it should.
-When adding or deleting a note, modflg and FullUpdate are now
always incremented so that the the screen is updated properly and
the change is saved if necessary.
-When deleting rows in a framed range, the frame is now adjusted
properly all the time, regardless of how many rows are deleted.
Also, if all of the inner range rows are deleted, the frame is
removed.
-Removed clear() from the goraw() function to avoid screen flicker
at the end of a macro, and added a clear() after each goraw()
function call that still needed it.
-Removed #includes for getopt.h and added one for unistd.h in
psc.c because getopt.h is only necessary for GNU long options,
which sc and psc don't use.
-Removed the "#" prefix from backup file names, leaving only the
trailing "~", which is more standard practice. This was in
response to a suggestion forwarded to me from the Debian Bug
Tracking System (although it technically wasn't a bug).
-The umask is set to 0 before creating backups, and then reset to
its original value afterwards, so that the backup file will have
the same identical permissions as the original file.
-Backup files now retain the modification time of the original
file before it was modified, and also the user and group ids, if
possible.
-The -P command line option can now accept "%" as its range, which
is interpreted to mean the whole spreadsheet.
-There is now a -W command line option that works similar to the -P
option, except it uses the write command instead of the put command,
and it takes a single range as an argument, which may be "%" to
designate the whole spreadsheet.
-User-defined formats may now be edited instead of having to re-enter
them from scratch.
-Rewrote much of the history search code so that it works much better
than before and allows both forward and reverse searching. Also
added regular expression handling to the history search functions.
-When searching or navigating the command line history, a message
is shown on the error line (2nd line) telling which line of the
history you're currently looking at.
-If a cell uses a format that hasn't been defined yet, and isn't one
of the predefined formats, it will now cause the cell to be blank
instead of containing random characters. Thanks to Hartmut Henkel
for reporting this bug.
-All user-defined formats are now cleared in erasedb(), such as when
loading a new file.
-When copying, if the destination range has fewer rows or columns
than the source range, the area to be cleared before copying will
be expanded to the same number of rows or columns as the source
range to prevent there being unexpected data in the "holes".
-In the copy() function, added a call to sync_refs() after erasing
the destination range, but before doing the actual copy, to prevent
messing up color ranges, frames, ranges in expressions, or named
ranges.
-Range commands are now initiated with "r" instead of "/". The "/"
key will be mapped to more advanced search (and possibly replace)
capabilities later.
-Strings with embedded, backslash-escaped quotes are now displayed
properly, with the backslashes removed.
-Shell escapes (using "!") now also work while in edit mode.
-Added @filename(e) function which returns the current default
filename. Expression e determines whether the full path should
be returned, or just the base name, depending on whether it is zero
or not.
-If craction is set to move the cursor either down or to the right,
autoinsert is not set, and the cell cursor is in the scrolling region
of a framed range, the cell cursor will never leave that region, but
will always go to the next row/column after entering data in the last
column/row of the range. After reaching the bottom right corner,
craction will be ignored.
-If quick numeric mode and craction are both set, pressing <RETURN>
will move in the direction craction is set for instead of switching
to input mode with an empty line.
-Changed test in get_motion() from checking for 0 to checking for
'0' (digit instead of NULL byte), so that commands like d0, c0, and
y0 (in edit mode) work correctly.
-If the dollar prescale option is set, all numbers entered with a
decimal point will be scaled, even if all of the digits after the
decimal point are zeros (or missing).
-Fixed a bug that prevented sc from remembering the filename when
starting with a non-existent filename on the command line (for
creating a new file). Also, added a message stating that a new
file is being created if sc is started with a single filename on
the command line and the file doesn't exist.
-All of the commands that take you to the limits of the spreadsheet
(0, $, ^, #, and the HOME key) now work differently when invoked
inside a framed range. Depending on where you are, they will take
you first to the limit of the inner range, then the outer range,
then the whole spreadsheet. Also moved the code for all of these
commands to their own functions in vi.c, since these portions of
code were all being duplicated in the navigate mode section of the
write_line() function.
-The last goto can now be repeated (find the next match) by pressing
'n'. All note commands must now be accessed by pressing '*' instead
of 'n' to allow this. To actually go to a note, press '*' twice.
-Added a new pull command, pullfmt (pf), that works like merge except
that only cell formatting is merged, leaving the actual data un-
touched.
-Changed starting value of findfunc in vi.c from '0' to '\0' to fix
a bug that caused lockups when using the ; and , commands before a
prior search with f, F, t, or T.
-Swapped the meaning of the ` and ' commands because the ' key is
less of a reach on most keyboards (and more standard), and restoring
the target cell to its original position on the screen seems to be
more useful and more often used than not restoring the position.
-In closecol(), doformat(), and formatcol() functions, rowsinrange
and colsinrange are now reset to prevent occasional lockups when
deleting or resizing columns.
-Moved color initialization earlier in the start-up so that it won't
override colors in a file (including the .scrc file).
-Trying to define color number 0 now correctly results in an error.
-Fixed support for entering numbers in exponential notation (thanks
to Michael Van Biesbrouck for bringing that bug to my attention).
Also, disallowed range names that are all numeric except for a
single 'e' or 'E' anywhere in the name, because they are ambiguous.
-Removed the strtof() function, since it partially duplicated the
functionality of the standard ANSI C strtod() function (but not as
well), and replaced all strtof() calls with calls to strtod() (with
a slightly different syntax).
-Moved the resetting of skipautorun inside the if(eraseflag) block
in the readfile() function to prevent it getting reset prematurely
(during the reading of the .scrc files) and resulting in the autorun
macro being run anyway.
-If deleting a range of rows, columns, or cells causes the range
pointed to by lastfr to no longer exist, lastfr is reset to NULL to
prevent a segmentation fault during the next screen update.
-The copy command now uses the delete buffer as temporary storage
for the source range being copied so that if the source and desti-
nation ranges overlap, the copy still works.
-The sync_refs() function now also syncs references in all delete
buffers so they will still be correct when pulled (even though the
references are adjusted when pulling, they were still occasionally
wrong if the cells originally referenced were moved in the meantime).
-A new copy command, "c.", can be used to copy the current cell into
a range which includes the current cell, and which is highlighted
by moving the cell cursor. This facilitates the rapid entry of the
same value, string, or expression into a range of cells. See the
man page for details.
-You can now left justify, right justify, or center all the strings
in a range with the "r{", "r}", and "r|" commands, respectively.
These operations are also available in macros with "leftjustify",
"rightjustify", and "center".
-When changing column formats, if ESC, ^G, or q is pressed, the
original format will be restored.
-The fixed operator was not working. It now works, but, like all
other keywords, must be preceded by "@".
-Autoinsert mode now works properly even if the bottom of the frame
is of width 0.
-A new Set option, autowrap, allows data to be entered in a framed
range row by row or column by column if craction is not 0, auto-
matically wrapping to the next row or column when the end of the
scrolling region is reached. If both autowrap and autoinsert are
enabled, autoinsertion only takes place if autowrap would take the
cell cursor outside of the scrolling region of the framed range.
-The "set" command now increments modflg so that sc knows the file
has been changed and asks whether to save when quitting.
-Added vi-like W and B commands to edit mode which only consider a
string of one or more spaces to be a word boundary.
-The @date function can now take an optional second parameter, which
is a strftime(3) compatible format string, which will override the
default format.
-All functions which take a single argument now store it as the
left parameter instead of the right (e.o.left instead of e.o.right),
so that adding an optional second parameter, such as in the @date
function in the previous item, keeps the parameters in the correct
order when decompiling for display on the top line or saving in
a file.
-When numeric constants are entered which are too large to be con-
tained in a double, they are replaced with @err. When the result
of a calculation is too large to be contained in a double, it results
in an error. These fix a dual bug which caused "inf" or "INF" to be
displayed (bug 1) and written to a file (bug 2) when saving. When
written to a file, it resulted in an error when the file was read
back in the next time.
-All rows, columns, and ranges that are yanked or deleted now have
their respective row/column hidden flags and column width, precision,
and format saved so they can be restored appropriately when pulling
rows or columns (these were all lost, previously, and the default
values were restored, instead).
-Added a pullcopy command and its interactive shortcut, pC, which
acts like pp, except that references are adjusted as in the other
copy operations. Also added a "p." command, which works like pC,
except that it allows a destination range to be defined as in the
"c." command.
-When highlighting a range in navigate mode, pressing "o" will move
you to the opposite corner of the highlighted range, allowing you
to adjust all four sides of the range. When used with the "c."
command, the cell to be copied will always be the cell the command
was started in.
-The deleterow, deletecol, yankrow, and yankcol commands now work
properly with no arguments instead of assuming there is a range
highlighted.
-The Z command (for hiding rows or columns) now allows a range of
rows or columns to be highlighted using any cursor movement keys,
like the d (delete) and y (yank) commands have for quite awhile.
-The erase_area() function now has a new argument to ignore locked
cells which is used when sorting so that locked cells can still
be sorted. Also added an unlock argument to free_ent() and caused
the IS_LOCKED flag to be copied in the copyent() function so that
sorting won't unlock cells.
-The @sum, @prod, @avg, @count, @stddev, @max, and @min functions
may now take an optional second argument which is an expression
that is evaluated for each cell in the range, and only those cells
for which the expression is non-zero are included in the calculation
of the function. See the man page for details.
-If rows are inserted into a framed range, note addresses are now
updated properly.
-Logical NOT (~ or !) now always decompiles to "!" instead of "~"
for display or writing to a file.
-In the O_VAR case in the seval() function, check to make sure that
ep is not NULL before checking if it has a label to prevent possible
segfaults with the seval command, and also changed its name to vp
for consistency with the O_VAR case handling in eval().
-In doseval(), check the return value of seval() for NULL before
using it to prevent segfaults with the seval command if the ex-
pression given to seval isn't a valid string expression.
-Fixed a bug that prevented a string expression that currently
evaluated to a null string from being written to a file with the
put command by testing for either a non-null string value or a
string expression in the cell instead of just the former.
-Moved "FullUpdate++" outside of "if (eraseflg)" block at the end
of the readfile() function in cmds.c so that the screen is updated
properly after a macro.
-Added a getkey command for use in macros to get a single key from
the user instead of a string. Handy for "hotkeys" or "Press any
key..." type things.
-Changed two instances of update(0) to refresh() in formatcol(), and
added another refresh() after update(1) later in the same function
because the screen wasn't being refreshed properly in FreeBSD.
-Added a ^L option to redraw the screen while formatting a column.
-Added -ffloat-store to the compiler command line for interp.c to
fix intermittent error with @round function as well as some other
problems caused by the FPU registers in x86 machines, and possibly
others, having different precision than doubles in memory, and
removed some previous workarounds for some of these problems.
-Braille mode now positions the cursor at the far left of the current
cell and also moves the column names to the left edge of the column,
which works better with screen readers such as SpeakUp while still
retaining all of its advantages for braille readers.
Michael Lapsley
-Added @lastrow and @lastcol functions, useful for macros designed
to default to the whole spreadsheet.
-Added getrange command for use by macros to check if a given named
range exists without causing an error, and return the actual range
if so.
-Added a history file (default: ~/.sc_history) to carry the command
history from one session to another.
-Added ability to interface with plugins (external programs for
adding commands to sc and converting files with user-specified
extensions automatically when reading or writing).
Wilhelm B. Kloke
-Pointed out problems with arrow keys in nmgetch() when BSD43 is
defined due to changed ^B and ^F behavior, causing arrow keys to
work incorrectly on FreeBSD. Also, similar changes were necessary
for VMS when SIMPLE is defined.
-Add "optreset = 1" to -P option handling when BSD43 is defined so
the -P command line option will work properly on FreeBSD.
Hartmut Henkel
-Added locale support.
-Rewrote dodate() function to use strftime() because ctime() doesn't
honor locale.
-Changed PI macro to M_PI, which is standard in math.h.
-Changed sprintf() to snprintf() in dofmt() function to prevent
potential segmentation faults.
-Added isascii() check in addition to existing isalpha() check to
prevent invalid address problems in some locales.
TJ Dvorachek
-Time types in interp.c have been changed from long to time_t and
the time() prototype in dotime() is redundant and has been removed.
-Provided information for creation of a DJGPP section in the Makefile.
-In the signals() function in sc.c, the SIGBUS signal handler is not
set when compiling with DJGPP because it lacks SIGBUS.
CHANGES BETWEEN 7.14 and 7.15:
Chuck Martin
-Fixed "``" and "''" bug, introduced in 7.14 (they weren't being
accepted). I guess 7.14 was released too soon after last minute
changes, without sufficient testing.
-Fixed format bug that caused segfaults when there was no decimal
point in the format string, also introduced in 7.14 last minute
changes.
-When entering insert mode with '+' or '-', and the cell already
contains a numeric value or expression, the edit is now saved in
the dot buffer, as it should be.
-Don't save the current position (for the "`" and "'" commands)
during a goto in a macro. Also, don't save the current position
during any movement command where the current cell doesn't change
(leave the saved position pointing to the last position before an
actual move).
CHANGES BETWEEN 7.13 and 7.14:
Chuck Martin
-Added a braille option ("set braille" or ^Tb) with two different
modes, which makes use of braille displays with sc much easier
by judicious placement of the hardware cursor.
-The "cellcur" option (current cell highlighting) is no longer
saved with a file, since it's more likely a user preference
and/or terminal dependent, and is more appropriate for use in a
user's .scrc.
-Split the last fprintf() in list_frames() so that the outside
and inside ranges will be different (as they should be), even if
neither is a named range, since r_name() uses a single static
buffer.
-The range copy command (/c) with only one argument will now use the
highlighted range as the source if one is highlighted. Otherwise,
it will copy the last copied range, as before.
-The range copy command (/c) with no arguments will now use the
highlighted range as the destination, if one is highlighted, and
the last copied range as the source.
-The addnote command with only one argument will now use the
highlighted range if there is one, and the current cell otherwise,
as the range to link to the cell specified by the single argument.
-The frame command with a single argument will use the highlighted
range, if any, as the inside range, and the single argument as
the outside range. If no range is highlighted, the single argument
will be used as the inner range, and the existing outer range
containing the current cell will be used as the outer range, which
which was the previous behavior whenever a single range was speci-
fied. If the current cell is not in an existing framed range, an
error message will be issued.
-The frame command may now be used without any arguments, provided
a range is highlighted (which will be used as the inner range)
and the current cell is in a framed range whose outer range is to
be used as the default outer range.
-Fixed a bug that prevented defining a new range with a name that
was the same as the beginning of a previously defined longer
range name.
-A new command line option, -a, will skip the autorun macro if
one is defined.
-Bug fix: if a cell contains a string expression, but no numeric
value, pressing "e" to edit the non-existent numeric value will
no longer bring up the string expression for editing (it wouldn't
work, anyway, because string expressions don't work with the "let"
command).
-You can now use the cursor keys with ^Tr to set craction.
-In numeric mode, entering insert mode by pressing a digit, '+',
or '-' will cause the cursor keys to terminate an entry and
move the cell cursor in the desired direction. Switching to
edit mode will change the cursor keys back to their normal
function (moving the cursor in the command line or history), even
after switching back to insert mode.
-Fixed @index function so that indexing by both row and column
will still work even if there is only one row or one column
(so that, for example, a macro could generically access the
cell in the first row and first column of a range without
regard for the actual dimensions of the range).
-All flags are turned off in the clearent() function except
IS_CHANGED and IS_CLEARED, which are turned on. Also, the
IS_CLEARED flag is turned off in the fill() function after the
cell is cleared and then assigned a new value. This prevents
errors from appearing in expressions which reference cells in
the filled range whenever the sync_refs() function is called,
which happens any time any cell or range of cells is yanked,
deleted, pulled, copied, or moved.
-Each instance of @ext now saves its own previous value, which
eliminates the longstanding bug that caused the last returned
value to be used for all instances if external functions were
enabled and later disabled.
-Added a % command in edit mode that finds the matching parenthesis
of a pair, as in vi (only works for parentheses, not for braces
or brackets).
-When starting a new command, the dot buffer will not be altered
unless the command starts out in edit mode (like the "e" and
"E" commands). All other commands will only alter the dot buffer
after entering edit mode for the first time. This allows things
like editing data, using "goto" to jump to a new cell, and then
"." to make the same change to the new cell (previously, the
"goto" command caused the previous edit to be lost from the dot
buffer).
-Numeric arguments are now saved for use with the dot buffer when
editing a line, so the same argument will be used again when
repeating the action with the "." command.
-If a command line is identical to the last command in the history,
it won't be stored in the history again.
-The copy and move commands (/c and /m) no longer have an effect
on the delete buffer. This allows you to do things like delete
a cell or range of cells, move things around in the spreadsheet,
and then pull the deleted cell(s) back in.
-Implemented named buffers, "a" through "z" and "0" through "9",
selected with the " key. Buffers "1" through "9" hold the last
nine deletions, as in vi, and buffer "0" holds the last cell or
range of cells yanked, as in vim. See the man page for details.
(A "select" command was also added to allow the use of named
buffers in macros.)
-The format command now rejects a width of zero.
-Column headings over columns of width 1, 2, or 3 are now displayed
properly. If the width is 1 and the column name is two characters,
only the second character will be displayed in the heading.
-In navigate mode, v and ^V now place the numeric value from the
current cell into the command line, freeing up the ^A command
to be used as a synonym for the HOME key, as it is when not editing
a line.
-KEY_RESIZE is now handled properly so an error message is not
issued whenever an xterm window is resized. If SIGWINCH is
undefined, KEY_RESIZE resizes the spreadsheet to fit the window.
otherwise, it is ignored, since the SIGWINCH signal handles the
resizing.
-Pulling the same range several times now works correctly. Pre-
viously, some cell references were being altered after the first
pull under certain circumstances.
-Internal references are now adjusted properly when pulling a range
with "pt" (pulltp).
-The -R and -C command line options now work properly again.
-The pull merge command (pm) now actually does a merge, instead of
overwriting the destination cells, and a new pull command (paste,
or "pp") pulls a cell or range after first erasing the destination
cells. For macros, pull does the paste, while pullmerge does the
merge.
-The f (format) command now allows you to interactively change the
column width, precision, and format number as well as enter these
values on the command line as before. See the man page for details.
-The "&" in the fractional part of a custom format type now works
properly even if the precision is one.
-When using "&" in a custom format type, and there are literal
characters after the fractional portion, they will now be included
properly even when the precision is zero.
-Removed the "fill x y" (where x and y are numbers and the range
is supposed to be highlighted) form of the fill command, since
its usefulness and convenience leaves much to be desired the was
sc now handles the /f command. It's much easier to use the full
form now.
-Added marks '1' through '9' to remember the locations of the last
nine edits, and '0' for the current (or last, if not editing) edit.
Hartmut Henkel
-When saving a range with "Put", the "format" and "hide" commands
are now written for the last column of the range, if necessary
(needed to change a "c < cn" to "c <= cn" in the write_fd()
function in each case).
CHANGES BETWEEN 7.12 and 7.13:
Chuck Martin
-New column formats may now be defined with "format # = string",
where # is a number from 0-9, and string is a format string like
that used for formatting individual cells. Numbers 0-4 will
replace the default formats (causing the precision value to be
ignored), and numbers 5-9 will add new ones.
-Format strings now interpret "&" in the fractional part to mean
that the column precision should be used. This allows user
specified formats to have their precision vary from column to
column without having to create multiple formats (see the previous
item).
-The "vr" command now limits itself to the current framed range,
if any, like "dr" and "yr". If not contained in a framed range,
it works as before.
-The "yy" command now yanks only the current cell instead of the
current row, as this seems more useful. Likewise, "vv" converts
the current cell from an expression to a constant value, and for
consistency, "dd" erases the current cell ("dd" is a synonym for
"x" now, instead of "dr").
-You can now unset mdir and autorun by setting them to "".
-Both goraw() and deraw() do nothing if stdout is not a terminal.
This prevents segmentation faults when using sc non-interactively
with redirection or pipes.
-The redraw command also does nothing if stdout is not a terminal
for the same reason as the goraw() and deraw() functions (see the
previous item).
-doquit() and dump_me() no longer try to prompt the user about
saving a file under emergency situations such as a broken pipe
or kill signal if stdout is not connected to a terminal, which
prevents even more possible segmentation faults. Also, SIGINT
is no longer ignored, but calls doquit() instead.
-Added a "usecurses" variable, and replaced most instances of
"isatty(STDOUT_FILENO)" with "usecurses". The -q option also
resets usecurses to 0, so echoing commands to "sc -q" now works
from the command line.
-Added another "usecurses" before the confirmation message in the
writefile() function.
-The error() macro now checks stdout instead of stdin before dis-
playing its message.
-find_char() now checks to see if the last character in the dot
buffer is 'f', 'F', 't', or 'T', and if so, stores the next
character after it. This causes these commands to be stored
in the dot buffer if they are part of another command (such as
'df+'), but not otherwise.
-Fixed a bug where numeric arguments could not be used in edit and
navigate modes if quick numeric mode was set.
-Added a new command, seval, that evaluates an expression like
eval, except it evaluates string expressions instead of numeric
expressions.
-Added KEY_BACKSPACE and KEY_END to the control key handling part
of the main loop, and removed KEY_END from nmgetch().
-Eliminated the hitwinch variable and moved all SIGWINCH stuff into
the SIGWINCH handler (winchg()). Also, changed update() to use
getmaxyx() instead of LINES and COLS. These changes make sc
react immediately to resizing xterms (for some reason, this
doesn't work with old versions of ncurses--at least not with
version 1.9.9g, which seems to require restarting sc to make size
changes effective).
-A new Y command in edit mode that yanks to the end of the line,
like y$ (I know this isn't the way Y works in vi, but it's the
way it *should* work for consistency [cf. the D and C commands],
and the way Y works in vi would be pointless in sc).
-The "cellassign = 1" in slet() is now only done if the cell being
assigned to is the current cell, like it was supposed to (I must
have deleted that part by accident somewhere along the line).
-The /S command now lists named ranges, framed ranges, and color
ranges, one after another, along with definitions of any colors
that have been changed from the default (no second letter required).
-Colors may now be unset (reverted back to their default start-up
values) by leaving out the expression (e.g. "color 3 =" will
set color 3 back to it's original foreground/background pair).
Unlike setting it explicitly to its original value, this will
not cause the expression to be written to the file when saved.
-Changed test in pullcells() function for checking if there is
data to pull so that instead of testing the actual pointer to
see if it's NULL, the index will be tested to see if it's
negative. The old method was causing segfaults if the delete
buffer was empty.
-^A now goes to the beginning of the line in edit and insert modes.
It retains its original behavior in navigate mode (the man page
already stated that inserting the numeric value of the current cell
into the command only works in navigate mode; now the behavior
matches the manual).
-Range names may now begin with a digit as long as there is at least
one non-numeric character (alpha or '_').
-Added range name completion.
-Fixed a bug that caused range names to match when they shouldn't
when parsing a command (a range name would be matched by any
string of characters that matched the beginning of the name, so
that if "abc" and "abcd" are both defined, an expression using
"abc" would end up accessing the wrong range, since the list is
searched in reverse alphabetical order).
-Cells with attached notes are now identified with an asterisk to
the left of the numeric portion (using color 4, default black on
yellow, if color is enabled).
-The J, K, PageUp, and PageDown commands now use the pagesize setting
even in navigate mode.
-^B and ^F now do the same as PageUp and PageDown instead of moving
left or right one cell. This is to be more compatible with vi,
resulting in less confusion for those who use both.
-Centered strings are now entered by pressing '\' instead of '"',
so that '"' can be used for multiple delete buffers as in vi in
the future.
-If an autorun macro is already defined, pressing 'A' will include
it for editing in the command line it brings up, as it should
(it wasn't working properly due to a missing else).
-In openfile(), check if rfd is NULL (signifies opening pipe to
process for both reading and writing) before closing unused end
of (non-existent) second pipe. This was causing intermittent
lock-ups when only writing to a pipe because stdin was being
closed.
-The screen is no longer cleared or redrawn unless absolutely
necessary after a macro is run, since most macros won't need it,
and it causes screen flicker. Macros which need it (those that
write directly to the screen, bypassing sc) will need to do an
explicit redraw before ending.
-SIGPIPE now causes a flag to be set (brokenpipe), which is checked
a number of places so that nothing more is written to the pipe
and an error message is displayed, instead of trying to save the
file and quit (an annoyance when all you did was do a /S and then
quit before reading the whole output).
-If the last character in the string in a run command is '&'
(signifying the command will be run in the background), the
"Press any key to continue" prompt will not be displayed, and
sc will continue with no hesitation. I use this in Linux to
load another sc file in another virtual console with "openvt -sw"
(assign it to a function key for ease of use).
-Added @rows and @cols functions that take a range as argument and
return the number of rows or columns, respectively, in that range.
-Added a new error command for displaying error messages from macros
(syntax: `error "message to display"').
-The duprow() and dupcol() functions now put the cursor in the
original column or row, respectively, which, among other things,
prevents sc from hanging when multiple rows or columns are appended.
-A `put ""' command (with the empty string) will save the default
name even in a pipeline, unless the default name is also the empty
string, in which case it will be written to stdout.
-Removing a function key definition by defining it to be "" (the
empty string) now changes the pointer to NULL in addition to freeing
the string, as it should.
-When using goto (g) to jump to a specific cell address (as opposed
to doing a search), only save the current address for the `` and
'' commands if the destination address is different.
-When inserting or deleting rows or columns, update the addresses
associated with the last explicit goto.
-Added definitions for color_set() and attr_get() to sc.h for
older versions of (n)curses that have missing or outdated versions
of these macros (not conforming to X/Open Curses).
-Colors are now reinitialized in startdisp() (using init_pair()) so
that they continue to work properly after resizing an xterm.
-The -P command line option can now be used without specifying the
source range, but the target address must be specified in such a
case, preceded by a '/' (e.g. '-P/f23'). In this case, sc will be
started interactively in navigate mode so you can highlight the
source range you want to import.
-The -P command line option may now be used more than once, and
the specified ranges will be output one after another, however,
the -v option must precede each instance of -P whose output is to
be converted to values. This allows multiple ranges to be copied
from one file to another without having to load and calculate the
entire source file for each of them.
-The destination given with the -P option may now be specified as
either a cell address or a range. If a range is specified, the
upper left corner of that range will be used. This allows named
ranges to be used.
-The initial allocation of memory for color pairs is now done in a
loop instead of eight explicit statements.
-Undoing changes made to a command now works after using replace mode.
Also, backspacing in replace mode restores the original character
instead of just deleting the new one and closing the hole.
CHANGES BETWEEN 7.11 and 7.12:
Chuck Martin
-The yankrow and deleterow commands can now take a numeric argument
or two numeric arguments separated by a colon to specify a row or
range of rows to yank/delete. Likewise, the yankcol and deletecol
commands can now take a column name or two column names separated
by a colon to specify a column or range of columns to yank/delete.
-Pressing y or d followed by any cursor movement, including PageUp,
PageDown, H, J, K, or L, will begin highlighting full rows/columns
to be yanked or deleted. Pressing TAB, '.', or ':' will terminate
the highlighting and insert the range of rows/columns in the
command line. Pressing the RETURN key, instead, will yank/delete
the default range of rows/columns displayed.
-Added a pagesize option that can be changed with the set (S)
command. If nonzero, it will determine the number of rows to
move up or down when using the J, K, PageUp, or PageDown keys.
-The PageUp, PageDown, J, and K commands will now be multiplied
by a preceding numeric argument like most other commands.
-An improper test was causing the syncref() function to corrupt
expressions which referenced empty cells every time anything was
deleted or moved. This has been fixed (the struct ent now has
an additional "IS_CLEARED" flag).
-When adding a note with "na", automatically start out in navigate
mode.
CHANGES BETWEEN 7.10 and 7.11:
Chuck Martin
-You can now use ~ in edit mode to change the case of a character,
just like in vi.
-In quick numeric mode, the + and - keys now switch to insert mode
and append a + or - to the existing numeric entry, respectively.
This is so that you can easily add to or subtract from a cell that
already contains numeric data.
-When attempting to edit the numeric value in a cell with e, +, or
-, and no value or numeric expression has previously been entered
in that cell, you will no longer be presented with a 0 to edit.
-In navigate mode, the + and - keys now insert the current cell
address, followed by a + or -, respectively, and remain in navigate
mode, so that other cells may be easily added to or subtracted from
the equation.
-^E can now be used in insert mode to jump to the end of the line.
-Check to see if $HOME exists before copying it to curfile to
prevent segfaults if it's unset.
-The deraw() function now sets the background to the default colors
(white on black) before clearing the last line.
-If piping from a command (as opposed to *to* a command), as in
advanced macros, the cell cursor won't move to the last line and
the last line won't be cleared, which avoids unnecessary screen
updates.
-Function key definitions are now saved with a spreadsheet file.
It makes more sense to include them with the file than to consider
them user preferences for inclusion in a dotfile.
-Fixed a bug that prevented locked cells from being recalculated
(this actually looked deliberate, but I don't understand why, so
I "fixed" it anyway).
-Locked cells now can't be changed even if the command is entered
from scratch at the command line (previously, you were only pre-
vented from using =, <, >, or " to enter insert mode while in a
locked cell).
-There are now openrow and opencol commands ("o" followed by "r" or
"c") that work like insertrow and insertcol ("ir" and "ic"), except
that the new rows/columns are added after the current row/column
instead of before it.
-When adding new rows/columns with a, i, or o, the new cells will
always be included in the same ranges (named, framed, or color,
as well as those used in an expression) as their counterparts in
the current row/column. This is handy when adding rows/columns
at the edge of a range, by moving to the appropriate side of the
boundary and using the appropriate command (i or o). This is
actually multiple changes, since each type of range had to be
dealt with individually.
-Added new command line options for use in piping data to another
program or redirecting to a file. These are: "-P range" or "-P
range/var" for writing a range in sc format to stdout (the "var" is
a cell address used to adjust addresses for inclusion in another
file starting at cell address "var"), and -v for causing values to
be output instead of expressions when the -P option is used. This
only outputs cell data and formatting, without all of the colors,
range definitions, column formatting, etc., that are included with
the normal put command or when piping the output without the -P.
Also, piping in general has been much improved.
-When using get to load a new file, all options are reset to their
initial defaults, marked cells are unset, etc., and the user's
.scrc file is reread.
-Fixed a bug which allowed strings that are too long for the cell
width to slop over into the next cell when they shouldn't (there
is data in the next cell, for example). This bug only occurred in
framed ranges.
-The pipe symbol (|) is no longer required at the beginning of
the "pipe" commands. The way the proper file descriptor is
chosen has changed so it's no longer necessary. This makes it
easier to use shell scripts for macros because there's no pipe
symbol to quote (it should have been done this way in the first
place--I don't know why it didn't occur to me before).
-Added a "status" command for use in advanced macros that will return
information about the current state, such as whether the file has
been modified and whether stdin or stdout is connected to a terminal.
-Added an "eval" command for use in macros to evaluate an expression
without storing it in a cell first. This is a pipe command so the
result will be piped to the macro.
-Added a -q command line option to force sc to exit immediately
after reading all files, including stdin, if that is being read
as a file. This is useful for getting information from a file
without entering it interactively (e.g. echoing the eval command
to sc from a shell script, effectively using sc as a command line
calculator).
-Defining a function key as "" (the empty string) will effectively
undefine it, so it won't be written to the file when saving. When
used with F1, this restores the default behavior of reading the
man page.
-After doing a goto, update() is called, so that following a goto
by a whereami in a macro will return the correct second address
(the upper left corner of the current screen).
-^E and ^Y both work in navigate mode now. ^E works both for
scrolling and going to the end of a blank/non-blank region. The
END key also works in navigate mode.
-Fixed problem in the range commands (those initiated with a "/")
where the cursor wasn't being positioned properly at the end of
the command line due the the recent change in how insert mode is
entered (for making the dot buffer work properly).
-Simplified logic for doing autorun macros.
-When starting to define a range from navigate mode with the TAB,
".", or ":" keys, a space is no longer inserted into the command
line (there was an "ins_in_line(' ')" in the wrong place).
-Added a new function, @err, that forces an error. If rows or
columns are deleted and not pulled back in, all references to
cells in those rows/columns will be replaced with @ERR until they
are pulled back in (@ERR is equivalent to @err, but the caps show
that it is due to a deleted cell being referenced). If the
spreadsheet is saved to a file before pulling, the @ERR will be
saved as a part of the expression, and will show as @err (lower
case) after being read in again, since the deleted cell can no
longer be restored. This is so that it can be fixed in a later
session. Previously, the whole expression was lost if there was
an error when the file was saved and reread. Also, if another
deletion is performed before pulling the last one in, all instances
of @ERR will change to @err, showing that these references may
no longer be restored.
-Fixed a bug when inserting columns at the end of the scrolling
portion of a framed range, which caused formulas referencing the
last cell in the scrolling portion to reference the new last cell
(in the last newly added column) instead of the old one.
-Added a command to sort the rows in a range according to either
numeric or string data (or both) in one or more columns. See man
page for details.
-Added a "cslop" option (short for "color slop"), disabled by
default, which, when disabled, prevents long strings from slopping
over into a cell in a different color range, even if there is no
data in it. When enabled with "set cslop" or ^Ts (to toggle it),
this slopover will occur regardless of whether there is a change
in color range or not. The default is very handy in framed ranges
to get more data on-screen by including only the beginnings of row
identifiers in the frame while maintaining a cleaner look, while
enabling cslop still allows you to see the full string.
-All options which can be disabled by using ! with the set command
can now use ~ instead (handy for shell scripts because it doesn't
need to be quoted). Some options worked this way before, but it
wasn't consistent.
-The move command will now accept the currently highlighted range
as its second argument even if you don't press TAB, ".", or ":"
to enter it into the line.
CHANGES BETWEEN 7.9 and 7.10:
Chuck Martin
-Implemented "dd" command as a synonym for "dr" and "yy" as a
synonym for "yr" (similar to the way these commands work in vi).
-Added a vi-like y (yank) command to edit mode which copies from
the command line to the text delete buffer without deleting.
-Added two more goto commands: `goto #"regex"' to do a regular
expression search through formatted numbers, and `goto %"regex"'
to do a regular expression search through expressions. Both of
these may take an optional range argument to limit the search
to a specified range.
-Added a |getframe command for use in macros to return the outer
and inner ranges, respectively, of a frame, separated by a space.
-You can now scroll up and down without moving the cell cursor
using ^E and ^Y, as in vi. Since ^E also has another function,
it only scrolls when immediately following a ^Y or another ^E.
-Corrected man page which still erroneously stated that C centers
the current cell (it is now used to define a color).
-ZZ now only writes a file if it has been modified. It also gives
an error message if there is no default file name.
-If cell highlighting is turned off while color is on, the cell
pointer (<) no longer leaves a trail through colored ranges (I
don't know why anyone would use this combination of options, but
it's fixed, anyway).
-When writing a range with the put (P) command, format commands
for columns outside the specified range are no longer written.
-Removed "#include <stdio.h>" from sc.c, vi.c, and xmalloc.c, since
this is redundant when curses.h is included.
-Added an autorun command (shortcut "A") to specify a macro to be
run automatically as soon as the file finishes loading. Autorun
macros will not be executed from a file which is merged (such as
another macro).
-When uninstalling, $(LIBDIR) (default: /usr/lib/sc) is removed
completely, instead of just its contents.
-When used in a pipeline rather than a terminal, the format command
doesn't try to resize the column because the format is "too large"
for the screen, which resulted not only in negatively sized
columns, but also segmentation faults when switching to interactive
mode.
-Initialized variable "pid" to 0 in readfile() function in cmds.c
to eliminate potential hangs when closing a file after reading.
-A message was added to let you know when a file is being read so
it doesn't look like the program hung when reading a large file.
-When switching from reading from a pipe to interactive mode, there
is now a stopdisp() before the freopen() and a startdisp() after
to make sure the curses initialization is done properly.
-Now checks to see if the stdin is a tty before trying to check
if the terminal has colors (curses has_colors()) to prevent
segfaults when run in a pipeline.
-Modified both the sc and psc man pages for a more consistent
look.
-You can now use numeric arguments in the middle of a command in
edit mode, as well as the beginning. For example, d3w and 3dw
both do the same thing. If you do both, they will be multiplied.
-sc now uses getopt() to parse its options.
-If stdin is not a terminal (as in a pipeline) and a filename of
"-" is not given, stdin will be merged in after all files on the
command line have been processed.
-Added a modflg++ to the frame-handling part of the deleterow()
function in cmds.c so that deleting a row in a frame will cause
you to be prompted to save the file if you quit.
-Added an autoinsert option and toggle (^Ti) to automatically
insert a row/column each time the last row/column is filled in
the scrolling portion of a framed range if craction is set to
move the cell cursor so that it moves outside this range.
-Marked cells are now updated properly when inserting or deleting
rows inside a framed range.
-In both edit mode and navigate mode, "v" is now a synonym for ^V.
-Moved savedot() out of vigetch() in vi.c so that the f, t, F, and
T commands wouldn't be saved for repeating with the dot command.
Added a ";" and "," command to repeat these commands instead, as
in vi (the latter reverses the direction of the search).
-Replaced all instances of "insert_mode()" in the main loop in sc.c
with "edit_mode; write_line('A')" so that they are written into
the dot buffer properly.
-Pressing RETURN in insert mode enters an ESC into the dot buffer
instead of a ^M so that the dot command only repeats the last
change, without automatically ending the input.
-Removed a sync_refs() from the frame-handling section of insertrow()
in cmds.c so that deleting and then pulling a row in a framed range
doesn't mess up expressions that referred to cells in that row.
-When not editing a line, ^A goes to A0 like the HOME key.
-Navigating with the HOME key, ^A, 0, ^, $, or # now saves the
current position for returning with `` or ''.
CHANGES BETWEEN 7.8 and 7.9:
Chuck Martin
-Fixed a bug where cells in the delete buffer were having their row
and column numbers changed each time they were pulled to match the
last pull address instead of keeping their original values.
-Added two more options for the 'p' (pull) command, in addition
to 'pr' (pull rows), 'pc' (pull columns), and 'pm' (pull merge).
These are 'px' (pull exchange), which works like 'pm', but instead
of leaving the contents of the delete buffer unchanged, exchanges
the cells in the delete buffer with those being overwritten; and
'pt' (pull transpose), which works like 'pm', but transposes the
rows and columns while pulling them into the spreadsheet. Also
added equivalent commands for use in macros: pull (pm), pullrows
(pr), pullcols (pc), pullxchg (px), and pulltp (pt).
-Fixed bug when inserting rows at the end of the scrolling portion
of a framed range, which caused formulas referencing the last cell
in the scrolling portion to reference the new last cell (in the
last newly added row) instead of the old one.
-Added a 'yankrow' and 'yankcol' command for macros, and 'yr' and
'yc' equivalents for the user, which work like /y, but work on
whole rows or columns instead of a range. 'yr' is limited to
the current framed range, if any, just like the other row commands.
-When deleting, yanking, etc., the upper left and lower right cells
of the range are allocated if they don't exist, so that pulling
them back in will always work correctly, even if all the cells
in one or more edges of the range being erased are empty. Pre-
viously, they might be offset due to the pullcells() function
using the minimum and maximum rows/columns of any cell in the delete
buffer to determine the range being pulled.
-The closecol() function now only takes one argument, since the
first argument was always curcol whenever the function was called.
-If the color option is the only one that has been changed, it
will still be saved in the file (the test was reversed).
-Cells may now be marked while in navigate mode.
-Can now 'goto' a cell, range, etc., while in navigate mode, without
losing the command line being entered.
-Added a |query command that allows a macro to display a question
or message and obtain information from the user.
-The 'run' command now frees up the space allocated to the command
string being run after it's through.
-Removed a '+1' from the coltoa() function because it was causing
the column returned to be off by one.
-Moved the gmyrow and gmycol variable assignments to the beginning
of the RealEvalOne() function so that @myrow and @mycol work not
only in numeric expressions, but also in string expressions.
-Two variables in screen.c seemed to serve the same purpose. These
were lastcol and lastcurcol. All occurrences of lastcurcol were
changed to lastcol to eliminate the redundancy, and lastcurrow
was changed to lastrow for consistency.
-Numeric arguments are now accepted in edit mode and navigate mode.
For now, the numeric argument must precede the whole command, rather
than come in the middle. For example, "3dw" works; "d3w" does not.
-The f, F, t, and T commands in edit mode now work properly even
if the cursor is currently on a character matching the one being
searched for.
-More bugs fixed in screen.c dealing with framed ranges, one which
was causing the row labels at the left of the screen to disagree
with the actual cells being shown under certain circumstances.
-Many more minor changes and bug fixes I've forgotten, and don't
have the time to figure out from the diffs.
CHANGES BETWEEN 7.7 and 7.8:
Chuck Martin
-Separated most of the code for framed ranges into its own file.
-Inserting, deleting, or appending rows while in a framed range
now only effects the framed range you're in. The old behavior
of inserting, deleting, or appending the row or rows all across
the whole spreadsheet is still the default behavior when done
outside of all framed ranges.
-Inserted columns are never hidden when created. Previously, the
hidden flag was copied from elsewhere, resulting in new columns
potentially being hidden for no apparent reason.
-Columns may now be inserted at the end of the scrolling region of
a framed range. Previously, they were added to the bottom of
the frame instead.
-Changed the behavior of the delete row/column (dr & dc), the
delete range (/x), and the delete cell (x) commands so that
subsequently pulling the deleted row/column/range into another
part of the spreadsheet will cause references to external cells
to continue to point to their original locations. References to
deleted cells show as "ERROR", but pulling the cells back in
restores the references.
-Implemented a "move range" (/m) command, which, unlike deleting
and pulling, will cause all cell references to move with the
range (both internal references to external cells and external
references to internal cells; see the man page for more informa-
tion).
-Implemented a "yank range" (/y) command, which copies a range
into the delete buffer without actually deleting it.
-The range-copy command (/c) may now be used without arguments,
or with only the destination specified. See the man page for
details.
-Implemented colors and color ranges, with the ability to base
foreground and background colors on a calculation or test, and
to set colors differently for negative numbers or cells with
errors. See man page for more information.
-Writing a file now gives a message telling what it's doing,
instead of only after it's done (useful for large files, so you
know it probably didn't lock up).
-The `, ', and * commands now work in navigate mode.
-The yn_ask() function in cmds.c now ignores anything except y, Y,
n, N, ESC, and ^G, instead of giving an error message and returning.