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 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816
|
REPORT BUGS TO kirkenda@cs.pdx.edu (STEVE KIRKENDALL)
NOTE: Each bug in this file is marked with either "*", "/", or "?".
The "*" means the bug is still pending. The "/" means that I believe it has
been solved. A "?" means that I've done some work on it, and *hope* it is
solved because it seems to work better but I never really understood what
was wrong in the first place. A "?" will become a "/" if I don't receive
more reports of that bug. About 80% of this file lists *fixed* bugs.
NOTE: Not all of these are truly bugs. This file also serves as my "to do"
list, so some items are just unimplemented features that sounded like a good
idea at one time or another.
-----------------------------------------------------------------------------
Fixed (or not) in version 2.1_4:
* Nested font changes don't always work correctly. For example,
"<strong><a href=foo>FOO!</a></strong> bar?" displays "bar?" in the
strong font. "<a href=foo><strong>Foo!</strong></a>" works though.
/ The built-in calculator's shell() function gives an ugly error message
if the safer option is set. It fails correctly; it simply looks ugly.
/ POSIX says that ^F/^B should leave two lines overlapping, not just one
/ POSIX says that $ should accept a count, and move forward (count-1) lines.
/ Executing ":do source somefile", where somefile contains an inner :while
loop, messes up the condition for the outer loop.
? The text-mode version of elvis sometimes has problems drawing characters
near the left edge of the window. Apparently it gets confused about where
the cursor is located.
I've seen this on some occasions, but I not recently. I've never
been able to reproduce it reliably. Perhaps it was a side-effect
of some other bug?
/ Under MS-DOS with TERM=nansi (and NANSI.SYS installed, of course) the screen
is shifted up one line. TERM=ansi works, but doesn't use nansi efficiently.
/ For gui="x11", if a window scrolls while some other window has pointer
focus, then the cursor isn't drawn. This is important when, e.g., you
use a dialog to search for text.
/ When the same buffer is shown in two windows, inserting text into one
window can cause the other to scroll. This seems to occur only when
the location of the change is above the top line of the other window.
Apparently what's happening is this: In a series of blank lines,
(i.e., lines which contain only a newline character), after any
character is inserted before line n, line n-1 has the same offset
than line n used to have, so the window update functions assume
that line n-1 is really still line n, so it shows line n-1 at the
top of the window instead of line n.
Probably the win->di->topline variable, which is currently a long
which stores an offset, should be replaced with a MARK. Since
MARKs are updated when a buffer changes, this should fix it.
* Given a URL such as "../untar.c", referenced from "/pub/elvis/unreleased",
elvis 2.1_3 tries to fetch "/pub/elvis/unreleased/../untar.c", but it *MUST*
be normalized as "/pub/elvis/untar.c" -- i.e., delete instances of "dir/../".
Some web servers depend on this.
? In "html" mode, if a single displayed line contains more than one link,
elvis always seems to follow the *last* link regardless of which one you
click on. This is bad for some menu bars.
Actually, this only seems to occur when multiple images appear
on a line, and you want to download one of the images. For
real links, elvis works correctly.
I took a stab at fixing this one. It seems better now.
? There appears to be a bug in scanning -- a scanned block is not necessarily
being locked for the whole time that it should be, which means that it may
be removed from the block cache, in which case NULL may be returned by some
of the blkXXXX() functions. Also, on at least one occasion elvis appeared
to be trying to free a block which wasn't allocated.
This may have something to do with the FEATURE_LITRE feature, or my
recent attempts to make searches run faster by keeping at least one
scan context for the current location at all times.
The FEATURE_LITRE bug is fixed; hopefully that fixes this too.
* There are still problems with running external programs under Win32.
The :make command doesn't work. Also, the screen is sometimes messed up
after running a program.
I switched back to the older, more complex version of oswin32/osprg.c.
The only problem it has is that sometimes 16-bit filter programs don't
work correctly... but I just tested it again and that seems to work
now. Anyway, 16-bit filters are less important than :make, so I'm
keeping the older version.
/ When viewing an HTML document at a URL such as "http://foo/bar.html?boo/far",
containing a link to "zot.html", elvis will resolve that link to be to
"http://foo/bar.html?boo/zot.html", but it should be "http://foo/zot.html".
Similarly, I suspect that fileext() fails on URLs like that.
/ Hitting ^] on an operator doesn't search for an "operatorXX" tag? I
thought it did.
It appears to work now. I don't know why it didn't work before.
/ The alias.c program (which is compiled as vi.exe, ex.exe, and view.exe)
has been reported to cause problems under WindowsNT, and more recently
under Windows98 as well.
It appears that a Microsoft has introduced a bug into their versions
of the "exec" system calls. I switched to "spawn", which waits a
little RAM but seems to work correctly.
/ Under Windows95/98/NT, the "Terminal" font has funny spacing and sometimes
characters overlap each other.
This is a bug in the font, not in elvis. Elvis only supports
fixed-pitch fonts, and although "Terminal" claims to be fixed-pitch,
it is really a variable-pitch font.
/ Control chars in an alias aren't displayed in a printable form by the
:alias command. ":alias clean s/.^H//g" looks like "alias clean s///g".
/ Add VIM's "smarttab" option -- <Tab> keys at the beginning of a line act
like ^T, so they indent by the shiftwidth amount using a combination of
tabs and spaces. <Tab> keys elsewhere in a line are real tabs.
/ One user reported that elvis was sensitive to keystrokes during quitting.
I suspect that gui->poll was being called while the file was being written
(possibly just when written via FTP). That write should not be quittable.
------------------------------------------------------------------------------
Fixed in 2.1_3
/ One user reported crashes in WinElvis when the "Options->syntax" menu item
is activated while in "syntax" display mode.
/ Can't identify tags whose whose contains a new-style comment. Apparently
the tag-selector can't parse \/\/ in an regular expression.
/ Make elvis assume "-Gopen" if termcap can't be used.
? The :make command is still slightly weird. "elvis +make" waits until after
a keystroke to display the first error message.
/ Document the ftp://host/~user/resource URL notation.
/ The :mark command should save the column number as well as the line number.
(I.e., if no explicit address was given, then use the cursor position instead
of the start of the cursor's line.)
/ Add a :cbshow alias which displays cut buffers. To do this right, elvis
will need a text() function for fetching text lines...
text() return the current line of the current buffer
text(n) return line #n of the current buffer
text(b,n) return line #n of buffer (b)
/ ":map ^H visual X" doesn't work when the cursor is at the end of the line.
It deletes the last character, but then moves the cursor back two characters
instead of just one.
/ Assertion fails at buffer.c:1206 when attempting to write an empty buffer.
? dmmarkup.c:1066: htmlinit: Assertion `first == True && col == 0' failed.
/ "Dead keys" don't work in "x11" gui.
/ If the .elvisrc file contains "set wrapmargin=0" then that option is
displayed by a later ":set" command. It shouldn't be.
This is a complication arising from the fact that wrapmargin is
actually implemented via the textwidth option. Wrapmargin doesn't
exist until a buffer is shown in a window, but defaults are normally
recorded before that.
/ If there is no tags file in the current directory and inputtab=tagname
then there is a long delay each time <Tab> is hit.
/ Is this a good time to fix the bug where :make outputs the first error
message *before* prompting the user to hit <Enter>, when it should be after?
/ Add a "howto" describing Perl's error messages.
/ The "noanyerror" option shouldn't prevent the cursor from moving into locked
files in the current directory -- only unwritables in some other directory.
/ It's back: Sometimes in "man" mode the cursor can't move up. This appears
to happen only for .IP or .TP commands with long labels. I should probably
change that code anyway, so the labels are considered to be separate lines
in that situation.
/ It would be nice if FTP URLs supported user names as in ftp:host/~user/...
in addition to just ftp:host/~/... When a user name is specified, the
~/.netrc file is searched for an account at that host which has that login
name; the password is then taken from that entry.
? More importantly, it has been reported that the Windows versions don't
read "elvis.ftp" correctly. (It works under Unix; I've tested it.)
This appears to work under Win32, as far as I can tell. Perhaps
the user who reported it didn't have "elvis.ftp" in a directory
where elvis could find it? Or maybe the other changes I made to
that file (to support ~user) had the side-effect of fixing this?
/ Add support for backticks in filenames -- the text between backticks is
interpreted as a shell command, and the command's first line of output
is substituted into the line.
The main reason for supporting backticks is to do things like
":n `grep -l sometext *.c`". The backtick expression would return
multiple file names. Because of this, it must be done at a fairly
high level in the ex command-line parser.
It would also be handy to have a "shell" function which runs a
command string and returns its output. That function would be
handy when implementing backtick support, and could also be used
for things like...
:let d=shell("date")
/ Under Win32, can't always redirect an external program's stdin. For example,
":%!\windows\command\sort" fails, but ":%!\usr\bin\sort" works.
This is ridiculously difficult. I/O redirection depends on whether
the program being run is 16-bit or 32-bit, whether you're running
it from WinElvis or elvis, whether you're running Win95/98 or
WinNT, and... something else that I haven't figured out yet.
I give up. Instead of trying to do it the efficient way (with
pipes when possible, and always using Win32 stdio redirection
facilities), I decided to rewrite it from scratch to do it the
brain-dead way: By constructing a shell script, and invoking
COMMAND.COM to run that script. This sucks, but it appears to
work reliably.
? On some systems, elvis sometimes reports "# is illegal during initialization"
and then it skips some initialization steps for the first file. Later files
will be initialized correctly; it only affects the first file. This has been
reported under SCO and (I think) Irix. Unfortunately, it seems to interfere
with the "-VVV" vebose feedback.
I've improved error messages -- they now include the filename and
line number where the problem was detected. Hopefully that'll allow
me to get a little more feedback.
I just tried the newest code under SCO, and this didn't happen.
It worked fine. This is definitely a change in its behavior, and
that's good... but I wish I knew why it started, and why it may
have stopped.
/ Add a "digraph" topic to the howto file, and improve the documentation of
digraphs in the main manual.
/ Lose the "tagprgonce" option; the :local command offers a cleaner solution.
You can just say "local tagprg=..." in the alias, and be done with it.
/ The [[ and ]] commands shouldn't be line-mode moves. I.e., from the middle
of a line, d]] should not delete the entire current line.
/ When a character-mode deletion ends at a newline, that newline should not
be deleted. The same goes for yanking.
? The tagprg option (or something similar) should be used when reading tags
for tag name completion. Apparently it isn't.
Actually I think it is, but maybe not quite correctly. The code
assumes the typed part of the tag name is always going to match the
initial part of each match. If the tagprg program doesn't do that,
then name completion gets confused. Changing this behavior will be
hard.
/ In a shell command, file name completion should match binary files.
/ After a repeated insert such as 25i*<Esc>, typing <.> will only repeat 24
insertions, not 25.
------------------------------------------------------------------------------
ELvis 2.1, official released version
/ Some HTTP sites require a "Host:" line in the GET request. The argument
to "Host:" is the site name and port of the URL elvis is trying to download.
/ Check for licensing wordage in manual or README file.
/ In the "configure" script, xinc is set to /usr/include/X11, when it should
be set to /usr/include.
? Under WinNT 4.0sp3, the "vi.exe" and "ex.exe" commands have been reported
to cause problems. Input doesn't work right, and the whole DOS window
goes away when elvis exits.
/ In macros, !(.)% should work but doesn't.
? Elvis has been reported to run out of memory when reading a large LaTeX
file -- "http://www.loria.fr/services/tex/general/latex2e.html", although
it isn't clear whether elvis is reading it via the net, or from a local
file.
It worked for me. The user didn't report what OS he's using.
I suspect he's running the DOS version, in which case it isn't
surprising that he's running out of memory (even with Win32 on
a 64meg Pentium).
/ Change the default configuration to load lib/exalias.eg if there is no
custom version in the user's home directory. Maybe rename it to
"elvis.ali" or something like that.
/ Add an "lpheader" option, and modify dmnormal.c:header() to use it instead
of the "lplines" option.
/ :s/re/cmd/x sets the cursor to the wrong line -- cmd should run on the line
where re was found, but it is incorrectly running on the following line.
/ With textwidth set, if the first line of a file contains no whitespace
and extends past the textwidth column, elvis dumps core.
/ Aliases tend to step on each other's use of options. Many macros temporarily
set report=0 to avoid chatter while the alias runs. To restore it, they save
the old value in the "r" option, and copy it back afterward. If if one alias
calls another and they both do "let r=report", then the original value of
"report" is lost. This is one specific example of a larger problem: aliases
need local options.
I've added a ":local" command. It is like ":set", except that it
saves the old values of any options on a stack, so they can be
automatically restored when the alias exits. Also, ":local" never
outputs any options; this allows you to mark an option as being local
without immediately changing its value.
/ Both "x11" and "windows" have an option named "toolbar". It behaves the
same on both. Soon they'll both have "statusbar". They already had
"scrollbar" but I changed the name of the X version since they behaved
differently. I should try to unify this somehow -- both in the program
and in the manual.
/ The ":gui ~Label" notation for deleting a button doesn't work, but the
postfix ":gui Label~" version does.
/ It would be nice if "gui <label>" would output all info about the given
button, under X11.
/ The "tex" mode needs some work, especially for \xxx{text} notation.
Several common fonts are not supported, including \code{text}.
/ Aliases can't run during initialization? Remove that restriction.
/ For gui="x11", cutting & pasting (between applications) large amounts
of text doesn't seem to work. The text gets jumbled up.
/ Write a "howto" file, and an alias to access it.
/ In an empty buffer, search commands seem to get stuck in an infinite loop.
/ The "inputtab=identifier" code should avoid looking up matches when the
word is a keyword. When I type "int<Tab>i;", I don't want to get
"intlmsgi;"
/ Add support for cygwin (GNU utilities and API under Windows). The only
unusual things are 1) it needs the local inet_aton() function even though
that function is declared in a header, and 2) It doesn't seem to open files
in binary mode. It should, both for session files and for (non-binary)
text I/O.
/ On some Linux systems, the variable name "restrict" in tagelvis.c seems to
clash with a header symbol. Changing it to "rest" avoids that.
/ Core dump from io.c:564 when bufdefault is NULL.
/ When abbreviations are expanded via the <Tab> key, elvis inserts a newline
after the expanded form, instead of the tab.
/ Apparently ":try s/foo/bar/" doesn't turn off the the "then" flag when the
substitution fails.
/ Some QNX problems:
/ <sys/select.h> isn't included by every file that needs it.
/ ftpperms is defined in two places. (Lacks "extern" in header file.)
/ inst*.sh files don't return a good exit code, which interferes with
"make". Add "exit 0" to the end of each script.
--------------------------------------------------------------------------
Fixed in 2.1j-beta....
/ File name completion doesn't always work on directory names, when the
completebinary option is off.
/ It would be nice if, when listing multiple matches, filename completion
would leave off the directory path. That way more matches would fit on
a single line.
/ It would be nice if <Tab> completed tag names when editing normal source
code. That would save you a lot of typing if you like long identifiers.
/ On HP, "configure --with-gcc" isn't honored -- it still uses "cc -Ae".
Also, HP (and probably some other platforms) expect main() to return
an int, not void.
/ If "elvis.arf" executes a :s///x command, then the window doesn't realize
that the buffer has changed so it doesn't set the display mode accordingly.
This shows up when you're editing non-HTML text, and do "e url" where
"url" is a URL or file which doesn't end with ".html", but which does
contain HTML text -- the buffer's bufdisplay option gets set correctly,
but the window isn't switched to html mode.
/ The "alias.c" file can be compiled for Win32 and OS/2, which may be
handy for some people. To eliminate warnings, it needs <stdlib.h>
and <process.h>. Also, there's a "pid" variable which isn't used.
Some shells don't pass the program name in argv[0] so we need to
handle that -- probably compile it with a -Dxxx to make it default
to "ex", "vi", or "view".
/ File name completion should be case-insensitive on non-Unix systems.
/ The command "elvis -i" (with no file name) creates a buffer which
doesn't contain any text.
/ From some URLs, a reference to a full pathname generates an error message
about an "unknown site" or something like that. For example, from
http://www.fh-wedel.de, try following the "English pages" link.
/ After ":se report=1", hitting x says "1 line yanked". Need to make
reporting sensitive to the partiallastline option.
/ Make elvis.arf strip off the perl version number from #!/usr/bin/perl-XXXX
lines. This makes syntax easier to recognize.
-------------
* If xcurses exists, it should probably be used in preference to curses.
(This would be a change to the "configure" script.)
? Elvis gets confused if you load a URL which has no filename component,
such as "http://www.yahoo.com". Adding a trailing slash avoids that.
/ Document the meaning of "!" for each ex command.
/ If a :tag fails because the current file has been modified, then that tag
is still deleted from the list so ":w|tag" doesn't work.
/ Add ~/.exalias to the distribution. Maybe extend it with a few other
useful aliases such as "courier", "copying", "rm".
/ When an href in a remote web page contains just a file name elvis tends
to mangle it. From ftp://ftp.cs.pdx.edu/pub/elvis/unreleased/README.html,
<A HREF="/pub/elvis/untar.c"> is treated (under Unix anyway) as a reference
to ftp://ftp.cs.pdx.edu//ub/elvis/unreleased/pub/elvis/untar.c
/ Got stuck in an infinite loop when doing =} at the end of the buffer.
There was no blank line at the end of the buffer. The bug seems to
occur after the buffer has been changed, when elvis is trying to update
the screen.
This appears to be a reliable way to duplicate the same big
session file bug I've been tracking for months! At last!
It goes away when LINECACHE is #defined to be 0. Apparently
the cacheing in lowoffset() is broken.
/ Can't search for 0x00 bytes. /^X00^M doesn't work.
Added \0 for matching NUL bytes.
/ Trouble with the :& and :~ commands:
/ They are supposed to discard any flags from the original :s command,
and accept new flags. (This implies that the visual ~ command also
discards the old flags.)
/ :& should always use the regexp from the previous :s command, but
:~ should use the most recent regexp used in any context.
/ :s with no args should act like :&
/ Also, the count isn't supposed to be an instance specifier, it is
supposed to be the quantity of lines to scan. (The current instance
specifier is handy, though, so invent a new notation for it -- perhaps
a number after a '.' could be an instance.)
/ Add 'c' flag. This will require the creation of a new edit mode which
searches forward for next match within a range of lines, moves the
cursor there, highlights it, and waits for a keystroke. <Esc> exits
that mode; <y> replaces and moves on, anything else moves on without
replacing.
/ The print flags don't work.
/ global subst for a zero-length regexp doensn't work.
/ If a match is found at the start of the first line for a :s///c command,
the cursor is displayed in the wrong location.
/ "confirm" doesn't work right in ex mode -- only in vi mode.
Modify it to use the same state-insertion technique as visual-mode,
and also make it exit ex mode. The subst structure should be
extended to have a flag which indicates whether it should revert
ex mode when the last substitution is complete. To revert, it
should replace the "confirm" state with either the old "ex" state
or a new one.
/ check for memory leaks
/ Add an alias() function, which tests for the existence of an alias with a
given name. Modify the default elvis.[ab][rw]f files to check for an alias
and use that if it exists. This will make customization easier.
/ When using <a name=...>...</a> to define a name anchor, elvis shouldn't
display the anchor's text like an href link.
/ In "man" mode, blank lines should not affect indentation. I.e., they
should be interpreted as ".sp", not ".LP". Exception: If the blank
lines are followed by any "." command which causes a line break, then
ignore the blank lines.
Also, for readonly files it should allow any number of args to a .BI
command (or similar commands).
/ In "tex" mode, } should restore the current font to the stored font
(which it does in 2.1i) and then set the stored font to "normal" (which
is new). This will help it handle embedded {...} pairs better.
/ The autowrite option is too eager. After :e thisfile, :sp, :e otherfile,
elvis writes thisfile even though it is still visible in the first window.
/ Add the PERL "Artistic License" to the distribution. Earlier I'd
announced plans to distribute elvis under both the old agreement and
the GPL, but the Artistic License does pretty much what I wanted.
/ In macros and aliases, the current buffer and the current line within
the buffer are not changing as one would expect. This makes macros
much harder to write than they should be.
/ ":let x=TERM" causes a core dump.
/ With Sun + fvwm + -Gx11 + ":set warpback", the pointer is warped back to
the xterm's scrollbar when you exit. This is unfortunate because Sun's
xterm's scrollbar eats keystrokes. The pointer should be warped back
to the middle of the top edge of the window.
/ Add an example of command-line editing to the manual.
/ Under DOS and Win32, the ctags program doesn't work. It doesn't seem to
accept lowercase letters at the start of a word.
/ There's a problem with file name completion. When nocompletebinary,
if the only match is a binary file then it backspaces over the file name.
/ Problem with "ref" program -- it doesn't seem to handle "file:" correctly.
/ In "tex" mode, a % on a line by itelf causes the following line to be
ignored. It shouldn't! Also, \' should be displayed as \', not just '.
/ Option value completion: If while entering an ex command, the user
types something like ":se kp=<TAB>" then elvis should insert the
current value of the "kp" option. The user can then edit it.
/ For Option value completion, need to insert a backslash before each
'|' character, because '|' normally marks the end of the command.
NOTE: Check whether this is done for :mkexrc -- it should be!
? The "windows" GUI needs to insert backslashes before '(', ')', and '$'.
Look for addquotes() in guiwin32/gw{cmd,msg}.c
/ Bug in :calc (filename " " (333 * 100 / 400)) >> 58
This appears to be due to a quirk of the concatenation notation.
Since there is no explicit concatenation operator, it's difficult
to assign it a precedence level.
/ Maybe support name completion for tags?
/ If "showtag" is set, and the tags file is out of date, then you get a
bunch of "no match" messages for the tags that it can't find.
/ On an empty buffer, it still says "partial last line". That flag shouldn't
be set for new, empty buffers.
/ Need to be able to create new files on FTP sites. (And if you can do
that, then update the manual too.) It would also be nice to have a
better way to detect directories.
I have been unable to find any FTP protocol commands for testing
the attributes/existence of a file. So I'll need to abuse other
commands and make some guesses.
To test whether a name is a directory, I can try to "cd" into it.
Elvis always uses full pathnames for FTP access, so the current
directory doesn't matter. But if I can "cd" into it then it must
be a directory; else it either doesn't exist, or is unreadable, or
is something other than a directory -- hopefully a normal file.
To test for the existence of a file, I should probably try to read
it; if the read process starts okay, then I can abort it and know
that the file exists; otherwise it is unreadable, not a file, or
doesn't exist... and in all of those situations I should assume it
is a new file.
If I know it exists and is a file, then I can test for writability
by attempting to append to it. If the APND command can be started
correctly, then shut it down without actually appending anything and
make note that the file is writable; else it is read-only.
/ In replacement text, \^M should be a literal carriage return character,
not a newline.
/ In the "man" display mode, 2 or more consecutive newlines (i.e., one or
more blank lines) should act like a ".PP" command.
/ In the "man" display mode, add .TS and .TE -- like .nf and .fi, except
that .TS has the added quirk of hiding the following line. This will
allow elvis to display tables, sort of.
/ The buffers created when reading a directory, browsing, etc., should be
marked as "readonly". Without this, it is too easy to get a "Hit ^Wd
to see source" message.
/ Should :@@ execute the anonymous buffer? Elvis has trouble parsing it,
and after that it executes the same buffer as was most recently used.
/ It should be possible to edit cut buffers, particularly so you can edit
@ macros. To do this, I'll need to make sure a cut buffer doesn't get
yanked into itself. It would also be nice if the line/char/rect status
wasn't embedded in the buffer's text (make a new "putstyle" option).
/ Problems in untar.c? Reported to fail on some archives.
Walter Briscoe figured this one out for me. I was altering
a block in the sliding window, when that block was interpretted
as a tar header.
/ A little bit of name caching would be a big help for network name lookup.
/ Filename completion really needs work.
/ At the very least, it should exclude '<' and '>' from the list of
characters that can appear in a file name.
/ It shouldn't be *too* hard to make a parser which guesses whether
filename completion makes sense in the current context.
/ It might be a good idea to make filename completion be disablable via
#undef FEATURE_FILENAME.
/ Another nice addition would be to make it ignore binary files.
? :make can't parse AIX error messages, which look like this...
"cfunc.c", line 511.38: 1506-045 (S) Undeclared identifier incase.
I suspect the ".38" column number is tripping it up. It would also be
nice to ignore the "1506-045 (S)" garbage.
That's almost certainly the right diagnosis. When elvis divides an
error message into words, it permits '.' characters in those words.
But it didn't allow '.' in a number, so "511.38" was perceived as
garbage. I changed the allowable number format to permit '.'.
/ The autoselect option is broken. If set in .exrc, then it is reset the
first time you give a search command.
This is an unexpected consequence of changing the definition of
"explicitly set options". To fix it, I'll need to add a static
variable in search.c, and set the variable to True if 'v', to False
if 'n', and to the value of autoselect if neither 'v' nor 'n' is
given. Then use that variable in place of the autoselect option,
when a search successfully finds a match.
? Problem with .exrc scripts (and other scripts too) -- :map lines frequently
end with a ^M character. Since this ^M appears immediately before the LF
that marks the end of the line, it looks like a CR-LF pair and so the file
may be seen as a DOS text file. When interpretted on a DOS/Windows platform,
the ^M will be deleted. It also messes up editing of the script on any
platform.
I changed the way the fileeol() function recognizes file types.
If the first 100 bytes of the file contains at least one instance
of a LF which isn't preceded by a CR, then the file is assumed to
be a Unix text file. This should allow Unix .exrc scripts to be
edited on a DOS/Windows system.
To actually execute them, they should be converted to DOS/Windows
format. That way, when a map command ends with ^M, the line that
it's on will end with CR CR LF, which will be handled properly by
elvis.
/ Options aren't locked by "safer". Some should be, including "safer"
itself. How long has this security hole been there?
/ Really need a way to queue up messages. Add :message, :warning, :error.
? When GCC is used under HP, don't use the "-Ae" flag. The normal "cc"
compiler doesn't work under HP.
I suspect this was due to some new-style function declarations
that were in 2.1i. These have been fixed, so HP's "cc" should work
now. "cc" is preferable to GCC on HPs because "cc" supports shared
libraries.
* Two ^Cs in sequence can kill elvis. (OS-dependent)
* The X11 interface should support backtabs, for moving backward through
links in an HTML file. Map <ISO_Left_Tab> to... what? ^K and ^_ are
available. If I add vim-style g commands, then <g><Tab> would make sense.
Is there a termcap/terminfo field for describing backtabs?
* Can't run a shell command in the background under X11, because elvis waits
for an EOF condition on its stdout/stderr. Should something be done about
that? (You can do it if you redirect the program's stdout and stderr.)
Maybe make the x11 prgopen() wrapper check for a '&' command, and
force "willread" to False in that situation. But then prgread()
would need to be smarter, or something.
* After <Shift-K>, the window's wantcol value is messed up -- if you type
<Shift-K><j>, the cursor will move to the first character on the following
line, instead of staying in the same column. (This may affect all external
commands -- test it!)
This only affects <Shift-K>, and even then only in some situations.
The column that it moves to varies. I wasted a whole day trying
to figure this one out, with little success. It seems to have
something to do with the copies of wantcol that are stored in
the state stack.
* ":set global?" scrolls off the top of the screen. Something should be done
about that.
The fix will probably have to wait until "shell windows" are
supported. They'll allow you to scroll back through the output,
like an xterm window.
* Under MS-DOS, "-o file" can cause a NULL dereference. File permissions?
Or memory limitations? I looked through the code and it appears to
be correct. It is simple enough that it I don't think there could
be any subtle bugs in it.
* Big clues on why sometimes session files can't be recovered:
> This may be interesting. I will pursue it if given instructions.
>
> I got a GPF on a telnet session in which I was running elvis.
> `elvis -r` got "blkread failed". The read failed with errno set to
> 22 which is a singularly unhelpful EINVAL.
Probably the EINVAL was left over from some earlier system call, so we
can ignore it.
blkread() failed because it was asked to read a non-existent block
number. Block 29474 would be at offset 60362752, but the session
file you're recovering is only 344064 bytes long. So the read() in
blkread() returned 0 bytes, which would not affect errno.
> I infer there is a window of time during which a session file is
> not clean. I don't understand the details of this and don't feel
> like deducing them. What do you want to be done?
Apparently elvis needs to inspect the session's low-level buffers more
carefully before restoring them. In your session file, there is a
low-level buffer (at block 52) which contains a reference to a bogus
block number, and that's preventing you from restarting elvis to
recover the other buffers in that session file.
As I recall, the most common source of bogus block numbers was when
a blklist block was reused as some other type of block. I suspect
that in your session file, the buffer at block 52 was freed, along
with its blklist blocks, but the superblock was never flushed after
that. And the blklist block was recycled as a chars block for
some other buffer, and that *was* flushed. (Block numbers are
two bytes long, and 29474's bytes are '"' and 's').
So probably in addition to making recovery stricter (so it can ignore
bad buffers), elvis should also probably flush the superblock
immediately after freeing a buffer so that this particular type of
bad buffer can't occur.
(Yes, I am going to save a copy of this response for myself.)
/ :mkexrc doesn't insert enough ^Vs in front of Esc characters.
/ Under X11, trouble with "-fn -sony...." argument. I think the "-f logfile"
option is causing problems.
Changed to "-o logfile". Sadly, "-o" *MUST* be handled before
the GUI initializes itself, so that we can log problems that
occur then.
/ With no address := should report the total number of lines.
/ In replacement text, \U and \L should affect literal text as well as
& and \1 ... \9.
? :N, :previous, and :rewind don't work at the end of the args list.
Apparently they check the wrong end of the args list.
Unable to reproduce this one.
/ In "untar.c", the typedefs are apparently clashing with similar typedefs in
<stdio.h>, on some systems. Change the names of those types in untar.c.
/ Check the manual for typos!
/ Need to add NEED_MEMMOVE, and use it for older SunOS.
/ The "man" display mode doesn't handle long section names. At the very least
it should truncate them!
/ To compile elvis under Solaris2 with "cc" (not "gcc"), you need to add
"-Dconst=" to the value of the CC macro in Makefile.
* In WinElvis, the "windows" lptype is counter-intuitive. It changes the
lplines and lpcolumn options to correspond to the font size and paper size.
This is the opposite from the "ps" and "ps2" lptypes, which change the
font size to squeeze lplines by lpcolumns characters on a page.
/ The sesclose() function shouldn't attempt I/O on the session file unless
the session file has been successfully opened. Currently, elvis can get
stuck in an endless loop giving fatal error messages if you set SESSIONPATH
to a bad value.
? Sometimes crashes after running multiple external commands. Particularly
noticible with :make, but I think it affects all external programs.
Reported under Linux.
I used to be able to reproduce this easily, but now I can't. Either
some other change fixed this or changed its symptoms, or I just forgot
how to reproduce it.
? A core dump has been reported while entering a ":x" command. The dump
apparently occurred inside the mapdo() function after most of the local
variables got scrambled.
This may be a variation of the "crash after running an external
program" bug. The :x command can save the file, and if the backup
option is set, then elvis runs "cp" or "copy", depending on the OS.
In addition, a potential bug in the termcap interface was fixed.
? Some crashes/hangs have been reported under Linux. These may have something
to do with <u> and <Shift-U> commands. Usually there are no clues, but at
least twice the buffer filled with ^@ characters. Reported by Steve Woodard,
woodard@kodakr.kodak.com
I enabled assert() checking and allocation debugging, and played
around with those commands hundreds of times without being able to
reproduce it. It may be compiler- or OS-dependent.
1/20: It happened to me while I was just editing a plain old text file.
One of the numbered cut buffers' bufinfo blocks was recycled as a text
block, and that cause blkread to fail as it tried to find a bogus
blklist block.
This happened to me again, shortly after a <Shift-U>. Definitely a
problem there. I've inspected the code though (bufundo() in buffer.c)
and it seems correct.
* The "ref" program doesn't understand compound tag addresses, such as
bar foo.h /^struct foo$/;/^ int bar;$/;" struct:foo
* The "ref" program should be modified to support "./tags". In fact, does
it even support "tags" (file name instead of directory name)?
How can it support "./tags" when ref doesn't know which file you're
editing? To do this right, I'd probably need to add a "-f fromfile"
option.
* The value of the blkcache option can have a *HUGE* effect on the speed of
elvis. Why should a large cache be necessary? A macro may crawl when
blkcache=150, and fly when blkcache=200.
* An ex search command (:/foo) doesn't highlight text when autoselect is true.
This is unfortunate, because the X11 [Search] button uses that command.
* Problems with the "ctags" program:
1) `extern "C"' seems to confuse it a lot.
2) It doesn't know that #defines can't be in a class.
3) A predeclaration of a class name (e.g., "class MyClass;") generates a
tag but shouldn't.
4) Bodies of class declarations aren't scanned but should be (with all
generated tags being declared as being in that class).
And could enum values maybe be detected as part of the same fix?
5) C++ destructors (e.g., ~MyClass(void)) aren't found.
* Modify "elvis.ps" to sense the paper size automatically. Replace "lppaper"
with a list of driver-specific options; for PS, this should include frame,
bar, punch, clipboard, font, and tray. (The frame, bar, and punch options
are already implemented, but you need to edit elvis.ps to change them.)
* Under X11, if you replace the controlfont with another of the same height,
elvis doesn't redraw the toolbar. Labels don't fit in the buttons anymore!
* Under X11, if a dialog has a locked field which is wider than a normal string
field, it is shifted. This is bad, because locked fields have no cursor so
there is no way to shift it back again. Also, the overall dialog width is
chosen with the assumption that the whole locked field is visible.
* Problem: The "squid" HTTP proxy, when handling an FTP request to read a
directory, returns an HTML document similar to Elvis' own format, but
it uses relative file names in a weird way. I suspect squid's method is
incompatible with that used in "index.html" files on some FTP sites
such as ftp://sunsite.unc.edu/pub/Linux/!INDEX.html, so this is probably
really a squid bug, but I need to check.
/ Some FTP servers make non-existent files look like directories.
Specifically, the SIZE command returns "550-Argument is not a plain file".
Need a better way to detect non-existent files.
/ If the cursor is past the end of the buffer, then it looks weird. This
could be fixed by adding a "virtual" newline to the end of a file which
doesn't end with a real one.
* If you use the scrollbar to scroll to the bottom of a large file in html,
man, or hex mode, then when you reach the very end of the file (where you
would expect see no part of the file, just ~'s) it jumps back so the window
is completely filled with lines from the file.
* The "hex" display mode does strange things to 0x0a characters. Those quirks
are hard to eliminate, because that's the newline character and several
commands are sensitive to newlines. But eventually something should be done.
* In the "syntax" display mode, if a multi-line comment ends on the last
character of the line just above the top of the window, and the comment
ender string is one character long (which happens in Pascal, but not C),
then elvis assumes that the top line of the window is a continuation of
that comment.
* Ex command-line history is very weird. If you recall an earlier command
and edit it, you're actually editing the historic version. I would prefer
to have a new copy of that line created at the end of the history buffer,
and have the editing take place on that new copy.
The same thing happens with regular-expression history, and filter-program
history.
* elvis's prompt cannot be answered from a keyboard map, an
example (simplified and therefore useless):
:map #1 :!more %^M^M
the second ^M should answer elvis's prompt, that occurs after
the shell escape, automatically (only for convenience, because
`more' has its own prompt), but this doesn't work: I have to
press <Return> manually - but then elvis recognizes the ^M - and
moves the cursor one line down (to my surprise: if I map a
single character to any key I can use this key to answer the
prompt!)
* In the installation routine, create links named "vi", "ex", and "view".
Similarly, supply .BAT files or something for Win32.
* Ctags doesn't produce "Mfilename" tags for main() functions in filename.c
* Sometimes text changes as you move the cursor over it in HTML mode. This
has also been reported in Hex mode, but I wasn't able to reproduce that, and
it could easily have been a configuration problem anyway. (:set nonascii=...)
-------------------------------------------------------------------------------
? Under X11, elvis was reported to get stuck in a loop while trying to step
through the toolbar buttons in the x_tb_predict() function.
It looks like there was only one button in the toolbar, and the
buttons are organized in a circular list. They shouldn't be a
circular list! How could that happen?
This may have some indirect relationship to the way that the default
geometry is parsed. The system where this was reported had a
geometry string that looked like "80x25+130" -- with no "+Y" value.
? Trouble decoding URL-encoded addresses? Compare elvis' code to that of
VFY. Also compare the osnet.c file to the VFY's code.
? Sometimes the X11 interface refuses to give up keyboard focus. I've seen
this *VERY RARELY* with FVWM under Linux. It has also been reported under
OLVWM, and is supposed to be very common under TWM. I suspect there is a
race condition, perhaps because elvis (or something else?) isn't including
a timestamp on a request?
Hopefully this was a side-effect of the bug which caused elvis to
request an invalid window size (width != basewidth + integer * inc).
That bug caused elvis and the window manager to fight about window
sizes (and thus burn a lot of CPU cycles!) which may have lead the
window manager to treat elvis windows differently.
? Does elvis handle ^M in macros differently than the standard vi?
MS-DOS handles them differently than the standard Unix. I suspect
that's the main problem. Elvis should try to avoid dependencies
like that, though; perhaps ":source" should always read ex scripts
in "unix" mode?
? In the Win32/console version, the handling of the "dead" keys (^, ' and `)
is wrong, they produce three characters, for instance ^<space> inserts #)^
/ the read command omits the message 'read x lines' in some
circumstances, one case that I can reproduce:
call elvis for a new (empty) file, then do
:r !echo "abc\ndef"
twice
I couldnt reproduce this here. Hopefully that means it is fixed,
but I doubt it.
/ In lib/elvis.bwf, the Win32 copy command doesn't like the ">NUL".
Unable to verify this bug; it works for me. I have made a few small
changes to osprg.c, but as far as I can tell, it should also have
worked before those changes. From the description of this bug, it
sounds like ">NUL" was being passed to COPY.EXE as an argument.
/ A URL with empty parameters ("http://localhost/sample.html?") has been
reported to cause core dumps. I was unable to reproduce this myself.
It is possible that some other change that I made to the code has fixed
this.
Could not reproduce this.
/ Elvis got hung on a slow machine running X11. The cursor continued to blink,
but elvis didn't respond to any events, including Expose or KeyPress events.
Unable to reproduce this.
/ These commands, taken from elvis.brf, cause a trap under NT:
> I suppose you could make "elvis.brf" check the file's write permissions,
> and check it out if it is read-only. The following UNTESTED lines should
> do the job:
>
> if dirperm(filename) == "readonly"
> then !co -l %
> if dirperm(filename) == "readwrite"
> then set noreadonly
Worked for me. (Actually, I used "then !attr -r %" since I don't
have RCS for Win32.)
/ The NT console port throws away any characters that the user types into
the console window before elvis creates its own console buffer. Ideally
it shouldn't do that.
I don't think it does. It can be hard to tell, since (on my NT system
at least) elvis creates its console buffer after only a second or so.
But it looks like it works, and if the SetConsoleMode() functions do
clobber the typeahead buffer, I'm not sure how to tell it not to do
that.
/ A long (>255 chars) error message from a compiler caused elvis to dump core.
This was while running :make, of course.
There's no obvious reason for this to happen. All of the buffers for
holding parsed parts of the error message are dynamically allocated
and grow when necessary. Perhaps the msg() command caused calc.c's
buffer to overflow?
This was actually reported for 2.0, not 2.1. I was able to reproduce
it under 2.0 but not 2.1, so I'll assume it was fixed somewhere along
the way.
-------------------------------------------------------------------------------
/ Change version to "2.1i-beta".
/ The "-b blksize" option doesn't verify that the requested size is a power
of 2. It must!
/ The command "elvis -Gquit -cq -b16384" causes a core dump.
Actually, anything that generated a non-fatal, non-status message
was causing core dumps when elvis was invoked with the "quit" or
"script" user interfaces.
/ It would be nice if regexp character classes allowed extra characters after
the :alnum: or whatever. E.g., /[:alpha:_][:alnum:_]*/ find C identifiers.
MORE IMPORTANTLY, did I really implement the right syntax? The POSIX specs
could be interpretted as meaning that you need an extra set of brackets
around the named classes.
Apparently POSIX does require an extra set of brackets, as in
/[[:alpha:]_][[:alnum:]_]*/ for matching C identifiers. I've changed
elvis' regexp code, and the lib/elvisre.html documentation file.
/ The visual / command doesn't allow / in a character class. In fact, it
appears that *all* regular expression parsing code has this problem:
ex addresses, and :g/:v/:s commands. Tags may also have this problem,
but since tag addresses never use character classes it is a moot point.
/ Winelvis' "About" box should show the version number of the VERSION macro,
or the o_version option. (They're the same.) In 2.1h and earlier, it is
just hardcoded to show "2.1".
/ All aliases seem to be enclosed in curlies, even the ones which were really
defined on a single line. Since the presence of curlies affects the way
arguments are handled, this is a problem. Apparently arguments are appended
on the *following* line, so they look like a separate command.
/ Added OS/2 port to general distribution.
/ Describe blksize in the manual. Mention that it can only be set via -b#
and explain why.
/ The manual entry for MS-DOS (9.1) states incorrectly that you can change
the blksize option in a configuration file.
/ The manual needs to say more about filenames: wildcards, %, #, \, $env,
(expr), ~, {a,b}, `command`.
/ Typo in manual: "altername" should be "alternate".
/ In elvisinp.html, ^R/^L get confused about the terms "window" & "screen".
/ In elvis.syn, MS-DOS file names should accept uppercase extensions as well
as lowercase. E.g., .BAT and .bat.
/ Make the X11 version check for WINDOWID *or* one of the known TERM values.
/ If $name isn't found, should elvis try for $NAME? This would be handy under Win95 because most programs are insensitive to the case of environment
variables but getenv() is case-sensitive. It could also be construed to be
more CSH-like, which is probably a good thing.
/ How about a command-line option for redirecting stderr (and maybe stdout?)
to a log file? This would provide an easy-to-document means by which
Windows95 users can store error messages.
/ The manual entry for "elvis.ses" still tries to use the old "binary" option.
/ If the "backup" option is set, :wq can cause a core dump at guitcap.c:1547
/ Tag searches on operators don't work? E.g., if you double-click on <<
in a C++ program, it should search for the tag "operator<<" but instead it
just fails.
-------------------------------------------------------------------------------
/ Change version number to "2.1h-beta".
/ For MS-DOS, the ^C key doesn't interupt macros, or long commands. This is
apparently due to the fact that MS-DOS only checks for ^C during a few
specific system calls, and elvis doesn't use those calls when it is busy
executing commands.
I fixed this by adding a bogus kbhit() call to the ttypoll() function.
/ The :a, :c, and :i commands are dropping the newline from the last line of
multi-line text.
/ For X11, the XGetInputFocus() function now returns void instead of a success
indicator. Need to modify guix11/guix11.c
/ The sigaction() calls should not use sa_restorer, because it is deprecated.
/ The [charlist] notation in regular expressions doesn'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. Also
need to document this.
/ In osunix/osnet.c, the function netread() tries to return -1 to indicate
an error. It should return False.
/ Problems remain with terminals that support dim text but not bright text.
md/me/mh termcap attributes.
/ The backslash changes for aliases seems to have broken backslash handling
for commands like...
g/foo/a\
one\
two
... which now adds an extra blank line. Probably the :append command should
be modified to expect a newline after the last line, and the normal '.'
marker should ensure that the last added line ends with a newline.
/ In ex mode if you hit <Enter> at the end of a file, elvis should give a
better error message than "bad delta".
/ In guiwin32/gwmsg.c, the gwclient_WM_DROPFILES() function needs to quote
the dangerous characters (such as space) in the filename.
/ The X11 interface can get stuck in a loop in which it continually resizes
the window. Apparently if there are two or more resize requests in the
queue, and elvis adjusts itself for the first one, then the others will
can change it to still another size. This has been reported under TWM
after a simple resize action.
A somewhat sleazy way to reproduce this: Start elvis. From within
elvis, start xkoules. While elvis is waiting for xkoules to exit,
resize the elvis window *twice*. Exit xkoules.
Possible fix: When elvis gets one configure request, it can try to
read as many more as possible, and only use the last one.
? Problems with German keyboards under X11. The modifiers don't appear to
work correctly, which prevents { } [ ] ~ @ \ | from being enterable.
Reported by Juergen Preuss (preuss@cach02.chm.tu-dresden.de).
I borrowed some code from RXVT, which had borrowed it from XTerm.
Hopefully this will solve the problem. It doesn't seem to have
broken anything for US keyboards, but that's all I can test myself.
/ ctags can't handle derived classes: "class foo: public bar {...}" should
generate an entry for "foo" and ignore "bar".
/ The "tags" option needs to support a notation for "look in the directory of
the current file". Vim uses "./tags" for that.
/ After a <L command, I got the message "15 lines NULLed".
/ Some problems with the manual: The use of multiple -V flags should be
explained somewhere. The missing features of the DOS port should be
writ large.
/ The "version" option isn't being initialized correctly.
/ Add a dummy "redraw" option. Or maybe a real one.
/ Change the html entry in "elvis.syn" to include more tags.
/ When the "number" option is set, clicking the mouse sets the preferred
column to the wrong value; If you click and then hit j/k, the cursor
jumps to a different column.
/ A crash was reported in the TeX mode. Overflowed a token, perhaps?
Perhaps; the token-getting function wasn't smart enough to handle
long comments or expressions. It should be that smart now.
/ The online manual title says "elvis 2.0" -- change to "2.1". Also, I saw
a reference to "14.x" which should actually read "16.x"
/ The "Tips" chapter of the manual should have a section on how to make elvis
run faster.
-------------------------------------------------------------------------------
/ Change version number to "2.1g-beta".
/ Consistent crashes have been reported under Linux in the lp() function
when elvis is compiled with gcc -O2, with ELF binaries. Unfortunately, it
works correctly when compiled with gcc -g, so we can't narrow it down any
more than that. Reported by William Cheung, wcheung@scc.spiralcomm.com
/ In text-mode Win32, there are freaky problems reading from a program.
Just running a program works; filtering works; reading from a text-mode
win32 executable such as ls.exe works. Reading from anything else
generally causes the output to show on your screen but not be inserted
into the edit buffer.
Got pipes working under Win95 in text mode, but not graphic mode.
Would like to have pipes under graphic mode (WinElvis).
/ Add the ability to run an external tag search program. A new "tagprg"
options will be invoked, and its stdout will be parsed as a series of
tag lines, all of which are assumed to match the requested tag.
If tagprg is undefined, then use the standard built-in tag searches.
/ Both "windows" and "x11" have a scrollbar option, but they work differently.
Should probably rename the x11 option to "xscrollbar".
/ Temp files tend to accumulate under Win32. Problem in oswin32/osprg.c?
/ Rapid left-arrow while in input mode causes characters to be lost. This
only seems to show up in Win32 text-mode.
This was fixed once before, I thought, in input.c:cleanup().
I suspect new ctrl_o code in inputchange() is to blame for its
reappearance.
/ Using backslashes for multi-line commands doesn't seem to work right.
It looks like there's no terminating '\0'.
/ In WinElvis, the toolbar and scrollbar options don't quite work -- you can
apparently turn them off, but you can't turn them back on again.
/ The names of the "windows" font options conflict with the "x11" options.
This is a problem because both sets of names appear in the elvisopt.html
file, and :help needs to be able to find the right one.
Changed the names of the "windows" options from normalfont, boldfont,
etc., to normalstyle, boldstyle, etc. This makes more sense anyway,
since their values aren't really font names.
/ ":w>>file" doesn't set the alternate file name correctly. Also, the
>>file notation doesn't seem to *create* a file if it doesn't exist;
it should.
/ The :set command doesn't permit trailing spaces. It should.
/ Need to find a way to nest the { ... } notation.
/ The following should be undoable in a single step: @x macros, :map macros,
:@x macros, :ab abbreviations, aliases, and :g/:v commands (which are already
undoable as a single step).
One possible way to do this: make bufwilldo() check the eventcounter,
and do nothing if it hasn't changed since the previous bufwilldo().
/ Under X11, toolbar labels should accept characters which aren't defined
as meaning something else -- namely :"=?~ -- and trailing spaces should be
ignored.
/ Aliases should not affect the behavior of the exthenflag variable.
/ Add :while and :do commands. The while expression should be saved
wherever the exthenflag flag is saved.
/ The htmlescape() function in dmmarkup.c is reported to cause core dumps
on an RS6000 running AIX, when compiled with optimization enabled. If
compiled for debugging, it doesn't dump core so specifics are hard to
come by on this one.
/ Under MS-DOS, elvis seems to write each character twice. This was reported
by a blind user who has a text-to-speech device hooked into his console.
It doesn't do this with the termcap interface under Linux. I suspect
that it is having a hard time because the attribute and character
bytes are written out seperately.
/ Large :copy commands can get screwed up. Try editing a large file, such
as ex.c, and insert line numbers at the start of each line ("%!cat -n").
Then do a ":100,500co1000" command.
/ Sometimes keywords from elvis.syn are lost? Saw some PERL code where
"if" and "while" weren't in boldface. The large number of PERL keywords
may be a factor.
Yes, that was it. There was a silent limit of 256 keywords. I have
now increased that limit to 300 keywords. I really need to recode
the keyword hash table though -- it is unnecessarily kludgy.
/ X11 dialogs should support a "locked" data type, because some options can't
be edited. If a row doesn't specify an option name, then that row's type
should be "locked"; this will allow dialogs to display immutable information
which doesn't come from an option. If a row has neither an option nor a
value, then its label should be centered in the dialog.
/ Under MSDOS with TERM=dosansi or TERM=nansi, mouse highlighting is
flakey, and linewrap causes some problems. Also, running an external
command causes the mouse cursor to vanish.
/ Should allow certain words to be customized by language: Submit, Cancel,
Help, True, False. Create options named "true" and "false" for storing
the local versions of those words; this will also have the pleasant side
effect of allowing the english words "true" and "false" to be used as
though they were Boolean literals in expressions. The other words are
only used by the "x11" user interface.
/ The saveregexp option doesn't do enough. It protects the regexp, but
it needs to protect the substitution text and the substitution flags too.
/ Need to replace <xmp></xmp> with <pre></pre> in the lib/*.html files.
<xmp> is obsolete, and elvis doesn't implement it correctly anyway.
Also add <code> to dmmarkup.c, as a synonym for <tt>, and use <code>
in the lib/*.html files.
/ The :w command affects the value of the "exthenflag" flag. The elvis.bwf
and elvis.awf scripts (and others) should probably save the value of
exthenflag, and restore it afterward.
/ In a :ab! abbreviation, expansion doesn't take place if the short form
is the last thing on a command line.
/ Under Win32, it should be able to parse UNC names (\\machine\directory\file)
Apparently the only missing piece is that elvis should not change
the leading \\ to \.
/ The termcap interface can't use "dim" unless there is also a "bold" escape
sequence. There's no need for that!
/ The :ta command doesn't offer any way to supply values which contain
colons or whitespace.
/ Long moves don't necessarily center the cursor line in the window. See
the "!!!" comment in dmnormal.c. To fix this, I'll need to pass the
window pointer into the setup function. (Some other setup functions could
benefit from this, too.)
/ The :ta command should be smarter about setting the previoustag option.
Whenever you jump to a tag, previoustag should be set to the name of that
tag.
/ Add a Windows version of the "quit" GUI to WinElvis. The normal "quit"
interface isn't supported there, and the text-mode version of elvis doesn't
support "lptype=windows".
/ When ^L is defined as forcing a redraw in input mode, it can break some
common macros. Perhaps it should be left as a normal "insert me" character.
Users could still redraw the screen while in input mode by typing ^O^L.
/ Bottom button of X11 scrollbar isn't drawn initially. It appears after
an expose event, or after any colon command including colon-backspace.
I suspect the scrollbar is first drawn with a height of 0, and the top
button is drawn over the top of the bottom button.
/ On AIX systems, the toolbar is drawn incorrectly.
/ Control-V should display a carat on the screen, while waiting for the
quoted character.
--------------------------------------------------------------------------------
/ Change version number in version.h to "2.1f-alpha". (n.b. I haven't been
doing a consistent job of updating this list as bugs are fixed, or as new
versions are uploaded. There *were* some fixes between 2.1b and 2.1f.)
/ An expose event causes the scrollbar to be redrawn, even if it should really
be blanked out (because the cursor is on the bottom row).
/ Under Win32 or DOS, text-mode "elvis -?" outputs a line of garbage after
the help message. The garbage consists of uninterpretted escape sequences,
emitted as the termcap interface shuts itself down.
/ When invoked in the current directory, with the "exrc" option set, elvis
will source the ./.exrc file twice.
/ Abbreviations can get stuck in a loop. Self-referential abbreviations
should be disallowed. (Actually, should an abbreviation *ever* expand
another embedded abbreviation?)
/ The :& command doesn't seem to be working correctly in all circumstances.
After doing a ":%s/.$" on one buffer, and then switching to another buffer,
the command ":%&" did not work.
This is because the "elvis.arf" file uses a :s command to locate and
execute modelines. There is no easy way to fix this, unless you think
":set nomodelines" is an acceptable solution.
Here's an idea: Create a new "saveregexp" option. Leave it on
normally, but turn it off when doing the modeline search. Also force
it off while searching for tags for the "showtag" option.
/ The command ":g/old/s//new/g" doesn't work in 2.1e. It worked in 2.0, so
some recent change must have broken it.
/ When returning after a :bb command, the cursor is moved to the top of the
buffer instead of its previous position. The best way to fix this would
be to add a "winpos" field to the BUFFER struct, and set it to the cursor
position before each ^W command or ex command.
/ The X11 interface doesn't handle Expose events during time-consuming
commands such as :make.
/ If bufdisplay is set to "man", "html", or "tex", then ^Wd should probably
toggle between "syntax" and bufdisplay, rather than "normal" and bufdisplay,
so the source text will be displayed with syntax coloring.
/ In ioopen(), the usestdio flag is never turned off.
/ The :make command is insensitive to the gui->poll function.
It does set the pollfrequency option to 1 while it is running, but
I think maybe it also needs to call the guipoll() function to reset
its internal count-down.
Update: It does detect it, but not until the next line comes in from
the compiler. This can take a while.
/ The :g and :v commands don't work correctly on last line. If the last line
is supposed to be affected, it appears to actually affect the *FIRST* line.
The behavior of this bug is more complex than that, actually. More
testing is needed.
/ The :s command doesn't handle counts correctly. It should treat a count as
a quantity of lines, but instead it treats it as a selector for the instance
of matching text to change in each line.
/ In the "x11" interface, the tool buttons should wait until the mouse button
is released. Otherwise the "quit" button could leave the mouse pointing at
some totally unrelated window WITH A BUTTON PRESSED! Surprise!
/ If the "number" option is set, then the printout should show line numbers.
It should also cause page headers to be printed.
/ Often it would be handy to allow ":e !command" or ":sp !command" to fill an
untitled buffer from a filter command. For example, ":sp !man \@ | col -b"
would cause a window to pop-up, showing the man-page for the word under the
cursor.
/ In the syntax display mode, the directory in which the current file resides
should assumed to be in the search path. For example, if you're editing
osunix/tcaphelp.c, and you double-click on "tcaposix.h", then elvis should
be smart enough to load osunix/tcaposix.h. Currently it isn't.
/ The assert() statement in ex_qall() needs "|| xinf->command==EX_ONLY".
/ If the backspace key sends ^? (and the tty settings indicate this) then
elvis should treat ^? as ^H.
/ It would be nice if elvis supported HTML frames, in the least-complex
manner possible: Treat <FRAME SRC=... ALT=...> like <A HREF=...>...</A>
Similarly, it would be nice if an <IMG> which isn't an hypertext reference
would fetch the image data (perhaps reading it into a temporary edit buffer)
and then send it to a configurable program; the default should be "xv -"
so the image is displayed by xv.
/ If ":make" is used in a window which is displaying an internal buffer
(especially the "Elvis error list" buffer), and there is another window
which is displaying a non-internal buffer, then the command should be run
in that other window. This is simply for convenience -- after going to the
trouble of displaying an internal buffer in a window, the user probably
doesn't want to use that same window to show a buggy source file.
/ Some older X-windows servers don't have XrmCombineFileDatabase().
/ If you are displaying a cut buffer in a window, then you can try to yank
text from a cut buffer into itself... but cutyank() isn't smart enough to
handle that correctly; elvis hangs. Probably cut buffers should be locked.
/ The :pop command should wipe out the list of matching tags. This will
allow elvis's enhanced tags to act more like traditional tags for users
who are in the habit of using ^]^T to glance at the definition of a tag.
/ The X11 resource "*foreground: somecolor" makes toolbar buttons unreadable.
/ The install procedure should copy lib/elvis.xpm and lib/elvis.xbm into the
/usr/include/X11/{pix,bit}map directories. Also, small icons would be nice
(pixmaps of size next/normal=56x46, small=21x18, and mini=17x14)
/ The "Delete Window" button of the last elvis window should not simply fail;
it should do a ":close" command instead.
/ In the "html" display mode, if a token begins with then elvis
mistakes the token for a whitespace token; the remaining characters aren't
displayed.
/ The x, X, ~, and r commands don't work correctly when the count exceeds
the number of characters in the line. They should implicitly reduce the
count; but instead they're just ignoring the command.
Actually, r and X are supposed to fail, and they do.
x should fail, but elvis just deleted to left. Now it fails correctly.
~ should reduce the count. It didn't before, but it does now.
/ The character search commands stop at a newline, even if the current display
mode uses some other definition of a "line".
/ The X11 interface should handle GraphicsExpose events when scrolling a
window which is partially obscured.
/ Add support for hardtabs/ht option. And then ignore it, since elvis never
outputs hard tabs.
/ The "flash" option doesn't work.
/ The current("word") function sometimes causes a core dump. This occurs when
the cursor isn't located on a word (but sometimes that works too).
/ Elvis uses an option named "buffers", but that clashes with a variable
declared in some systems' <stdio.h> file. Change to "elvis_buffers".
/ Elvis checks for :mh=: even if :me=: is undefined. It shouldn't.
/ Under NT, in the GUI version, the Options/Syntax menu item brings up
Dr. Watson.
/ Cut/Paste don't work in Win32/gui?
Verified. A true bug. It attempts to cut/paste whole lines (?) via
the ">/"< buffer, but the underlying GUI clipboard functions don't
seem to work.
/ Win32: There is a limit to how small a window can be: 2 rows of 30 characters.
Resizing the screen to be smaller than that (by dragging an edge/corner of
the window frame) causes elvis to crash.
/ Win32: If you use a mouse click to position the cursor, and you jiggle
the mouse slightly, then WinElvis starts highlighting text. Xelvis is less
sensitive to jiggles; it requires you to drag the mouse into a different
character cell before it'll start highlighting, which seems to work well.
--------------------------------------------------------------------------------
/ Change version number in version.h to "2.1b-alpha"
/ The X icons still say "2.0", even though we're working on 2.1 now.
/ Some commands move the cursor to a different buffer when they shouldn't.
For example, ":(otherbuf)1,20co." copies the lines correctly, but then it
moves the cursor to line 20 of otherbuf.
/ The "x11" interface should ignore MotionNotify except after a ButtonPress.
Although elvis only requests MotionNotify events while a button is held down,
some servers send them at other times as well.
/ Ex parser doesn't support backslashes, for things like...
:g/XXX/a\
line1\
line2
/ Under X, pasting from the clipboard doesn't work during, e.g., a "5s"
command. (Probably true of Win32 gui, too.)
/ Environment variables with underscores are not recognized in elvis scripts.
/ A more sophisticated method for handling EOF would be appreciated.
Suggestion:
* Add a "readeol" option to each buffer, one of {unix, dos, mac, text,
binary}, defaults to "text".
* Add a "writeeol" option to each buffer, one of {unix, dos, mac, text,
binary, same}, defaults to "same".
* Add a "fileeol(filename)" function, returns the file's probable
format, one of {unix, dos, mac, text, binary} by reading the first
part of a file. Returns "text" if no hard evidence of any other
format.
* Meanings of values: unix=LF, dos=CRLF, mac=CR, text=local convention,
binary=no modifications, same=current value of readeol.
* The "elvis.brf" file could do a "let readeol=fileeol(filename)"
to detect non-text files automatically.
/ Need a way to prevent :make from loading an erroneous BINARY file.
/ The built-in calculator can easily overflow when fetching the value of an
environment variable. Possibly other situations, too.
/ Under Unixware, when the termcap interface writes a '\n' character, the
cursor is forced to column 0. Should use :do=: or :DO=: instead.
/ ":q!" doesn't turn off a buffer's "modified" flag or delete the buffer.
/ The guitcap file never checks the LINES and COLUMNS environment variables.
/ When entering a command line, ^Ocw places a $ as though it will replace
the current word, but actually any text is inserted.
/ The "program" option isn't documented.
/ Under X11, some sites are missing the default fonts, or have goofy fonts
aliased to "fixed" and "variable". Probably appdefaults fix this for other
applications. Elvis should support some method of reading X resources.
/ It would be nice if untar.c kept the date and permissions from the archive.
This can't be done in ANSI C, but if POSIX calls are supported then it can
be. Maybe check for _POSIX_SOURCE? Also, it would be nice if the untar
executable could be prepended to the archive, to produce a self-extracting
archive.
/ Add a way to abbreviate (Elvis error list) and (Elvis map log).
Done: You can now give use a quote character followed by the initials
of any buffer in place of the buffer name. So ("Eel) means the same
as (Elvis error list).
/ The "warningbells" and "warpback" options are both abbreviated "wb". Change
"warpback" to "xwb".
/ The termcap gui should not attempt to catch SIGHUP. It isn't necessary,
and catching it can, in fact, cause the elvis process to go into a tight
loop as it attempts to read from a dead tty.
/ Add ^Wo and :only commands -- like :qall except they only close (don't
delete buffers) and don't affect the current window.
/ Maybe add a "showname" option, to display the buffer name on the status
line?
/ The console's "Edit/Paste" menu item doesn't paste all of the characters
that it should. (Also, it doesn't work correctly for Chinese text... but
that may be too big a problem for now.)
/ The manual should mention that "ignorecase" doesn't affect character classes.
/ The status line isn't redrawn when colors change.
/ The "instman.sh" script doesn't invoke elvis correctly to format the
man-pages. It uses "-gquit" instead of "-Gquit", and the EXINIT variable
as no effect because ELVISPATH=dummy.
/ there seems to be a `!' substitution in command lines, this may
be a "generalisation" of vi's command repetition `!!' (which
allows command repetition and appending to a command, i.e.
`!' substitution occurs only at the beginning of a command);
IMHO the `original' behaviour (which was also implemented in
elvis18) is better, because a substitution inside of a command
is rarely needed, but now you have to quote all exclamation marks
/ in vi the `print' and `list' commands query the `number' flag
(and behave according to it, i.e. print line numbers or not)
/ the join command could display a message like 'x lines joined'
/ In the termcap interface, if you hit <Esc> in command mode, the following
character is eaten.
This is normal. Hitting <Esc> causes the terminal to be "alerted,"
which has the side effect of throwing away any characters already in
the type-ahead queue.
/ The defaultreadonly option is ignored. The bufload() function resets each
buffer's readonly flag before loading the file.
/ if I call the (ex) join command with an adress range of 1 line
(not a single adress, sounds strange, but see below ...) it
joins 2 lines, but -per definition- it should do nothing
e.g.: :3,3j joins lines 3 and 4!
why bother? ... try the following command:
:v/./,/./-j
in vi it compresses consecutive blank lines to one, but,
due to the behavior of `join', elvis deletes all blank lines
/ the following I've already reported, but now I can describe the
error more precisely, also I can give you a hint, how to fix
it:
elvis deletes one `level' of backslashes before passing a
command to the shell (concerns ex's `!', read and write
commands, NOT vi's filter command !)
I think it's easy to fix, but you should prove it; in `ex.c'
change line 1228:
if (*refp && !CHARchr(toCHAR("%#!@\\"), **refp))
^^
delete this
/ In the relative part of a line address, the "+" is optional. I.e., the
command ":.,.3y" should be identical to ":.,.+3y".
/ The command ":g/^/m0" should reverse the order of all lines, but elvis
just gives the message "destination can't be inside source".
/ WinElvis doesn't print graphic characters correctly.
/ Add support for multi-line strings which don't require a backslash.
/ Typing some text and then (without hitting Esc) allowing the left arrow to
autorepeat causes some characters to be lost. This only happens under the
X11 user interface.
/ The description of the "keywordprg" option says that $1 is replaced by the
current word, but currently the word is appended to the option's value.
--------------------------------------------------------------------------------
/ Change version number in version.h to "2.1a-alpha"
/ Changing one option via the Options menu causes all options in that dialog
to be set, so ":set" with no arguments causes them to be displayed.
FIXED: This is actually due to a quirk in elvis' options.c file. I've fixed
it. Previously elvis didn't store the default value for each option; now
it'll save the values of all options immediately after executing "elvis.ini"
as the defaults. Each option's OPT_SET flag will be set or cleared after
a value is assigned to the option, depending on whether the new value
matches the default value.
/ Bug in filename completion under all Microsoft OSes (not just in Win32 gui):
If you enter a directory name and partial file name using forward slashes,
the substituted name will drop the directory name. If I use a backslash,
it works correctly. For example, "guiwin32/gu<Tab>" becomes "guiwin.c" but
"guiwin32\gu<Tab>" becomes "guiwin32\guiwin.c".
FIXED, at least for Win32. It is due to minor bugs in the osdir.c functions.
/ In the X11 user interface, I've received some requests for more configuration
options for the cursor. Some folks don't like the hollow rectangle. Add a
new "cursorstyle" option which can be set to hollow, opaque, or xor.
/ In addition to "xterm", perhaps guix11.test() should check for "iris-ansi"
(for SGI) and "dtterm" (for CDE).
/ In text mode, the cursor jumps to lower-right corner after each keystroke.
Annoying on slow terminals. This appears to be an attempt to clear the line,
by drawing a bunch of spaces before the statusline text (showmode, ruler).
/ Errors that occur interactively should not set exitcode to 1.
/ eventreplace() doesn't move the cursor to the correct location.
/ Add WinElvis and WinTags to the "makwin32.bat" file.
/ In WinElvis, if the text doesn't completely fill the window, then the
scrollbar will look funny. This is unavoidable. We would like to have
the scrollbar's thumb completely fill the scrollbar (since the text
completely fills the window) but Win32 tries to do us a favor by removing
the scrollbar in that situation.
/ :only can cause a core dump. Try starting elvis without a file, running :sp
and then :on
/ :close can close the last window. It shouldn't.
Actually, that's a pretty convenient behavior to support. The window's
"close" button does a :close, which should be able to close the last
window... if there aren't any modified buffers.
/ Under Win32, if you move the pointer outside of the text window, it isn't
restored to its intended shape when you move it back in again.
/ Under X11, the resource for button colors must not be named "foreground".
That leads to a foreground-on-foreground problem, so button labels aren't
legible.
/ Under X11, -client isn't sensitive to which machine the command is running
on. Perhaps the "ELVIS_SERVER" attribute name should be renamed to
"ELVIS_ON_{hostname}". Another problem is that user ids may differ --
running in root and as a real user, for example.
/ Backslash needs to be treated literally in more situations, especially
under Win32. A name like "C:\tmp\_tempfile" should be treated literally.
The worst case is something like "C:\temp\$wc\foo", where the "$wc" is
supposed to be literal. I don't think anything can make this be rational!
The current code interprets the backslash as a quote for the $ character,
so elvis loads "C:\temp$wc\foo". If backslash was literal, it would try
to perform environment variable substitution for "$wc". The current
behavior is about as good as it gets.
/ Does the ":lpr" command support ">>" to append to files? It should.
/ If the buffer doesn't end with a newline, then the Y command will go into
an endless loop.
/ Newly created windows should acquire input focus... and when entered
interactively they do. But for macros and the "elvis -client -c ..."
command, this doesn't work correctly.
/ The :s command (not :s/old/new/) is supposed to repeat the previous
:s/old/new/ command, but doesn't. The :& command works correctly.
/ Under Win32, the italic font is shifted slightly to the left -- which is
fine normally, but not after a ":set italicfont=n". Then it clips off
the uprights of many letters.
/ Skip the "Hit <Enter> to continue" prompt if we're in the middle of a map.
/ Tweak the tags stuff to use the proposed standard.
- Allow :" after the address in field 3
- Interpret file: as file:(tagfile) -- i.e., file: marks static tags
- In the extra fields, the values are subjected to the following
translations: = becomes =3D, tab becomes =09, newline becomes =0A
/ Writing via ftp doesn't turn off the "writing" flag when complete. This
causes the next read to fail in an assert() statement.
|