J is a text editor written entirely in Java and distributed under the GNU General Public License.

J runs on Linux and Windows 95/98/NT/2000/XP.

J is free software and comes with ABSOLUTELY NO WARRANTY.

What's New in This Release:
Some minor problems that prevented j from working correctly with the Java 1.5 betas are fixed in this release.

It is now possible to use drag/drop in the sidebar buffer list to reorder the buffers, so that navigating between buffers using nextBuffer and prevBuffer (mapped by default to Alt Right and Alt Left, respectively) is more efficient. Thanks to Mike Rutter for providing the code to do this.

By request, the command wrapParagraphsInRegion has been added. It is mapped by default to Ctrl Shift F12 in plain text and mail composition buffers. wrapParagraphsInRegion walks through the region (or the whole buffer if no region is selected) and, in effect, calls wrapParagraph on each paragraph.

The wrap commands should now do a better job of handling lines that break on the hyphen of a hyphenated word (like "wrap-paragraph"). If the paragraph is subsequently reformatted in such a way that the line break no longer falls on the hyphen in question, the parts of the hyphenated word are now put back together properly. In previous versions of j, you were likely to end up with "wrap- paragraph", with a bogus extra space after the hyphen.

The commands pageUpOtherWindow and pageDownOtherWindow have been added. They are mapped by default to Alt Page Down and Alt Page Up, respectively, in all modes. These commands are helpful in a split-window situation when you want to scroll the other window without switching to it.

The commmand findOccurrenceAtDotAndKillList has been added. It is mapped by default to Ctrl Enter in List Occurrences buffers. It works like findOccurrenceAtDot, but in addition it closes the List Occurrences buffer.

The commands shellNextPrompt and shellPreviousPrompt have been added. They are mapped by default to Ctrl Alt N and Ctrl Alt P, respectively, in shell buffers and their derivatives (including Lisp shells), and they help you find the next or previous prompt, starting from the current location of the caret.

The command p4Log has been added. It runs the Perforce command "filelog -l" on the file associated with the current buffer.

The command p4Diff now runs the Perforce command "p4 diff -f -du", instead of "p4 diff -du". This change means that p4Diff will display potentially useful output even if the file associated with the current buffer has not, in Perforce's opinion, been officially opened for editing.

J's ssh-related code now recognizes "Response:" as a password prompt, in addition the to other password prompts it recognized already.

Compilation buffers are now supported on Windows NT 4. Thanks to Pete Kirkham for pointing out that this was possible.

In previous versions of j, there was an incorrect optimization in the display code which malfunctioned on very rare occasions and caused lines to disappear from the display, even though they were still present in the buffer (there was never any loss of data). This bug has been fixed by removing the optimization in question.

There are a number of new features and minor improvements in Lisp mode and in Lisp shells. Thanks to Sam Steingold for help with many of these.

This release includes version 0.0.4 of Armed Bear Common Lisp. ABCL 0.0.4 passes 17778 out of 17942 tests in the GCL ANSI Common Lisp test suite, for a nominal compliance of 99.0859%. The test suite is still not complete, however, so ABCL's actual percentage of ANSI compliance, whatever that may mean, is undoubtedly lower. In any case, version 0.0.4 represents a substantial improvement over version 0.0.3, back when it was still called Armed Bear Lisp, which passed 12986 out of 14127 tests (91.92%).

ABCL includes a compiler, written in Lisp, that generates JVM bytecode from Lisp source. The compiler is not finished, and there are valid Lisp constructs that it doesn't know how to compile. In most situations, when the compiler encounters code that it can't compile correctly, it is smart enough to leave the code alone so that it will continue to work correctly with the interpreter. Compiled code and interpreted code can coexist happily in the same running instance of ABCL.

The 0.21.0 binary distribution contains a compiled version of the Lisp library code (i.e. a full set of .abcl and .cls files), as well as the Lisp source files for the library code that is implemented in Lisp. If you build j from source, using either configure/make or Ant, the Lisp library code will be compiled as part of the build. There is no longer any need to do COMPILE-SYSTEM manually.

ABCL 0.0.4 is better at some things than others. In particular, it's not very good at CLOS. ABCL's CLOS correctness is reasonable, but its CLOS performance is terrible (for one thing, the compiler doesn't even attempt to compile generic functions). This deficiency is due more to simple neglect than to any intrinsic limitation, and the CLOS implementation should improve in future releases.

You can start ABCL from within j by doing Alt X, "abcl", or by selecting "Run Lisp as Separate Process" from the Lisp menu. Note that the "Run Embedded Lisp" menu selection opens a Lisp shell using an instance of ABCL that runs in the editor process; it only makes sense to do this if you're planning to interact with the running instance of j, which is not normally the case. If you just want to experiment with ABCL, "Run Lisp as Separate Process" (or Alt X, "abcl") is your friend.

If you're truly adventurous, you can also start ABCL from within j by doing Alt X, "slime". J's version of slime is adapted from the "Superior Lisp Interaction Mode for Emacs", originally written by Eric Marsden, Luke Gorrie and Helmut Eller. Slime-for-j is less than a month old, so it is nowhere near as robust or featureful as slime-for-emacs, but in principle it offers more functionality than Alt X, "abcl". In particular, the tab key can be used for symbol completion, function argument lists are displayed in the status bar when you type a space, and Alt . should work to find function definitions (if you've built ABCL from source). In addition, the evaluation of forms and regions in Lisp source files makes an attempt to set *PACKAGE* to the right thing first. I don't think any of these features works 100% correctly yet, but even so, slime-for-j feels like an improvement over the basic Lisp shell functionality available in previous versions of j. For more information, see slime.lisp.

More (and more timely) details about recent changes in j and ABCL are available on the J Development Mailing List, the archives of which are here (or on Gmane).