1e93 version 1.4r2 (X Windows version) 2http://www.e93.org 3 4Todd Squires 5Core Technologies 6215 N. Valley Hill Rd. 7Bull Valley, IL 60098 8(squirest@e93.org) 9 10What is e93? 11---- -- --- 12 13e93 is a portable window based text editor oriented to the needs of 14programmers. It was begun in 1993 (thus the name). It uses the mouse, 15selections, cut/copy/paste, and closely follows the model of editors 16on the Macintosh and NeXT platforms. 17 18e93 is portable to environments other than Unix/X Windows -- as long as 19those environments support virtual memory. 20 21e93 supports columnar selection. It achieves this by allowing multiple 22pieces of the text to be selected simultaneously (this is perhaps its 23most unique feature). 24 25e93 imposes no limits on the line length, file length, or number of 26simultaneous files which it can edit. 27 28e93 is able to handle all 8-bit binary codes without complaint, or 29confusion. 30 31e93 is highly configurable without recompiling because scripts which 32control the editor can be written in Tcl. 33 34e93 supports user-configurable syntax highlighting. 35 36 37To Install 38-- ------- 39 40Please read "LICENSE.TXT" if you agree with it, follow 41the instructions given in the file "INSTALL." 42 43 44What's the deal with those version numbers? 45------ --- ---- ---- ----- ------- -------- 46 47The version numbers in e93 work as follows: 48 49e93 1.4r2X means: 50 51Major version: 1 If it is ever rewritten, this will increment, and the 52 numbers below will be reset to 0. 53Minor version: 4 If really significant changes are made, this will increment. 54Revision: 2 Any change will cause this will increment. 55Machine: X X windows implementation. 56 57 58Additional Information 59---------- ----------- 60 61The material README.regex is taken from The GNU Emacs Manual, 9th edition. 62Copyright 1985, 1986, 1987, 1993 Free Software Foundation, Inc. 63and from the GNU regex library version 0.11. 64Copyright 1992 Free Software Foundation, Inc. 65 66 67Mail From e93 Users 68---- ---- --- ----- 69 70Mail me useful tips, and I will place them here so that 71other users can benefit from them. 72 73From: Michael Zuelsdorff <micha@dolbyco.han.de> 74Subject: e93 on german linux box 75 76The only problem I ran into was my German keyboard. You 77might know, that we have Umlauts and other special characters 78instead of all those brackets and braces. My solution are 79some additional lines in my e93rc.tcl: 80 81bindkey 7 {00100000000} {InsertAndHome [ActiveWindowOrBeep] "\{"}; 82bindkey 8 {00100000000} {InsertAndHome [ActiveWindowOrBeep] "\["}; 83bindkey 9 {00100000000} {InsertAndHome [ActiveWindowOrBeep] "\]"}; 84bindkey 0 {00100000000} {InsertAndHome [ActiveWindowOrBeep] "\}"}; 85bindkey ssharp {00100000000} {InsertAndHome [ActiveWindowOrBeep] "\\"}; 86bindkey q {00100000000} {InsertAndHome [ActiveWindowOrBeep] "\@"}; 87bindkey plus {00100000000} {InsertAndHome [ActiveWindowOrBeep] "\~"}; 88bindkey less {00100000000} {InsertAndHome [ActiveWindowOrBeep] "|"}; 89---------------------------------------------------------------- 90 91Please send all bug reports to squirest@e93.org. (Todd Squires) 92 93Release of 1.4r3 94------- -- ----- 95 96Cleaned up some math that wrapped around when buffers grew larger than 972GB. Scroll bars, etc should now all handle 4GB buffers. 98 99Added the control key as a selection modifier. When holding the 100control key and clicking in the document, it is now possible to easily 101make multiple disjointed selections. 102 103Got rid of cache of top level X window that was associated with each 104editor window. This was used to keep track of windows when the WM 105reparented them, but breaks when the WM is restarted, or a new WM 106is started. Instead, the code now hunts windows the hard way whenever 107it might be dealing with something that was reparented. This is slower, 108but shouldn't break as easily. 109 110Modified clipboard handling to export both XA_PRIMARY, and XA_CLIPBOARD 111to get along with more applications when cut/copy/pasting. 112 113Release of 1.4r2 114------- -- ----- 115 116Added XSetClassHint calls to the various windows to help the Gnome 117Window List applet to figure out that all of our windows belong to the 118same class (so it groups them correctly). 119 120Added support for Xinerama (multiple head displays). e93 will now pick 121the 0th display as the "primary" one, and will open windows and menus 122on that display. 123 124Release of 1.4r1 125------- -- ----- 126Sun Jan 4 18:25:40 CST 2009 127 128I had some time to play with e93 over the holiday. It had been a while 129since I had done any serious messing with the code. 130 131The new version of the X11 libraries that came with FC10 contain an 132assert if an application calls back into X from within a predicate 133routine. It turns out this is not allowed. The "XCheckIfEvent" man 134page says: 135 136"Your predicate procedure must decide if the event is useful without 137calling any Xlib functions." 138 139e93 had an errant case of this which triggered the assert. The problem 140has been corrected. 141 142All of the C variables called "theWhatever" have been renamed to just 143"whatever". Adding the "the" before variable names was a bad habit 144which I have broken since e93 was written, and I had always meant to 145go back and get rid of them. They're all gone now. 146 147The long-ago-broken-and-never-fixed user abort code has been repaired. 148It is now possible to hit 'escape' while a Tcl script is running, or 149while the editor is busy performing a search, and have the process 150abort. This is trickier than it seems, so if you notice any problems 151with it, be sure to let me know. 152 153Tk was removed from the editor. On some machines, Tk made the editor 154slow to load, and it never was really used very effectively anyway 155(mainly used for the about screen). If this really bothers anyone, let 156me know. It would not be incredibly hard to add back, but I'd probably 157work to make it a build option. 158 159Windows and dialogs have been made to update using an offscreen 160buffer. This reduces flicker as e93's windows are updated. The result 161should look cleaner than before without much of a performance hit. 162This change helps especially with window managers that do live updates 163as windows are resized. 164 165The code which draws the text cursor has changed. Previously, e93 166tried hard to manage the cursor outside of the usual invalidate/update 167mechanism that is used for all other screen updating (it used XORs to 168draw the cursor to the screen). This made sense in the days of old, as 169it was much more efficient. However, on modern machines the code 170complexity of the old method makes no sense given how little it 171matters speed-wise. Now the cursor is drawn just like everything else. 172 173Previously each editor window had its own graphics context. This was 174not necessary. Now there is only a single graphics context that is used 175for all drawing. 176 177Dialogs have been modified so that they can be sized. The editor does 178not yet remember the last size you asked for, not does it yet allow 179you to specify the size when they are opened, but I'll eventually get 180around to making those changes. 181 182Error handling has been improved. 183 184Release of 1.3r5 185------- -- ----- 186Mon Dec 22 16:05:31 CST 2008 187 188Ok, I admit it. I had been upgrading my kernel happily without ever 189upgrading my Linux distribution (I have been using Fedora Core 2 for a 190very long time). Anyway, I finally decided it was time to upgrade to 191FC10. The upgrade brought with it a new version 4 gcc compiler, and a 192new version of the Metacity window manager. 193 194Both found reasons to complain about some of the things e93 was doing. 195 196IMHO, only gcc had any right to complain. Metacity wrongly decided to 197start ignoring XRaiseWindow requests... I'm sure the author thinks it 198was a good idea. It wasn't. One day, I would enjoy having a chat with 199him about it. 200 201Also, I've been sitting on a bunch of other little fixes given to me 202by various folks (especially Michael Manning (thanks, and sorry for 203taking so long to get these out)). 204 205So, here it is. No new features have been added. Just compile fixes 206and a few minor tweaks. 207 208 209Release of 1.3r4 210------- -- ----- 211 212A bug in shellcmd.c which could cause 2 error messages to be output 213when the "setcolors" command was passed an invalid color was fixed -- 214thanks to Michael Manning for pointing this out. 215 216Gordon J Milne added some missing keywords to the C syntax 217highlighting rules. 218 219Makefile was modified to link against libstdc++. 220 221Fixed a bug in Replace where the selection would be corrupted 222after a replace Tcl script failed. 223 224Added a check in xgui/misc.c to check to see if a window has 225children before deleting the child list -- thanks to Fred Allen 226for pointing that out. 227 228Mouse wheel support added -- also thanks to Fred Allen. 229 230Default fonts for all the various editor functions may now be 231specified in the startup scripts. Thanks to Adam Yellen for this 232change. 233 234"extract" Tcl function was added -- Thanks to John Duncan for the 235suggestion. 236 237New syntax maps added courtesy of Michael Manning. 238 239Modified the C Get Prototypes menu item to improve recognition of 240certain kinds of prototypes. 241 242Removed support for paletted displays -- colors are no longer 243allocated and freed. If you are still running in 8 bit color 244mode, you need help. 245 246Renamed a bunch of types to make them easier to read and more 247consistent with my current programming style. 248 249Added some new Tcl commands to the editor for manipulating 250marks in the text. Also added ability to have marks be visible 251in the view. 252 253Removed some outdated Tcl commands, and changed the names of some 254others. e93rc.tcl and other scripts were modified accordingly. 255 256Release of 1.3r3 257------- -- ----- 258 259A variable called "not" in regex.c was changed to a new name, since 260"not" is a reserved keyword in 'C', and new compilers have started to 261complain. 262(Thanks to Adam Yellen, and Mark Maxon) 263 264The version of Gnome shipping with RedHat 7.0 did not like the way 265that dialog windows were being set up and was causing an inability 266to click in them. dialogs.c was modified to solve the problem. 267 268The following changes are thanks to Michael Manning: 269 Unnecessary "strings.h" was removed from includes.h. 270 Tcl commands: setmodal and getmodal were removed in favor of a 271 more transparent method of determining when a grab has occurred. 272 Dummy version of ShellCommand added to make errors in the startup 273 script a little less catastrophic. 274 fromfile was removed from the Tcl script GetDefaultStyleInfo 275 The about box was changed so that it no longer calls "uname" making 276 it more portable. 277 Some other problems were corrected in the startup script. 278 279Michael Manning also contributed the docsource directory which 280contains the beginnings of some real documentation for e93. 281 282Adam Yellen supplied some icons (in the e93lib/images directory) which 283can be used for Gnome or KDE. 284 285Adam also supplied the "colorme.tcl" module which can be used to 286dynamically modify the background color of editor windows. 287 288channels.c was changed to account for a change in the Tcl_ChannelType 289data structure. (Thanks to everyone who reported this.) 290 291Release of 1.3r2 292------- -- ----- 293 294e93r was modified to allow files to be piped to it on its stdin. 295(Thanks to aweigp@autelca.ascom.ch) 296 297Setlocale is called at startup to allow keyboard input to work in other 298parts of the world. (Thanks to y_kozlov@chat.ru) 299 300 301Release of 1.3r1 302------- -- ----- 303 304Fixed a crash bug which happens when replacing using tcl script as the 305replacement text, and the script is using "puts" to write to another buffer. 306 307Fixed a problem with closing stderr in Tcl which was causing e93's 308stderr to be closed as well -- this caused no error messages to be 309generated. 310 311Removed EDITORUNIVERSE concept -- folded it into EDITORBUFFER. 312 313Modified smart-open to take "# include" (with whitespace between 314the # and the include). 315 316Added private color map handling for X windows. If the 317environment variable E93_COLORMAP exists, e93 will use a private 318colormap. Otherwise, it shares the system's default color map. 319 320Many thanks to Peter TEX Weigand <aweigp@autelca.ascom.ch> for the following changes: 321 Modified Makefiles for easier multi-platform configuration 322 Added "install-strip" target to Makefile 323 Added SA_RESTART for Solaris in xgui/events.c 324 Added "Modified" icon for documents 325 Moved start-up scripts to "lib" instead of "bin" 326 Added vertical scroll-bar left/right-hand preference "scrollbarplacement" 327 Added "PrintWindows" command to e93rc 328 Modified e93rc mail command to use "sendmail" instead of "mail" 329 Added "subject" to mail dialog in e93rc 330 Added "MailWindows" menu item to e93rc 331 Enhanced "buffer info" dialog box 332 Enhanced find-selection so that empty selections work better 333 Enhanced modules/c.tcl so that prototype location is more robust for different coding styles 334 Updated the README.e93 document (BIG THANKS!) 335 Added .src to the extensions recognized as assembly code 336 Removed errno and sys_errlist from errors.c 337 Created "e93r" script for remote execution -- this allows you to pass files to a running e93 338 Fixed "dirty" flag so that it tracks the "undo" status of a buffer 339 340 341Release of 1.2r8 342------- -- ----- 343 344Changed the way e93 finds and runs its startup scripts. 345 346Added the long awaited Syntax Highlighting. 347 348Changed the way e93 internally deals with fonts and colors. 349 350Modified the way e93 internally deals with selections. 351 352Added < and > to regular expression matcher to allow matches on 353word boundaries. 354 355Changed regular expression matcher to allow empty groups (as this 356helps with the syntax highlighting rules). 357 358Modified text drawing to allow fonts with characters which overhang 359their cell boundaries (such as serifed and italic fonts) to work 360without having the overhanging portions clipped. 361 362More code formatting changes. 363 364Bug fix: Reverting to a document which contained 0 bytes did not 365work correctly. 366 367Bug fix: When doing a replace, the cursor did not always end up 368in the correct spot. 369 370Modified task code to keep e93 from using pause() to give time 371back to the system when tasks have data for the editor. This resulted 372in a 30% speed increase when reading task data into buffers on fast 373machines. 374 375Allowed menu key definitions to be overwritten by subsequent menu 376definitions. 377 378Added "the Hand" function to the middle mouse button to allow 379easier text movement. 380 381Changed .e93rc to show modified files in the "Choose window" dialog. 382 383Changed .e93rc to remember the contents of some dialogs across invocations. 384 385Changed the function of SHIFT-Arrow keys to work more as expected: 386previously, the selection was always expanded. Now, it expands and 387contracts in a more intuitive way. 388 389Changed the columnar paste algorithm: 390OLD way: delete all selections in document, paste columnarly. 391NEW way: paste each selection of the clipboard over each selection in the 392document until we run out of selections in the clipboard or document. 393If there are no more selections in the document, then paste the remaining 394clipboard selections columnarly. If there are no more selections in the 395clipboard, delete the remaining selections in the document. 396 397Changed behavior of the horizontal scroll bar so that it is possible 398to scroll the text beyond the right-most position dictated by the 399thumb. This makes it possible to see and edit the ends of very long 400lines, but does add a small bit of strangeness to the behavior of the 401scroll bar. 402 403Changed the way the editor homes the view when text is being sent to 404a buffer from a task. Now, the editor will not scroll horizontally 405when it homes. This makes it much easier to see what is happening 406when tasks dump long lines into the view. 407 408Allowed the escape key to be used to abort searches and scripts. 409 410Release of 1.2r7 411------- -- ----- 412 413Code formatting changes. 414 415Some problems with SIGALRM fixed under Linux and IRIX. 416 417 418Release of 1.2r6 419------- -- ----- 420 421The fallback font list (fonts e93 looks for when it cannot locate the 422one it really wants) has been changed. This was done to make e93 423behave better on machines that do not have b&h fonts. 424 425Opening and closing of e93's menus has been made slightly more 426efficient. This was done to make it faster with some window managers 427(like fvwm) which tend to behave very slowly when e93 changes the size 428of its menu window. 429 430The open and save dialogs have been changed slightly to make them 431more friendly. 432 433The startup procedure which reads the .e93rc file has been improved to 434handle some error cases in a more friendly way. 435 4364 new Tcl commands have been added: 437 438 buffervariables 439 setbuffervariable 440 unsetbuffervariable 441 getbuffervariable 442 443These allow variables to be created which are local to any given buffer. 444This will make it much easier for Tcl scripts to hang information off 445of a buffer, and reference it later. 446 447Finally, .e93rc has been changed in the following way: 448 449Checks were added to see if the modification time of a file has 450changed while the file was being edited. (Warning you that another 451application did something to the file). 452 453Capitalization of function names has been standardized. 454 455The open selection command has been improved to handle globbing, and 456selecting the cursor line to open if no selections exist. 457 458Open Clipboard was added to the Edit/Clipboards menu. 459 460Release of 1.2r5 461------- -- ----- 462 463Some minor cleanup to code calling Tcl. 464 465Some bugs related to reporting errors at inopportune times were 466located and removed. These usually showed themselves during very low 467memory conditions. 468 469Double click timer is now reset in the file dialog boxes. Clicking 470rapidly on the file list now works as expected. 471 472The initial delay before repeated scrolling/paging with scroll bars 473has been lengthened slightly. 474 475The allowable delay between consecutively typed characters in list 476boxes has been lengthened slightly. 477 478A bug in the menu code was removed. The bug was caused by clicking 479multiple mouse buttons at the same time while tracking menu items. 480 481The directory dialog has been modified to show only directories. 482Previously it also showed files. 483 484Color handling has been altered so that named colors are now 485recognized. Previous to this, all colors had to be specified as 6 hex 486digits RRGGBB. Now, if a machine supports color names, e93 will also 487accept them. 488 489.e93rc was modified: 490 Strip EOL Whitespace and line termination functions were added. 491 Align Left was added. 492 "About" was slightly modified. 493 Color names were added. 494 Line Wrap functions were added. 495 496Characters with diacritical marks such as umlauts and other special 497characters which are contained in the upper half of the character set 498will now be displayed properly by e93. Previously, any character above 4990x7F would have been displayed as its hexadecimal equivalent. e93 will 500now use the character contained in the current font (as long as it is 501not of 0 width, in which case, it will display the hex equivalent as 502before). 503 504Two new relative cursor movement modes have been defined: 505STARTPARAGRAPH and ENDPARAGRAPH which will move the cursor to the 506start or end of a paragraph. These modes can be used with the 507following commands: 508 509movecursor 510delete 511expandselection 512reduceselection 513 514 515Release of 1.1r4 516------- -- ----- 517 518.e93rc was modified: 519 Mark, Directory and C menus were added. Some more cleanup. 520 Views menu became Windows menu. Printing menus were added. 521 522All dialogs were modified to handle error conditions more 523consistently. 524 525The Ok dialog was modified to wrap text instead of drawing it off the 526edge. 527 528Open/save file dialogs were modified to handle more cases. Also a "/" 529was added after all items in the dialogs which point to directories. 530 531A new Path selection dialog was written, and a Tcl command 532(pathdialog) was added. 533 534Menus were modified so that you do not have to hold the mouse button 535down while making menu selections. You can now click on the various 536submenus one at a time to make a selection. This is more consistent 537with most window managers, and easier to use. 538 539Text routines were sped up by adding a cache mechanism that allows e93 540to locate positions in the text more quickly. The speed increase 541should be especially noticeable when editing large files (>1MB). 542Assuming you have enough virtual memory, e93 should now be able to 543edit very large (<2GB) files without a noticeable slow down. 544 545When treating replacement text as a Tcl script, 10 new variables (in 546addition to $found) are available if the search string was a selection 547expression: $0 - $9 are now set to the \0 through \9 matches of the 548selection expression. 549 550A bug that caused a rare memory leak related to search and replace was 551found and fixed. 552 553A bug in realpath2 that caused extra '/' characters to appear in its 554output was fixed. 555 556The clipboard interface with X windows has changed. Previously, e93 557used the clipboard mechanism to import/export to the X windows 558environment. However, most X windows applications do not use the 559clipboard. Instead, they use the X selection mechanism. Users 560complained that they could not easily communicate with programs that 561used only the selection mechanism (most programs). So, e93 now does 562the following to support communication with other X applications: 563Whenever text is copied into e93's current clipboard, e93 takes 564ownership of the current selection. If another application does a 565"paste selection" (many use the middle mouse button for this) while 566e93 owns the selection, the application will get the text in e93's 567current clipboard. Conversely, If another application owns the current 568selection, attempts to paste from the current clipboard within e93 569will cause it to copy the selected text from the current selection 570owner into the current clipboard before pasting. This all seems 571somewhat convoluted, but since e93 supports multiple selections 572simultaneously across multiple windows, and X does not, this is the 573best solution I can currently offer. 574 575The editor startup scheme was modified so that it looks for the .e93rc 576file in your home directory first, but if it is not found, it will now 577also look through the path given by $PATH in its environment. As soon 578as it locates a .e93rc file that it can open, it will execute it and 579stop looking. A Tcl global variable SCRIPTPATH is set to the path of 580the script that is executed. 581 582The font selection dialog was written. It is better than what it 583replaces (a dialog that made you type in the font you wanted) but it 584still could use some work. 585 586Release of 1.0r3 587------- -- ----- 588 589The increment of the minor version number (1.0->1.1) indicates lots 590of changes. 591 592.e93rc was modified: 593 Some new functions added, some old ones cleaned up slightly. The 594 "unknown" function was modified so that if it launches a task that 595 wants input from stdin, it will get an EOF, instead of hanging 596 e93. 597 598README.e93 was written, as a first cut at a manual. Read it, if you 599have suggestions, let me know. There is a lot more to do in this 600arena, but I hate writing documentation, so this is it for a while. 601 602A proper open/save file dialog was written. It is kind of different. 603Let me know how you like it. 604 605There is also a new listdialog function which allows choices from a 606Tcl list. This dialog was used to implement the new "Windows..." menu 607function. 608 609Dialog management has changed significantly. 610 611Color handling was improved, so the editor should not just quit if it 612cannot get colors at startup. The new behavior is to just get either 613black, or white depending on which color is closer to the one asked 614for. 615 616Tasks are now hung off of buffers, instead of windows as they were 617previously. This allows for tasks to be running in buffers which do 618not have associated windows. 619 620EOF can now be sent to a task by closing the input pipe. 621 622Task error handling has been improved. 623 624A speed governor was installed on all scrolling items so you folks 625with screaming fast machines will not have things scrolling so fast as 626to be annoying. This should not slow down slow machines. 627 628LOTS of minor source code changes. 629 630Release of 1.0r2 631------- -- ----- 632 633.e93rc was modified: 634 Some defaults were made easier to change. 635 Error reporting during file save functions was improved. 636 Menu names were made more consistent. 637 Some features were added to the "Misc" menu. 638 639The call to the library function "realpath" in xgui/misc.c was 640replaced by a call to a new internal routine "realpath2" which does 641the same thing. This was done for those machines that do not include 642"realpath" in their libraries. 643 644Release of 1.0r1 645------- -- ----- 646 647xgui/includes.h was modified to include <sys/time.h> because some 648machines require it. 649 650Two bugs in keybind.c were found and corrected. 651 652Error reporting at init time was enhanced so that users would know if 653e93 failed to start up because of a lack of available colors. 654 655Startup script execution has been changed so that the editor will not 656startup if it cannot locate the startup script. 657 658The default .e93rc was slightly modified to change the colors of some 659windows. 660 661guidefs.h was modified to get rid of an array of 0 length that 662offended some compilers. 663 664Release of 1.0r0 665------- -- ----- 666 667The makefile was altered to get rid of -L$(LIB) in the link line which 668was causing trouble. 669 670killpg in xgui/tasks.c was modified to kill(-pid...) because some 671systems do not have killpg. 672 673xgui/events.c was modified to make sigaction a little more portable. 674 675The clipboard is now imported when the editor starts. 676 677A new Tcl command called "version" was added to allow users to find 678out which version of the editor they are using. 679