Java gets a lot of bad press. When people hear Java, they think slow and clunky. I belonged to this crowd. This is why I didn't even see the perfect editor until I became desperate.
You see, I've spent quite a while now looking for a text editor that would be flexible enough to meet all my needs, yet easy enough to grasp that I wouldn't need to read a library of manuals and spend weeks memorizing keyboard shortcuts. I found many that were close, but something would always end up annoying me enough to look further. I'll quickly go over some of my candidates before I delve into the treasure I turned up in the end.
XEmacs/emacs
I first started playing with emacs when I "tested" Brian Bilbrey's excellent tutorial for IBM's Developer Works series, which he tells me should be up at IBM's site Real Soon Now. Initially I was impressed by the staggering amount of power emacs allowed me to wield. It seemed at the time that I was going to be an emacs convert. After fiddling around a while I realized that it just wasn't for me.
I don't think it is a failing in Emacs as much as it is my own stubbornness. I have a set way I like to work on a project, and emacs was making it very difficult to continue in my set ways. I like an editor to have a project manager which provides easy access to any of the source files in the project I'm currently editing. I was unable to find a way to do this in emacs. I also like menus. I find that having a complete set of menus with all the application's features and the keyboard shortcut for that feature allow me to learn all the ways an application can help me write code faster.
vim
I tried vim for a few days, but the whole mode thing drove me up a wall. I really don't want to have to remember to switch modes all the time. I would probably get used to it with time, and perhaps find out that I liked it, but as it also lacked a project management interface, I decided to press on.
Bluefish
Bluefish has very limited syntax highlighting, which really wasn't good enough for me. I've found that I can save much time and effort tracking down silly typos when the color coding tells me right off the word is misspelled. Bluefish also feels very unfinished, and I just didn't like the feel of it. See, I told you I ditch editors over little niggles. =)
To Bluefish's credit, it does have some very neat features, like a menu and toolbar that are editable via a set of XML files. Perhaps a few revs down the line Bluefish will be more satisfying.
Quanta Gold (TheKompany.com commercial Quanta)
Quanta Gold looked very good at the start, but it has all sorts of little quirks that really started to annoy me. First off, if you minimize the app and come back to it, sometimes your windows will have moved back to the top as though the app somehow forgot your scroll position. Next, if you have multiple files open using the "tabbed" view of the editor, and choose the save all feature, it actually scrolls through all the files when it saves and stops at the last tab. This means you lose your scroll position and you are likely looking at a totally different file. Ick. Finally, Quanta Gold is pretty unstable. There are at least two ways I've found to crash it doing totally normal operations. And it doesn't even bother to try to save your data, it just disappears.
Quanta+ (GPLed Quanta)
This editor was actually the closest to taking the crown. However, it is missing little features that I really would like to have. I really like when editors give you some kind of feedback as to what bracket you are closing so you can be sure you close all of them. I also like more intelligent indenting and tab support.
Finally I decided to give Jedit a try, even though it was written in Java. Java is slow and clunky right?
I was getting desperate. I was at the point where I was willing to try anything. I wouldn't have ever considered a Java application otherwise. I found Jedit's homepage while searching Google for alternatives, and was wowed by the screenshots. I decided I'd give it a whirl.
I first looked to see if Gentoo (my Linux Distro of the moment) had an ebuild for it. It didn't, but there were three JRE (Java Runtime Environment) ebuilds to choose from. First, I emerged (Gentoo-speak for download, compile and install) the Blackdown JRE, currently at version 1.3.1. Then I downloaded the RPM for Jedit. At the time I figured that was the best option, as Gentoo has RPM and it works quite well. It would also allow for a clean uninstall which was my chief concern.
So I started Jedit and got an error that my JAVA_HOME environment variable was not set. Had I read the fine manual, I'd have known about this. It was easy to fix. Gentoo installed the Blackdown JRE to /opt/blackdown-jre-1.3.1/ and that's what Jedit wanted JAVA_HOME set to. Once I set the environment variable, I started Jedit.
When the splashscreen came up, clad with a progress bar, I was sure I was in trouble. The startup time was not bad at all, however. It also got better in subsequent starts. Once started, I was quite surprised to find Jedit reasonably fast and responsive. It certainly wouldn't win any races with a C app, but it wasn't anywhere close to being annoyingly slow or clunky. So much for my anti-Java attitude, neh?
As I explored the application, I realized this editor was very powerful and well designed. First off, Jedit has a very powerful plugin system. There are plugins for just about every imaginable thing. So, after I browsed the list on the website a bit, I opened the plugin manager inside Jedit and was shocked to find a complete plugin installation system that gets a list of available plugins from the website and installs the ones you choose. You can even look at a short description of the plugin. One MusePoint awarded.

Figure 2.1 - The plugin installer.
I noticed right away that the mouse wheel wasn't working. I'd seen that there was support for it, and I use the feature constantly in most applications. So I set off in search of information on how to do this. It didn't take long for me to find complete information on the various JREs and their quirks at the Jedit site. It seems that mouse wheel support was added in JRE v1.4, and Sun is the only vendor that currently ships a v1.4 JRE.
So I installed Sun's v1.4 JRE and changed the environment variable JAVA_HOME to point to my new JRE. Jedit started right up, but still lacked mouse wheel support. On a hunch, I checked the plugin installer and noticed a new plugin that enabled mouse wheel support was now on the list. The plugin installer must be smart enough to detect the running JRE and not show plugins that wouldn't work with the current JRE. Another MusePoint awarded for a smart plugin installer.
The Blackdown JRE had detected all my XServer's fonts and made them usable in Java automatically. Sun's JRE ships with a set of truetype fonts of its own, and keeps a separate repository. I wanted to use Courier New, so I copied the .ttf file into the JRE's font directory (/opt/sun-jdk-1.4.0/jre/lib/fonts/ on my system) and restarted Jedit. I was happy to find that the JRE had detected the new fonts and made them available.
All of my needs are met with Jedit and an assortment of plugins. I have a nice project manager where I can easily open files related to the current project called projectviewer. I have a spell checker that integrates with aspell. I have a tab bar of open files via the buffer tabs plugin. I have excellent HTML and XML tag completion and assistance from the XML plugin. Two MusePoints awarded for feature completeness.
Jedit sports a collection of features with the programmer in mind. Braces and parenthesis need never confuse you again with Jedit's helpful highlighting and scope lines. When writing in HTML or XML, Jedit will intelligently close tags for you by completing the start of a close tag for you. Jedit will also highlight any braces or tags that don't get closed with a red squiggly line.
I do quite a bit of PHP editing, and Jedit seems to know exactly how I like to indent my code and it automatically does all of it for me. Also, after the placement of some special code comments described in the manual, bits of code can be folded. See figures 2.2 and 2.3 for examples of this.

Figure 2.2 - Folding: The highlight marks a "collapsed" function.

Figure 2.3 - A scope line, vertical in the left margin.
Jedit has a powerful statement completion engine which makes writing code a snap. It detects the language you are using and if asked will prompt you with the possible completions for the current keyword. This is very helpful if you know a keyword starts with "foo," for example, but don't remember how it ends. It has a quirk though, in that it sometimes pops up when unrequested. I haven't yet found a way to turn this off, so Jedit gains one MusePoint for this neat feature and a loses a point for its buggy state and for not being able to turn it off.
UPDATEI heard back from the lead developer (Slava Pestov) on this, and it turns out that this is partially a bug and partially a confusion on my part. The XML plugin, which also does some nice statement completion for HTML, is what was popping up unrequested. This is easily disabled by going to General Options->Plugin Options->XML->Completion. The specific instance that was annoying me was occurring in the below example:
<A HREF="foo.php?bar=1&cat=1">
The pop-up was appearing when I typed the ampersand (&). Slava informed me that the pop-up should never occur in a string literal and that it would be corrected in the next release of the XML plugin. Therefore Jedit gets its MusePoint back!
As an aside, the XML plugin is excellent, and has saved me lots of time.
Learning to use Jedit turned out to be very easy thanks to the fantastic documentation. As I'm sure you know, documentation often is a weakness with free software. Jedit is definitely an exception to that. One MusePoint awarded.

Figure 2.4 - The help system.
Choosing an editor is a very personal choice. While it took awhile for me to find it, I am finally in a state of editor bliss with Jedit. It is my hope that if you're not in that same state of nirvana that you'll give Jedit a try. The price is right and I think you'll be a convert after just a few minutes of fiddling.
Jedit has to be the best editor I've used in Linux. Over the course of the article it received five MusePoints, which are a subjective rating system that doesn't carry any weight when compared to other reviews. Brian invented them and I liked the idea so I stole them.
I used Jedit to write this, of course, running on a Gentoo Linux 1.1a workstation with all sorts of tweaks and changes. This article is presented to you through the magic of MagaMuse, a content management system with webzines in mind written by Greg. Watch for a GPL'd release RSN. Layout and graphics were mostly crafted by Brian with a few breaks here and there added by Greg. The rule of thumb here is that if it looks good, Brian did it.
Linux is a registered trademark of Linus Torvalds. Linux systems contain a large component of GNU Software, see www.gnu.org for details.
All other brand and product names are or may be trademarks of, and are used to identify the products and services of their respective owners.
All other content Copyright (C) 2002 Linux Muse. Powered by MagaMuse v0.3.5, (C) 2002 Greg Lincoln.