Plese click here for information about installation and use of the above code, or look at the README files that are included.
Note that the XEmacs package binds no keys, except in gjdb-mode. See the preferences directory in xemacs21-gsl for traditional and suggested key bindings. It also, it rarely redefines functions expect in its patches directory. Mouse-toys.el is a notable exception.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A copy of the GNU General Public License can be obtained from the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
I don't have lots of time and so can make no promises about fixing anything. However, if you find a bug, I would like to know about it. If I can fix it easily I will. Please send me an emailemail, address at page bottom.
Over the years, many features have been added to XEmacs and it's possible that some of my enhancements are no longer needed because the functionality now comes in XEmacs. That is not too likely because there has been a small community of users of these enhancements and I'd think one of us would have noticed. But we are all professional programmers, and so often lacking the time to go looking for alternatives to tools that work quite well. If you are aware of a duplication in functionality I'd like to know about it. Please send an email, address at page bottom.
If you use the mouse-toys file you may, as I do, copy large amounts of the code you write and change it a bit to suit your needs. It's so much easier than cut and paste. Half the bugs in my code come from not making all the needed changes in the copy, so beware.
If you are using the mouse toys, and maybe even if you're not, you will probably want not only your Control and Meta modifier keys, but also Super and Hyper modifiers. You should look into the unix command xmodmap to set this up. I have examples of xmodmap input files in this package. If you have the misforture to be using Windows, as I now do, I don't know that you have that option. If you know how to get more shift/modifier keys on a PC I'd appreciate a note, address at page bottom.
You will also probably want a 3 button mouse. While these used to be the norm, now it's hard to find anything but 2 button mice, and the one button Mac mice. (Thanks for nothing Microsoft.) However, Logitech may still make them and I know Belkin does. IBM also makes one that has a scroll wheel and a small button 3 in the middle. Some of these mice, like IBM's, have the buttons arranged 1-3-2 rather than the traditional 1-2-3, but something in XEmacs, or my PC and Mac, seems to straighten them out to 1-2-3 anyway. Having three buttons is very handy with all the mouse toys, particularly without super and hyper modifier keys.
Part of the trouble with getting older is that things keep changing, and, for a programmer at least, few of the changes I've experienced in the last 15 years have been for the better, other than the consequences of increased clock speed and the internet. The other problem with getting older is that you can get to thinking the changes are for the worse whether they are or not.
My schooling is in math, but I got interested in, and found it fun, to program computers. At Texas Instruments, starting in 1979, I was the Pascal instructor for my division, and had the good fortune to then take the last Ada class that Grady Booch taught, with his friend Major R. Bowles, before leaving the Air Force.
Texas Instruments became interested in artificial intelligence (AI), and in 1983 I was eagerly transfered to the artificial intelligence group in my division. I learned Lisp, which I love more than any other language, as well as learning Smalltalk and trying to learn Prolog. Prolog is definitely not as easy as its proponents make it sound. I worked on a lot of interesting projects, few of which really involved any AI, but did have the pleasure of twice getting to debug Zmacs, the Lisp machine, Emacs-like, editor. In a two month period a friend, Paul, and I removed every known bug in Zmacs, over 400 of them, and tested every command in the editor, of which there were over 700. I used to wonder why companies sent out buggy software, but later I learned that such debugging just isn't possible in other computer languages and environments.
My last year at TI, I learned C. It was 1993 and the "AI Winter" had arrived. One day smoke came out of my TI Explorer and I knew that was the end of my happy days with Lisp Machines. I still find it sad that something so wonderful is gone from this world.
At least I had Emacs, Lucid Emacs1 actually, to use. True, it wasn't Zmacs, but it could be modified and enhanced in Lisp to do anything a person had the time and desire to do. So I wrote all the mouse functions from the Lisp machines in Lucid Emacs and a variety of other things I felt I didn't want to live without. A couple friends, Todd and Rick, wrote a file comparison display program that I still use.
My next nine years were spent on Sun computers programming in C++ at i2 Technologies. C and C++ certainly were a big step down from Lisp, and Unix was just as big a step down from the Lisp Machines. I could hardly believe the syntactic hacks upon hacks that are called shells and pass for an operating system interface in Unix! They'd be funny if we weren't forced to use them.
Brian Kennedy, then at i2, had created "C In Emacs" ( CIE ) and you will find that code here also. It's a great set of functionality for programming in C or C++ in [X]Emacs. I rewrote the etags.el file for my XEmacs version, but Brian and his group were Emacs users and so never used the rewrite.
My last year at i2 was spent programming in Java. I got a good start on enhancing the very much C++ and Lisp oriented tags code to work well with Java. I also added some other things for Java. I looked around for a good Java debugger. I don't much like so-called Integrated Development Environments. Typically they are hard to extend, if not impossible. If, for instance, you're debugging a C++ program in Visual Studio 6.0 and want to see the value of a global variable, I think you're just out of luck. Or suppose you want to add commands that interact with special features you've put into the programming you're debugging. You're definitely out of luck there. Gdb and gjdb will evaluate complex expressions in the language in which you're debugging and, if you want a special feature, you can usually add it.
I'm now working at Worksoft, Inc. on a PC. That's a big come down from working on a unix machine. How primitive PCs are! However, I'm still programming in Java and learning a lot. I've had to figure out how to create Java tags tables and work around some DOS and XEmacs deficiencies to get gjdb to work. I'll fix the XEmacs problems eventually, but they're in the C underpinnings and I don't have time now.
I've also found that there are several bugs in the new navigation-java.el code. While it worked great at i2, not everyone follows the standards and practices of my group there, and it seems I made a few unwarrented assumptions in that regard. Those will get fixed as I have time.
I have not tried using JDE-mode for Java in XEmacs, just java-mode. JDE came up as the default when I put XEmacs on my PC a couple months ago. I found immediately that the delete key was bound to delete-char rather than delete-backward-char. I could hardly type in the one line to rebind the key. With no time to waste, I made the possibly unwarranted assumption that the rest of it might be equally unusable and haven't looked at it since. I plan to, just haven't had the time. So my Java XEmacs code is currently meant for Java-mode, though some of it might be handy with JDE. I don't yet know.
So in short, a part of this code is a collection of bug fixes for XEmacs and GJDB. A much larger part is enhancements that are just what a former Lisp Machine programmer, and maybe some others, would want in XEmacs. Another small part is an Emacs version of some of those enhancements, the ones I can hardly work without, so that I can use Emacs on my Macintosh at home. When a working version of XEmacs is available for the Mac I will move to that.
The reason that this is all here is that some of my former co-workers may want to get to it and other people might want parts of it too. One can never tell. At the very least, the bug fixes should be handy for all. I realized too late that I should have given these files to Indiana University years ago, and then was unable to get a disclaimer of copyright signed before leaving i2. They were willing. It just didn't happen. I was advised by the legal department that there was nothing to keep me from posting this code on the web. So here it all is, from very old to very new.