JEDIT 4.0 VERSION HISTORY

* Version 4.0.3

+ Bug Fixes

- Added missing check for control key being down in text area mouse
  handler.

+ API Changes

- Buffer.getRuleSetAtOffset() method is now public.

* Version 4.0.2

Note that jEdit 4.0.1 was never released.

+ Enhancements

- Documentation is now generated with DocBook-XSL 1.51.1 stylesheets.

+ Bug Fixes

- Fixed silly windows backup saving bug.

- Fixed minor problem when Control-clicking characters in the text area.

- Fixed print output spacing problem.

* Version 4.0.1

+ Bug Fixes

- A single invalid file system browser coloring regular expression no
  longer stops the remaining expressions from being loaded.

- Fixed a bug in the undo request merging code that would occur
  sometimes when multiple consecutive pieces of text were removed one
  after the other.

- Fixed a bug in the undo request merging code that would occur when
  a selection was replaced with some text.

- If the splash screen was disabled, running jEdit with the -nogui and
  -nobackground command line arguments didn't work, because the AWT
  event thread was never started, because no GUI calls were made, and as
  a result jEdit exited immediately after starting up instead of
  entering the event loop.

- Fixed erronous assignment in VFS browser code that would cause
  NullPointerExceptions after opening a file in a new view.

- Triple-clicking on the last line of a file printed an
  ArrayIndexOutOfBoundsException.

- One of the tips of the day referred to an invalid URL.

- Previously, the filesystem browser opens the clicked directory if
  clickCount == 2. This doesn't work if you double click once and then
  immediate double click again on a directory (or a file) at the same
  physical location, because the 2nd double click is reported with a
  click count of 3 and 4. (Alexander Maryanovsky)

- A few printing bugs fixed, including the notorious print output
  spacing problem.

- The help viewer should no longer open behind the view when jEdit is
  run for the first time on some Java implementations.

- StatusBar.MemoryIndicator.removeNotify() was missing a
  super.removeNotify() call. This could cause 'InputContext' errors when
  exiting jEdit. (Alexander Maryanovsky)

- The plugin manager did not delete downloaded files from the
  'PluginManager.download' directory on some operating systems, due to a
  missing close() call.

- JEditTextArea.goToEndOfLine() (bound to END if 'smart home/end' is
  off, or END END if its on) followed by goToNextLine() would move the
  cursor to the first column.

- Preview_Javadoc_of_Buffer.bsh macro used the deprecated
  DockableWindowManager.getDockableWindow() method.

- Text area would not automatically scroll to the caret location when
  working with multiple views under certain circumstances.

* Version 4.0final

+ Enhancements

- Updated POV-Ray syntax highlighting (Jan Schfer)
- Hidden files are no longer listed in the 'Macros' menu
- Minor improvements to RPM Spec syntax highlighting
- Updated Python mode (Ollie Rutherfurd)
- Documentation updates

+ Bug Fixes

- roots: filesystem tweak didn't work (Carmine Lucarelli)
- After doing a HyperSearch in a selection, the HyperSearch Results
  window would always say 'found 0 occurrences in 0 files'
- Using 'Save As' and entering a file name ending with .gz did not GZip
  the resulting file
- Fixed minor boo-boo when buffer sorting was on and several files with
  the same name were open
- Browser view didn't check key events for modifiers so if the browser
  had focus and a shortcut key was pressed a semi-random item would be
  selected in the file list
- Added workaround for JDistro desktop
- Fixed possible ArrayIndexOutOfBoundsException if a line is
  soft-wrapped to more screen lines than can be displayed at once. Note
  that this case still won't be handled very well, but at least jEdit
  will no longer throw a fit when it occurs
- When opening a floating dockable, the default component will be given
  focus. Previously this was only done for docked windows
- Fixed typo in General option pane
- Fixed race condition in work thread pool that could result in blank
  files on startup
- Fixed typo in css.xml
- Fixed minor problem in HTML version of user's guide
- Fixed possible "Unbalanced begin/endCompoundEdit()" if BeanShell
  replace fails
- Fixed an off-by-one error that would cause Control-clicks beyond the
  end of a line to fail

* Version 4.0pre9 (a.k.a 4.0 release candidate 2)

+ Enhancements

- The plugin manager now downloads the plugin list in GZipped format
  from the server. This should especially be noticable for dial-up users
- Minor search bar layout tweak
- The roots: filesystem should now show extra information when running
  on Windows with JDK 1.4 (eg, you should able to see the UNC paths of
  network drive mappings)
- Documentation updates

+ Bug Fixes

- Fixed QuickNotepad build.xml
- Explicit folding did not behave correctly if a line contained both the
  start and end strings ({{{ and }}}) (Ollie Rutherfurd)
- If a plugin depended on a plugin whose jEdit version requirement was
  higher than the installed jEdit version, the 'Update Plugins' command
  would throw a NullPointerException
- Fixed stylesheet problem in the PDF output
- Changing the 'print tab size' setting had no effect
- Changed tip of the day that mentioned an obsolete version of
  WheelMouse
- Fixed possible ArrayIndexOutOfBoundsException in findMatchingBracket()
- Fixed some bugs in HyperSearch when searching for .*, .*$ and $
  regular expressions
- Removed custom quicksort implementation from MiscUtilities (the
  methods are still there, but they just call
  java.util.Collections.sort())
- Fixed a few more possible ClassCastExceptions due to use of
  non-typesafe buffer property accessors
- If a search matcher cannot be created (eg, invalid regexp) the
  HyperSearch results window will no longer be stuck with a
  'Searching...' message
- Fixed gutter autoscroll

* Version 4.0pre8 (a.k.a 4.0 release candidate 1)

+ New Features

- Added syntax highlighting for output of Hex plugin (Andre Kaplan)
- IBM Informix 4GL syntax highlighting (Vicente Salvador)

+ Enhancements

- Documentation updates
- 'Quick HyperSearch' with a selection, and 'Quick HyperSearch for Word'
  commands will now work even if the search bar is disabled
- BeanShell 1.2b5 included
- jEditLauncher 4.0.4 (John Gellene)
  - jedidiff.exe: new command line utility for displaying graphical
    comparison of two files using jEdit and the JDiff plugin
  - jedit.exe: new /1 command line switch that reads the remainder of
    the command line as a single file path, regardless of whitespace
    (required for Internet Explorer integration)
  - jEdit_IE.reg.txt: new, optional Windows registry information file
    for integrating jEdit with Internet Explorer (version 5 or later) as
    an HTML editor

+ Bug Fixes

- Fixed tip of the day that referred to the old S+BACK_SPACE/S+DELETE
  bindings
- Due to a typo in 4.0pre7, text areas that didn't have focus would also
  scroll to the caret location on a buffer change. This was not supposed
  to happen
- The text area will no longer scroll up and then down again on input if
  it is smaller than about six lines vertically
- Added workaround for search dialog box losing focus after 'keep
  searching' message shown
- If an error occurs while evaluating a BeanShell snippet during a
  'Replace All', the replace operation is aborted. This saves you from
  having to click through an endless stream of "BeanShell error" dialog
  boxes
- Status bar message shown while mouse was hovering over a macro menu
  item wasn't hidden after the menu item was selected
- Fixed another soft wrap bug with syntax highlighting
- Middle-mouse-drag (quick copy) failed if the selected region ended or
  began at the caret position
- Changed behavior of numeric keypad keys once again. Since some Java
  versions have a broken Toolkit.getLockingKeyState() (hence there is
  no reliable way to know of NumLock is on), they now work as follows:
  - If an action is bound to a key, the action is executed when the key
    is pressed.
  - If no action is bound, the character is inserted when the key is
    pressed.
- Cleaned up handling of changing fold handlers and 'collapsedFolds'
  property. This should fix a few obscure bugs
- Consecutive backspaces of characters would not be merged into one undo
- Updated to a gnu.regexp 1.1.5 CVS snapshot. This fixes the bug where
  replacing the regular expression $ with a string did not change the
  last line of the buffer
- The file system browser's divider position would not be remembered if
  it was collapsed all the way
- Layout of 'Install Plugins' dialog box was a bit broken
- Added a workaround for bug on Windows where a few Alt-key sequences
  (Alt-Left, Alt-Right, Alt-Up, Alt-Down, Alt-PageUp, Alt-PageDown)
  inserted garbage in the text area
- Firewall code would throw a NullPointerException on startup if the
  user name was non-null, but the password was empty
- When doing a BeanShell replace, the last subexpression would not be
  stored in a variable
- 'Write HyperSearch Results' macro did not work
- Caret event would not be fired if inside a compound edit, a portion of
  text was changed after the caret, then a change was made before the
  caret
- 'Run Other Macro' command would silently ignore files whose names did
  not match a registered macro handler

+ API Additions

- Added new method: MiscUtilities.getFileNameNoExtension(String path)

+ API Changes

- The 'rethrowBshErrors' parameter of the eval() and runScript() methods
  in the BeanShell class never did anything, so methods with that
  parameter have been deprecated:

  - BeanShell.eval(View,NameSpace,String) replaces
    BeanShell.eval(View,String,boolean) and
    BeanShell.eval(View,NameSpace,String,boolean)

  - You should pass BeanShell.getNameSpace() as the value of the
    namespace parameter to mimic the behavior of the old form which did
    not accept a namespace.

  - BeanShell.runScript(View,String,Reader,boolean) replaces
    BeanShell.runScript(View,String,boolean,boolean) and
    BeanShell.runScript(View,String,Reader,boolean,boolean)

  - You can pass 'null' as a Reader now, to mimic the behavior of the
    old Reader-less form.

  - Some new methods were added that throw exceptions instead of showing
    error dialog boxes:

    BeanShell._eval(View,NameSpace,String)
    BeanShell._runScript(View,String,Reader,boolean)

  - I have also made error reporting to the user more consistent in the
    process.

* Version 4.0pre7

+ Enhancements

- Yet-another-optimization to file loading. Directory search should be
  even faster
- Added a hack to prevent the WheelMouse plugin version 0.5 from being
  loaded under JDK 1.4
- It should now be possible to bind shortcuts to the numeric keypad,
  although this might not work perfectly on all Java implementations due
  to implementation bugs
- MacOS plugin version 1.1 (Kris Kopicki)
- 'Expand Folds With Level' and 'Expand All Folds' commands now scroll
  the text area to the caret position if necessary
- Documentation is now generated using DocBook-XSL 1.49, DocBook-DSSSL
  1.76
- Some people found it confusing that 'Delete to Start of Line' and
  'Delete to End of Line' were bound to S+BACK_SPACE and S+DELETE,
  respectively, because it was easy to accidentally invoke them when
  you meant to press just BACK_SPACE or DELETE if you were typing some
  capitalized text. Now the shortcuts of these commands has been changed
  to CS+BACK_SPACE and CS+DELETE, respectively.
- BeanShell 1.2b41 included
- Documentation updates
- Moved 'more accurate syntax highlighting' option from 'Loading and
  Saving' option pane to 'Text Area' option pane

+ Bug Fixes

- First time jEdit was run, the file system's divider position would be
  such that the parent directories list would be invisible
- 'End' key didn't work properly
- Due to the changes in buffer property handling caused by the
  transition to the new document model, new files would always have the
  system default line separator and encoding, instead of the defaults
  that were specified in the 'Loading and Saving' option pane
- Changing the fold mode by clicking in the status bar did not expand
  currently collapsed folds, which could result in portions of the
  buffer becoming inaccessable
- Fixed ugly memory usage indicator on MacOS X
- Even when 'quick copy' was disabled in the text area option pane, the
  middle-drag feature would still be active
- Fixed ArrayIndexOutOfBoundsException when triple-clicking on the only
  line of a blank new file
- Fixed repaint slowdown that would happen when switching menus on some
  JDKs
- If the file system browser was set to show hidden files by default,
  the state of the 'show hidden files' menu item in the browser's
  "Commands" menu would be reversed
- Fixed dockable panel layout problem if there were more buttons than
  can fit
- Fixed a problem when dockable panels were larger than the size of the
  view
- 'Select All' button in close dialog box didn't work
- Shortcuts assigned to CA+x where x was a letter didn't work. I hope
  the fix for this didn't break AltGR sequences; let me know if it did
- 'Run Last Macro' and 'Run Other Macro' commands assumed the macro was
  written in BeanShell (Mike Dillon)
- 'Toggle Line Comment' macro was broken
- Hard wrap didn't work properly if space was pressed at the end of a
  line whose length was exactly that of the wrap margin
- Searching for .*, ^ by itself and $ by itself should now work
- Fixed another problem with soft wrapping syntax highlighted buffers
- Soft wrap would break if a line ended with enough whitespace to be
  longer than the wrap margin
- When using 'save as' to save over an already opened buffer, the
  already opened buffer is closed first. This prevents having two open
  buffers with the same path (and possibly different contents)
- Changed shortcut of 'go to next/previous bracket' to C+e C+[/C+] since
  shortcuts such as C+e [ are tricky to handle
- Fixed possible NullPointerException in search and replace code
- Replace All in selection now works with rectangular selections
- Selection.Rect.getEnd(Buffer,int) returned incorrect values
- 'Range Comment' command didn't work properly with a rectangular
  selection
- Control-Shift clicks in the text area didn't work
- Rectangular selections are now drawn correctly when soft wrap is
  active. Note they are still rather non-intuitive when used with soft
  wrap, as they rely on character offsets within physical lines, not
  screen positions in screen lines.
- If a save operation fails, the buffer's modified flag is no longer
  cleared, and if it was a 'save as' the buffer is not renamed either
- Path names of the form "X:foo" (with no \ after the drive letter), and
  UNC paths (\\servername\directory\file) will no longer cause problems
  on Windows

+ API Additions

- View.addToolBar(int group, int layer, Component comp) method
  (Mike Dillon)
  - group: one of View.TOP or View.BOTTOM
  - layer: any integer, some predefined constants are in View.java. This
    lets you define the approximate position, from the top or bottom of
    the view, of the tool bar

+ API Changes

- The current line highlight and collapsed fold highlight is painted as
  a text area extension now, so plugin extensions can now paint stuff
  below this highlight

* Version 4.0pre6

+ New Features

- Enhanced quick copy feature:
  - Dragging with the middle mouse button now creates a selection
    without moving the caret, when the mouse button is released the
    selected text is inserted at the caret position and the selection is
    deactivated
  - A status bar message is shown while middle-dragging to avoid
    confusion
  - This is disabled by default -- enable in Text Area option pane
- Modula-3 syntax highlighting (Marcio Marchini)
- Smalltalk syntax highlighting (Marcio Marchini)

+ Enhancements

- Minor tweaks to VFS path code, that should make things a bit smoother
  for the FTP plugin
- Updated Prolog syntax highlighting (Giulio Piancastelli)
- Hard wrapping is now performed if there is only whitespace between the
  caret and the end of the line
- Pressing the Up or Down arrow when the caret is the first or last line
  of the buffer moves the caret to the beginning and end of the buffer,
  respectively
- Only one 'Search and Replace' dialog can be opened per view. Note that
  due to bugs in the Linux (and probably other Unix) Java
  implementation, the dialog has to be mometarily hidden and shown again
  for this to work
- Favorites menu in file system browser is now sorted using a
  case-insensitive sort
- Improved behavior of 'Plugins' menu when lots of plugins are installed
- Slightly faster scrolling
- Added 'Close' command to file dialog's right-click menu
- Removed funky background token's "paint to end of line" behavior
- Saving a file no longer causes cached token information to be flushed
  (doing this on a save was kind of pointless)
- Entering a new path in a file dialog box and clicking 'Open' now sets
  the browser's location to that path
- Home/end commands, up/down arrows are now soft-wrap-aware
- Documentation is now built using DocBook-XSL stylesheets 1.48
- Optimized text area's buffer event handler -- this should result in
  faster 'Replace All'
- Addition to jEdit's glob syntax: "{!glob}" is converted to the
  regular expression "(?!glob).*"
- You can double-click abbrevs in the 'Abbreviations' option pane to
  edit them
- If the block caret is enabled, the overwrite caret is now 1/3 the
  height of a character
- Documentation updates (me and John Gellene)
- Changes to build.xml; documentation on compiling from source now part
  of the source distribution (README.SRC.txt)
- Restored word command behavior to how it was in jEdit 3.2

+ Bug Fixes

- Malformed URL errors were not being reported correctly
- Fixed exception when double- or triple-click dragging (this was meant
  to be fixed in pre5 but I didn't get the fix quite right)
- Fixed NullPointerException when opening a new view
- Out of memory errors were not always reported
- Fixed minor inconsistency in handling of words -vs- keywords in
  'Complete Word' command
- Properly fixed 'unprintable characters in table of contents' bug
- Replace in selection would preserve the current selection, but not
  the caret position, so if there was a match at the start of the
  selection, the caret would move inside the selected range
- On Windows, double-clicking on a drive letter in the drives list of
  the file system browser would open the wrong location
- Focus manager under JDK 1.4 used the wrong traversal policy, this
  caused a few problems
- The status bar message shown when a bracket is out of bounds was not
  always being displayed if soft wrap was in use
- Fixed silly behavior in 'Install Plugins' dialog box
- Fixed possible NPE when loading tool bar with buttons for which
  actions do not exist
- Fold level changed events were not fired; this caused problems with
  indent folding
- Changing the fold mode using the 'Buffer Options' dialog box in a
  buffer that defined the 'collapseFolds' property could have slightly
  bizzarre results, because the folds were collapsed before the fold
  handler was changed
- Creating rectangular selections on MacOS was not possible since both
  the context menu and the rectangular selection was bound to
  Control-click. Now, you can Command-drag to create rectangular
  selections on MacOS
- Since the 'apply text area colors to all components' setting only
  fully took effect after a restart, jEdit.propertiesChanged() no longer
  performs the initialization for this setting, instead it has been
  moved to the startup sequence
- Fixed problem with markers returning to their original locations on
  save
- Removed obsolete option from 'Docking' option pane
- Fixed possible ArrayIndexOutOfBoundsException when expanding and
  collapsing folds near the end of the buffer
- 'Add Explicit Fold' command did not work properly with multiple
  selections
- Scrolling would not be performed when text was inserted sometimes, due
  to the last physical line index not being updated properly
- If tokens had background colors defined, scrolling horizontally would
  draw the backgrounds as if no scrolling had taken place
- When closing the last buffer, the edit pane would retain a reference
  to it in the 'recent buffer' field, and using the 'Go to Recent
  Buffer' command would result in weird things happening
- Setting the lineSeparator buffer property to override the line
  separator for a specific file did not work
- Fixed (harmless) missing resource exception when starting jEdit for
  the first time
- Fixed possible ArrayIndexOutOfBoundsException when using the
  'Collapse Fold' command (clicking fold triangles in the gutter still
  worked though)
- Removing text from the middle of a line with soft wrap on might not
  repaint the text area properly
- Added missing 'read error' and 'write error' I/O error strings
- Workaround for Graphics2D.setPaintMode() bug on Windows placed in
  background token painting code as well
- Memory indicator in status bar looked stupid on Windows L&F and other
  look and feels where the text color and progress bar foreground was
  the same
- Possible fix for 'timeout' error when opening a large number of files
  with jEditLauncher on Windows
- Autosave would stall the editor because it grabbed a read lock for the
  entire operation
- 'New File' command no longer creates read only buffers if the current
  buffer is located on a read-only filesystem
- jEditLauncher 4.0.2 fixes several bugs in the installer module
  (John Gellene)

+ API Additions

- Support for macros written in other languages (Mike Dillon)
  - Macros.registerHandler(Macros.Handler handler) method
  - Macros.Handler class has these methods:

    public abstract Macro createMacro(String macroName, String path);
    public abstract void runMacro(View view, Macro macro);
    protected Handler(String name)

  - 'name' is used to key "macro-handler.<name>.label" and
    "macro-handler.<name>.glob" properties.
  - One minor UI addition is that the language a macro is written in,
    along with the full path to the macro file is shown in the status
    bar when the mouse is over a macro's menu item or tool bar button.

- Support for pluggable fold handlers (Mike Dillon)
  - FoldHandler.registerFoldHandler(FoldHandler handler) method
  - FoldHandler class has these methods:

    public abstract int getFoldLevel(Buffer buffer, int line, Segment seg);
    protected FoldHandler(String name)

* Version 4.0pre5

+ New Features

- ObjectRexx syntax highlighting (George Hovey)

+ Enhancements

- If jEdit runs out of memory while loading a file, it now reports the
  error using the standard I/O error reporting method, instead of just
  dumping an exception in the activity log
- If indent folding is enabled, lines consisting of white space only no
  longer inherit the fold level of the previous line
- QuickNotepad plugin compiled by default
- FAQ updates (John Gellene)
- The "Open in New View" command has been re-added to the file system
  browser right-click menu
- Pressing ENTER in the file system browser no longer closes the
  selected file if 'double click close' is enabled; now, only double-
  and middle-clicks can close open files
- NEWS.txt written
- Updated Pascal syntax highlighting (Barry Carr)
- 'Spaces to Tabs' and 'Tabs to Spaces' now operate on the entire buffer
  if there is no selection (Ollie Rutherfurd)
- 'More accurate syntax highlighting' option is now even more accurate;
  when editing PHP files with very long embedded scripts, you should
  never see the highlighting mess up
- Documentation updates
- Tweaked word and line selection behavior
- Previously, jEdit would only parse the first 10 lines of a buffer for
  buffer-local properties; now the last 10 lines are parsed as well
  (Ollie Rutherfurd)
- jEditLauncher 4.0.1 (John Gellene)

+ Bug Fixes

- Removed unnecessary menu bar hack on MacOS X
- Tab width would be wrong on some JVMs
- Tighter layout in the file system browser's parent directory list
- The Commands->Root Directory command in the file system browser opened
  the 'roots:' VFS even on systems where it is not used (ie, Unix)
- Tool bar buttons had incorrect tool tips
- In the total size tally, the plugin manager didn't add the sizes of
  plugins that would be implicitly installed due to dependencies
- Plugin manager displayed the wrong message when installing plugins
- 'Print' command threw a NullPointerException if 'print header' was
  disabled
- Selection wasn't cleared when switching buffers sometimes. This caused
  problems
- If the block caret was enabled, mouse clicks would position the caret
  in the wrong location
- Files would not be saved properly if two stage saving was disabled and
  backups were enabled
- Workaround for Graphics2D.setPaintMode() bug on Windows (John Gellene)
- Docked windows can no longer be made larger than the width or height
  of the view
- If the first narrowed line was not a fold start, newly inserted lines
  within the narrowed region would become invisible
- Making changes to the last line in the buffer that would result in the
  line being wrapped would result in incorrect repaints
- Double-click and triple-click drags would throw exceptions if the
  mouse was moved outside the text area
- Fixed several bugs when painting tokens with a background color
- File system browser would throw NullPointerExceptions when loading
  directories under some circumstances
- Fixed ArrayIndexOutOfBoundsException when loading a file with saved
  markers
- Running "jedit -usage" and "jedit -version" produced no output
- Floating window positions were not saved
- Fixed arrow keys in HyperSearch Results window (again...)
- Fixed Java, C, C++, and similar mode's auto indent bug
- Fixed minor problem when indenting a line containing "{{{"
- When I overhauled the action system in jEdit 4.0pre1, I tried to
  preserve compatibility with macro shortcuts set in previous versions,
  but I did it incorrectly. This has been fixed; if you set macro
  shortcuts with 4.0pre1-pre4, you will need to set them again, but
  shortcuts set in 3.2.2 should work without any trouble.
- If the 'BeanShell replace' radio button was selected, the search and
  replace dialog box would open with the replace field's history set up
  incorrectly.
- Sometimes the scroll bar would not be updated correctly when opening a
  file
- Disabling anti-aliasing might work now on MacOS X
- Macros that switch buffers should no longer result in an error being
  printed to the activity log when they finish executing
- Fixed long-standing docked window button layout bug
- Triple-click drag didn't support selective selection of the trailing
  line feed due to some changes in pre4
- If a very long string is selected, the Search and Replace dialog will
  not be unacceptably wide when 'Find' is invoked
- Fixed broken soft wrap in syntax highlighted files
- Made sure that all XML mode files now validate against the xmode.dtd
- Print jobs would be named 'true' (or 'false' if you were lucky)
- Fixed unprintable characters in the help table of contents
- Added minor hack to jEdit.initMisc() so that plugins wishing to use
  the JAXP API to access the XML plugin's Xerces parser can work
- Fixed some focus problems with 'Complete Word' command
- 'Center caret on screen' command threw an exception if the buffer was
  shorter than the number of visible lines divided in half
- "Scroll to caret" code is now soft wrap-aware

* Version 4.0pre4

Note that jEdit now has a source file, Java14.java, that only compiles
under Java 2 version 1.4. If you're using Java 2 version 1.3 and wish to
compile jEdit from source, you should comment out the "jdk14" property
in build.xml.

+ New Features

- Soft wrap.
  - Three wrapping modes are available:
    "none" - no wrapping is performed
    "soft" - soft wrap
    "hard" - this is the old hard wrap feature that has been available
    since jEdit 3.0.
  - Change the wrap mode in Global Options or Buffer Options
  - When soft wrap is enabled, you can set the 'Wrap margin' setting to
    zero to wrap to the width of the text area.
  - Some plugins will need to be updated; see below
- Two JDK 1.4-specific options added to 'Appearance' option pane:
  'Draw window borders using Swing look & feel', 'Draw dialog box
  borders using Swing look & feel'. Both are disabled by default.
- New 'Keyboard Tester' command in Utilities->Troubleshooting menu; it
  displays a 'grab key' dialog and dumps key events into a new buffer
- Option to split file dialogs vertically (Ollie Rutherfurd)
- Plugin manager's install plugins dialog box now shows plugin download
  sizes, and has a slightly improved look
- jEdit Frequently Asked Questions is now included in the online help
  (John Gellene)
- Prolog syntax highlighting (Giulio Piancastelli)

+ Enhancements

- Firewall plugin integrated into editor core
- Global Options dialog box now has an 'Overview' page
- Better GZIP file auto-detection; previously, jEdit would check for a
  filename extension of .gz, now it checks for the GZIP magic number at
  the start of the file
- Unicode files are now automatically detected as being such, and opened
  with the Unicode encoding
- 'Narrow to Fold' on a collapsed fold now automatically expands the
  fold
- The complete word changes started in 4.0pre3 are now complete.
  - UP/DOWN arrow keys wrap selection around in complete word list
  - Keywords are now completed (and shown in the list in a bold font)
  - The popup is updated on the fly if you type or press BACKSPACE while
    it is showing
- In the file system browser, trying to add a file to the favorites now
  adds that file's directory to the favorites, instead of showing an
  error message
- The edit server now un-iconifies the view, if necessary
- Updated ML mode (Ingmar Stein)
- Printing code rewritten to use Java 2 print API. The only user-visible
  change is that the printed output is now word-wrapped.
- The file system browser now preserves expansion state when reloading
  directories
- On Unix operating systems, the roots: VFS is no longer available,
  since it is not necessary (Unix systems have a single file system
  root, /)
- Changed file system browser to underline open files, not show a black
  chunk next to their names
- Closed three possible holes in the edit server:
  - Opening a socket and leaving it open no longer stops other clients
    from connecting; there is now a 1 second timeout
  - Opening a socket and sending a whole load of crap, all on one line,
    no longer causes the edit server to read it in; the protocol has
    been changed to send the authorization key in binary as four octets,
    as opposed to in a line of text
  - On some braindamaged Unix systems, users can read files in each
    other's home directories. jEdit now explicitly sets the server
    file's permissions to 0600 to work around this brain damage
- Improved JSP syntax highlighting (Daiji Takamori)
- Quick-copy (middle mouse button pasting most recent selection) is now
  disabled by default, since people seem to get confused by it to no end
  when they accidentally click the middle mouse button while using a
  wheel mouse to scroll
- Shift-double click and shift-middle mouse button clicks in the file
  system browser now open files in a new view
- Minor search and replace dialog box usability improvements:
  - Keep dialog on by default
  - Somewhat confusing 'Replace' button removed
- Faster HyperSearch
- Updated Foxpro mode (Matthew J. Price)
- jEditLauncher version 4.0 (John Gellene)
  - Revised installer module
  - Logging feature for easier troubleshooting of installation problems
  - Updated for 4.0pre4 EditServer changes (but backwards compatible
    with older jEdit versions)

+ Neutral

- Tips moved to doc/tips directory; documentation is no longer inside
  the JAR

+ Bug Fixes

- Next-fold command was slightly broken
- Fixed possible plugin manager NPE when installing incompatible plugins
- On some Java versions, the plugin manager's progress windows would
  hang until explicitly given focus
- Minor fix for S+HOME/S+END behavior
- Fixed for weird caret position after control-clicking a closing
  bracket
- The position of the wrap guide is now determined using the Java2D API,
  so it should be correct now. Previously, it could be drawn in the
  wrong place if anti-aliasing was enabled
- The tab width is also determined using the correct APIs
- Fixed possible NullPointerException in VFS file dialog box
- Fixed minor bug in 'Select Fold' command
- Fixed some JDK 1.4-specific bugs:
  - The 'select text on focus' feature of some text fields fixed
  - File system browser's type select fixed
  - Keyboard shortcuts only worked in the text area
  - Sometimes keyboard focus would jump to the search bar
  - Unfortunately, fixing the last two required the use of Java
    1.4-specific APIs. As a result, the Java14.java source file will not
    compile under a 1.3 JDK.
- Embedded tabs in lines would show up as boxes in bracket matching
  status bar messages
- Sometimes hard tabs would be inserted into the buffer, even if soft
  tabs were enabled
- Trying to reload a read only file would fail
- Fixed possible NullPointerException in 'Styles' option pane
- I removed the feature that automatically folds newly inserted text as
  necessary, because it had too many problems
- Changed some tree cell renderers to work around problems experienced
  on MacOS X
- Fixed possible ArrayIndexOutOfBoundsException when closing a view
- File name and first line globs were not shown in the 'Mode specific'
  option pane
- Fixed ArrayIndexOutOfBoundsException when scrolling a one-line buffer
  with the WheelMouse plugin
- "Insert File" was broken since 4.0pre1
- Text area syntax highlighting would not always be updated properly
  when switching modes
- Display_Shortcuts macro didn't work
- jEdit would hang if 'Find Previous' was invoked while regular
  expressions were enabled
- "Narrow to Fold" would never include the last line of the buffer in
  the narrow, even if it was part of the fold in question

+ API Additions

- BufferUpdate.SAVED message type added. Previously, DIRTY_CHANGED could
  be used for this purpose, but since jEdit now clears the dirty flag
  when all changes up to a save are undone, doing on-save actions when a
  DIRTY_CHANGED is received can have unexpected consequences.
- New method: MiscUtilities.quicksort(List a, Compare a)
- MiscUtilities.Compare now extends java.util.Comparator (which has the
  same API)
- MiscUtilities.quicksort(Object[],Compare) now calls
  java.util.Arrays.sort()
- MiscUtilities.quicksort(Object[],Comparator),
  MiscUtilities.quicksort(List,Comparator) methods added
- The above changes are completely binary compatible, and they make
  jEdit's sorting API more consistent with the Java collections API.
- New OperatingSystem class, with the following methods:

  isDOSDerived(), isWindows(), isWindows9x(), isWindowsNT(), isOS2()
  isMacOS()
  isUnix()
  hasJava14()

+ API Changes

- Offset conversion API changes. Old methods (xToOffset(), offsetToX(),
  yToLine(), lineToY()) deprecated; you must now use xyToOffset() and
  offsetToXY() instead. Also note that xyToOffset() will return -1 if
  the y co-ordinate is not visible in the text area.
- The BufferChangeListener API was inconsistent. foldLevelChanged() was
  called with the last two parameters being a start and end line,
  respectively, but the documentation claimed that the first parameter
  was a single line index, and the second was a fold level. This was an
  error on the part of the documentation, and has since been fixed.
- TextAreaExtension API replaces TextAreaHighlights. It now supports the
  concept of 'layers', so you can for example add an extension that will
  be painted below the selection (the JDiff plugin wants to do this).

* Version 4.0pre3

jEdit now requires Java 2 version 1.3 or later! Java 2 version 1.2 and
Java 1.1 can no longer be used to run jEdit.

+ New Features

- Two-stage save (where a file is first saved to #filename#save#, then
  renamed to the actual file name) can be disabled in the 'Loading and
  Saving' option pane
- -noplugins command line switch added
- Added option to have backups created on every save (default is to only
  create one backup for each file, until it is closed)
  (Ollie Rutherfurd)
- 'Extra word characters' setting added to Editing option pane
- 'Range Comment' and 'Line Comment' commands now behave correctly when,
  for example, inserting comments in inline JavaScript in an HTML file.
  - The new Buffer.getContextSensitiveProperty() method first checks the
    properties of the parser rule set at the specified offset; then the
    edit mode that contains that rule set; and finally, the edit mode of
    the buffer itself.
  - In mode files, you can now place a PROPS element inside a RULES
    element to define ruleset-specific properties. Currently, only the
    'commentStart', 'commentEnd' and 'lineComment' properties can be
    ruleset-specific.
- 'Search->Incremental Search for Word' command puts the word under the
  caret in the search bar
- 'Search->HyperSearch for Word' performs a HyperSearch for the word
  under the caret
- View->Folding submenu is now a top-level Folding menu. A few commands
  have been added:
  - Add Explicit Fold (C+e a): surrounds the selection with explicit
    fold markers ({{{ and }}})
  - Go to Previous/Next Fold (A+UP, A+DOWN): self-explanatory. Go to
    Previous/Next Marker, which were formely bound to A+UP/DOWN, are now
    bound to C+e , and C+e ..
  - Go to Parent Fold (C+e u): moves caret to fold with a higher level
    than the one containing the caret
  - Narrow to Fold (C+e n n): equivalent to invoking 'Select Fold', then
    'Narrow to Selection'
  - Narrow to Selection (C+e n s): this command is the same as before,
    but has a new shortcut
- ActionScript syntax highlighting (Ben Glazer)

+ Enhancements

- C+LEFT/C+RIGHT are now more intelligent. Tell me if you like the new
  behavior.
- If there are more buttons in a docking area than can fit, a popup menu
  button is shown; clicking it shows a popup listing all dockables in
  that area
- Added option to disable file system browser's tool bar
- I/O errors are now batched into a single dialog box
- New, smaller icons in file system browser (Dirk Moebius)
- New jEdit window icon (Phillip Richdale)
- First item in File->Current Directory menu (the directory path itself)
  is no longer a grayed out label; you can invoke it to view the
  directory in the file system browser
- First item in 'Paste Previous' dialog pre-selected when dialog shown
- Focus is returned to file list in 'Close All' dialog box after one of
  the buttons are clicked
- Recent Directories menu, Browse System/User Macros commands, and other
  commands that open directories in the file system browser now work a
  little better
- The list of open files is now saved by the autosave task
- Smoother incremental search
- When HOME is pressed while there is a selection, the caret is moved to
  the beginning of the first selected line. END moves the caret to the
  end of the last selected line.
- Search bar automatically selects its contents as soon as it gets focus
- The file system browser's 'Search in Directory' command no longer
  hangs the event dispatch thread until the directory hierarchy has been
  listed
- If an error occurs while loading one of the files involved in a
  multi-file search, the search will continue; previously it would have
  been aborted. Any errors will be listed in a dialog box after the
  search is complete.
- Commands in View->Splitting menu moved to top level of View menu
- Updated PL-SQL mode (Steve Snider)
- Updated MS-DOS batch mode (Mirco Bova)
- Files on read-only filesystems (such as the URL filesystem) now have
  the read-only flag set. Previously, only local files would have the
  read only flag set automatically.

+ Neutral

- Syntax highlighting can no longer be disabled -- too many features
  (bracket matching, commenting commands) rely on syntax info now

+ Bug Fixes

- JEditTextArea now uses type-safe buffer property accessors, so there
  shouldn't be any more ClassCastExceptions
- Fixed stack overflow if attempting to use URL filesystem (to open an
  http:// URL, for instance)
- Fixed stupid bug in installer that affected MacOS X installation
- File system browser's parent directory view could not be completely
  hidden by dragging the split pane
- Pressing the left arrow key in the file system browser didn't always
  work
- Bracket matching would sometimes show a status bar message even if the
  bracket was visible
- Fixed another minor bracket repaint problem that would occur if the
  matched bracket was not visible and the text area lost focus
- Select Line, Select Word, Select Paragraph actions were slightly
  broken
- Fixed minor undo modified flag clearing bug
- Pressing the tab key with a one-line selection would insert a hard tab
  even if soft tabs were enabled
- Deprecated MiscUtilities.compareVersions() method was an instance
  method, which made plugins that used it throw VerifyErrors on startup.
  These plugins will now work again (but should eventually be updated to
  call non-deprecated methods).
- Fixed another search and replace bug triggered by the Tags plugin
- When searching in multiple selections, HyperSearch would create one
  tree node for each selection
- InputHandler.readNextChar() didn't work with all characters
- Floating positions would sometimes be updated incorrectly when text
  was inserted
- Fixed another file system browser 'Search in Directory'
  NullPointerException
- Buffer-local property parsing code was broken
- Sometimes multi-line tokens would not be repainted correctly
- Opening files whose path began with ~ (which was supposed to be
  expanded to your home directory path) didn't work
- Trying to do a directory search inside a directory which contained a
  symlink loop would hang jEdit
- The 'Auto Wrap' search option did not take effect in macros
- Bug fix in MacOS plugin (Kris Kopicki)
- Fixed problem with default position of table of contents in help, and
  dockable window dividers
- Default filename filter in file system browser skipped files with
  single-character names. Now the default filter is *[^~#], which should
  work properly
- On JDK 1.4, closing a docking area didn't deselect the currently
  selected button

+ API Changes

- VFS.reloadDirectory() method added; it is called before a directory is
  reloaded by the file system browser
- MiscUtilities.charsToXMLEscapes() method added
- To take advantage of the new I/O error dialog box, virtual filesystem
  implementations should call:

  VFSManager.error(Component comp, String path, String messageProp,
    Object[] args)

  instead of

  VFSManager.error(Component comp, String message, Object[] args)

  The message is obtained from the property 'messageProp' (nothing is
  prepended or appended to the property name).

- New method: VFSBrowser.browseDirectory(View view, String path)
- New method: MiscUtilities.listDirectory(String directory, String glob,
    boolean recurse)

* Version 4.0pre2

+ New Features

- MacOS plugin bundled (Kris Kopicki)
  - jEdit exits cleanly when Command+Q is pressed
  - Files created or associated with jEdit can now be opened from the
    Finder by double-clicking on them, or dragging them to the jEdit
    icon
  - jEdit is assigned as the creator of new files
- A few Alt-key shortcuts added for commonly-used commands so that you
  don't have to move your fingers all over the keyboard:
  - A+i, A+k: prev, next line
  - A+j, A+l: prev, next character
  - A+q, A+a: page up, page down
  - A+z, A+x: home, end
  - A+d: delete next character
- A new View->Docking menu; contains commands for closing the left, top,
  right and bottom docking areas (shortcuts: C+e 1,2,3,4)
- Narrowing re-implemented. This feature was present in jEdit 3.2 but
  was missing from 4.0pre1.

+ Enhancements

- Bracket matching improvements:
  - If the highlighted bracket is off screen, the text of the matching
    line is shown in the status bar. And here's the best part: if the
    matching line cosists of only a bracket and whitespace, the
    *previous* line is shown in the status bar instead
  - Clicking the scope indicator in the gutter moves the caret between
    the two matching brackets
  - Control-clicking the scope indicator or a bracket in the text area
    selects all text between the two matching brackets
- File system browser improvements:
  - Parent directories are now listed in a widget at the top of the
    file system browser
  - File->Recent Directories menu lists directories that were recently
    visted in the file system browser
  - File selection dialog boxes now have a status bar that shows the
    number of pending I/O requests
  - Middle mouse button click in file system browser now has the same
    effect as double-clicking
  - You can now enter relative paths in the file system browser's path
    field
  - 'More' menu split into 'Commands' and 'Plugins' menus
  - 'Commands' menu and tool bar now have the same set of commands
  - 'Favorites' menu added for quicker access to favorites
  - If invoked while a file is selected, the 'Search in Directory'
    command now sets the search file name filter to that file's
    extension
- Icons added to 'BeanShell Error' and 'Close All' dialog boxes
- Updated PV-WAVE mode (Ed Stewart)
- Updated Transact-SQL mode (Ollie Rutherfurd)
- Updated Omnimark mode (Lionel Fiol)
- Closing a docked window now returns focus to the text area
- Memory indicator tooltip now shows used and total Java heap memory in
  kilobytes
- Option for search and replace to beep on auto wrap (Kenrick Drew)
- Faster (in theory anyway) file loading as a side effect of some bug
  fixes
- Improved help viewer welcome screen
- Updated QuickNotepad sample plugin for jEdit 4.0 API changes (John
  Gellene)
- 'Delete Line' now leaves the caret in the same column
- '~' in buffer and directory path names is now automatically expanded
  to the home directory
- Improved undo
- Pressing Tab while there is a selection will now only shift the line's
  leading indent if the selection spans more than one line
- If indent on tab is enabled, a line will only be indented if Tab is
  pressed inside the leading whitespace of that line. Indent on tab is
  now enabled by default
- Bundled set of macros slimmed down somewhat. You can find more macros
  at http://community.jedit.org (John Gellene)
- Text selection commands (Select Word, Select Line, and so on) are now
  multiple selection aware

+ Bug Fixes

- Fixed a memory leak with the search and replace dialog box
- Undo would be broken after a file was reloaded
- Fixed exception thrown if a buffer contained definitions for integer
  properties (tab size, maximum line length, ...)
- Changing the gutter font didn't update the gutter width
- Fixed broken scrolling behavior
- Some files would open with only one line visible
- MiscUtilities.compareStrings() would throw exceptions with strings
  that contained embedded numbers larger than 2^31
- Creating a new view or splitting the view didn't work
- Tool bar tooltips were broken
- With the Windows look and feel, file names were invisible in the file
  system browser
- In the help viewer, the top-level user's guide link was broken
- BufferChangeAdapter didn't properly implement BufferChangeListener
  interface (Maik Schreiber)
- GUIUtilities.loadToolButton() no longer throws an exception with
  invalid tool bar buttons
- It was not possible to bind an action to a non-alphanumeric key
  without any modifiers
- The file system browser's notion of the current directory is not
  changed until the directory is actually loaded successfully
- Some directories could not be deleted from the favorites
- It is no longer possible to add the same directory to the favorites
  twice
- File->Current Directory menu now shows 'No Files' if there are no
  files in the current directory
- Fixed a few bugs in the File System Browser->Colors option pane
- Compound edits were rather buggy
- 'Trailing EOL' setting did not work
- Fixed possible MacOS X keyboard problems (again...)
- Fixed a buffer corruption bug
- 'Select Fold' command threw an exception of there were no folds in the
  buffer
- Fixed a few bracket matching bugs
- Fixed cosmetic bug in search and replace code that was triggered by
  the Tags plugin
- Fixed minor repaint bug with multiple selections

+ API Changes

- New method in VFS class: _canonPath().
- VFS.DirectoryEntry constructor accepting a 'color' parameter removed.
  Instead, write a VFS.DirectoryEntry subclass that overrides the
  getColor() method
- MiscUtilities.constructPath(), .getFileName(), .getParentOfPath()
  methods are now VFS-aware
- Note that the behavior of correspondingly-named methods in the VFS
  class has changed in a suttle manner, and they should no longer be
  called directly. Use the MiscUtilities methods for all path
  manipulation.
- EditAction.getView() deprecated, call GUIUtilities.getView() instead

* Version 4.0pre1

+ New Features

- New document model uses less memory, loads files faster, and has a
  simpler API for developers. Also, finally, the file modification flag
  is cleared when all edits up to a save are undone
- New folding features:
  - Three fold modes: none, indent, explicit. 'none' is the default now.
    'indent' is the indent-based folding mode, that behaves the same as
    indent-based folding in jEdit 3.1 and 3.2. 'explicit' parses the
    buffer for {{{ and }}} and adds folds based on that.
  - Change the fold mode by clicking the fold mode widget in the status
    bar, or in the Buffer Options dialog box, or with the 'folding'
    buffer-local property, or in the Global Options dialog box.
  - Folds are now shown in the gutter as triangles, which is more
    intuitive than filled/not-filled boxes
  - View->Folding->Collapse All Folds command, equivalent to invoking
    'Expand Folds With Level' and specifying a level of 1
  - Different text areas editing the same buffer can now have different
    folds collapsed and expanded. Previously, fold visibility was stored
    at the buffer level
- Utilities->Memory Status command to replace 'Show Free Memory' macro
- General look and feel settings moved to 'Appearance' option pane
- If you are using the Metal or Kunststoff L&F, the UI control font can
  be changed in Utilities->Global Options->Appearance
- 'Vertical Paste' macro (Andre Kaplan)
- File listings in the file system browser are now colorized. Change the
  colors in Utilities->Global Options->File System Browser
- When a file is loaded, jEdit now remembers if it contained a trailing
  newline, and if so, writes it out when saving the file. Previously, a
  trailing newline would always be written, regardless of it being
  present in the file on disk or not
- The tab and enter key can now be used in shortcut assignments
- Utilities->Evaluate for Selected Lines command evaluates specified
  BeanShell expression for each selected line, replacing the contents of
  that line with the return value of the expression
- Macros.confirm() method added, for use in macros
- BBj (Business Basic based on Java) syntax highlighting (Thomas Bock)
- BibTeX syntax highlighting (Nils Krahnstoever)
- Option added to sort recent file list by name
- -nogui switch is back. If specified when jEdit is being run in
  background mode, the initial view will not be opened
- Edit->Invert Selection command added
- The gutter now displays a scope indicator when the caret and matching
  bracket are not on the same line
- Ant is used instead of jmk to compile jEdit

+ Neutral

- Word wrap is disabled by default

+ Enhancements

- BeanShell 1.2b3 now included, instead of slightly patched 1.2b1
- New splash screen and about box (Kris Kopicki)
- HTML documentation is now generated using DocBook XSL 1.44 stylesheets
- Option in activity log window to automatically scroll to bottom on
  output (Dirk Moebius)
- Status bar improvements:
  - Tool tips for all controls
  - Double-click on caret status shows the 'go to line' dialog box
  - Instead of showing 'multi' in gray of multiple selection was
    disabled, and in black if it was enabled, the display now
    alternates between 'multi' and 'single'
  - Same for the overwrite status; it now shows 'ins' or 'ovr'
  - I/O progress display replaced with a Java heap memory indicator
  - I/O status is now shown in the message area of the status bar
- New color scheme
- Pressing Tab while a selection is active shifts it right by one level
  of indent
- Pressing S+Tab shifts the selection right by one level of indent
- If a selection ends at the beginning of a line, that line is no longer
  considered to be part of the selection by line manipulation commands
- Improved window docking feature:
  - New, much simpler API for plugins
  - 'Auto open' setting in Docking option pane removed, now jEdit
    remembers which dockables were open automatically
  - Docked windows are shown inside a custom control, not a tabbed pane
  - ALL dockable windows set to dock in a certain area are shown in that
    area, not just those currently 'open'. When a dockable is requested
    for the first time, it is created and loaded
  - Changes made in the Docking option pane now take effect immediately
- In the Shortcuts option pane, each plugin's actions are shown in a
  separate section. This solves the problem of plugin actions having
  ambiguous names (for example, "Edit Settings"). This change is the
  reason for the jEdit.addAction() method was dropped.
- Macros.message(), Macros.error() and Macros.input() methods now accept
  an arbitriary java.awt.Component, instead of a View, as the component
  that will parent the dialog box. This will not break any macros since
  BeanShell resolves methods at run-time.
- jEdit now makes an effort to display popup menus on-screen. If you
  want your plugin to do this, use the new GUIUtilities.showPopupMenu()
  method.
- Editing and saving a mode file, or mode catalog file within jEdit will
  automatically reload that mode, or all edit modes
- A few keyboard shortcuts added to file system browser:
  ~ - goes to home directory
  / - goes to file system roots list
  - - goes to current buffer's directory
- Improved Abbreviations option pane
- Improved Styles option pane
- Improved search and replace:
  - It is now possible to do a HyperSearch in the current selection
  - When a match is clicked on in the HyperSearch results window, the
    match is now selected in the text area. Previously, the caret was
    only moved to the line containing the match.
  - Search in Selection radio button: when selected, the 'Replace All'
    button does the same thing as the 'Replace' button
  - If text is selected when the dialog box is being opened, this radio
    button is selected automatically, unless only one line of text is
    selected, in which case that text becomes the search string
  - Because of the above, the 'Find Selection' command is no longer
    necessary
  - 'All buffers' and 'Directory' radio buttons now pre-select the
    'HyperSearch' check box (it is still possible to do a normal search
    over a set of buffers, by deselecting the check box)
  - When doing a case-insensitive search and replace, the substituted
    string's case is converted to the found match case, if the found
    match is all lower case, all upper case, or title case
  - gnu.regexp 1.1.4 now included
- Multiple selections are now stored in the order they appear in the
  buffer, not the order they were added
- New MiscUtilities.compareStrings() method compares two strings,
  treating numbers specially. So, for example, it will say that
  "my file 10" comes after "my file 2", and that "2.9" comes before
  "2.10"
- MiscUtilities.StringCompare and StringICaseCompare classes use this
  method by default
- The buffer-local noWordSep property now has a default value of "_".
  Previously, there was no default, but most modes specified a value of
  "_".
- jEdit now backs up files it saves to the settings directory to
  $HOME/.jedit/settings-backups
- Settings files are now saved to #filename#save#, then renamed to the
  actual file name. This prevents settings from being lost if jEdit
  crashes in the middle of saving them
- PL/SQL mode updates (Steve Snider)

+ Bug Fixes

- 'Recent Files' menu behaved in a strange manner if there were no
  recent files
- Fixed a NullPointerException if the 'Narrow to Selection' command
  was invoked with no selection
- JCheckBoxList typo prevented it from working in the XML plugin
- On MacOS, the option key, which is reported as ALT, can be used to
  generate user input, but jEdit ignored Alt key strokes that were not
  bound to shortcuts.
- More JDK 1.4 key event bug workarounds
- History text field border wasn't repainted after the model was changed
- If two shortcuts were assigned to a command, the second wasn't shown
  in the tool bar button tooltip
- In syntax highlighting rule sets that enabled digit highlighting but
  didn't have SEQ rules for '-' and '.', these two characters would be
  highlighted with the digit syntax style, even if they were not part of
  a numeric expression.
- Pressing Home three times put the caret at the end of the last visible
  line, not the start of the last visible line as intended
- Entering a file name in the text field of the Open dialog box would
  open that file name relative to jEdit's current working directory, not
  the directory selected in the dialog box
- 'Reload' command didn't preserve caret position very well if sections
  of the buffer were folded
- When running on Java 2 version 1.3 (and possibly others), the default
  size of the help viewer was not set properly
- Velocity mode had an incorrect file name glob
- In the Search and Replace dialog box, 'Replace with:' and 'Auto wrap'
  had the same Alt-key mnemonic
- Regular expression bug fixes:
  - Searching for a regular expression of $ or ^ by itself should work
    now
  - In regular expressions, ^ and $ not only matched newlines, but the
    start and end of the substring to search.
  - Fixed possible ArrayIndexOutOfBounds when searching for regular
    expressions that start with \<
  - The RESearchMatcher class converted \t to the tab character and \n
    to the newline character, even if the replace string was a BeanShell
    script, in which case a BeanShell execution error would occur.
- In the help viewer, nodes in the tree were not selected as links were
  followed
- On Windows, it is now possible to rename a file such that the new name
  only differs from the old in case
- Sometimes, the most recently opened files would not be restored if the
  -background command line switch was used
- Sometimes, Untitled buffers would not be replaced when another file
  was opened
- Fixed slowdown when making changes to the last line of a buffer

+ API Changes

- New methods in jEdit class for accessing properties:
  jEdit.getIntegerProperty(String name, int def);
  jEdit.setIntegerProperty(String name, int value);
  jEdit.getFontProperty(String name);
  jEdit.getFontProperty(String name, Font def);
  jEdit.setFontProperty(String name, Font value);
  jEdit.getColorProperty(String name);
  jEdit.getColorProperty(String name, Color def);
  jEdit.setColorProperty(String name, Color value);
- VariableGridLayout is now used to lay out tool bars, instead of
  BoxLayout. This means it is no longer necessary to add a
  Box.createGlue() to the tool bar to prevent it from being centered.
- Removed these APIs, which have been deprecated since jEdit 2.6:
  EditPlugin.createMenuItems(View,Vector,Vector) (override
  createMenuItems(Vector) instead)
  GUIUtilities.loadMenuItem(View,String) (use loadMenuItem(String)
  instead)
  GUIUtilities.loadToolBarIcon() (use loadIcon instead)
  GUIUtilities.showFileDialog() (use showVFSFileDialog() instead)
- Removed these APIs, which have been deprecated since jEdit 3.0:
  jEdit.addAction()
  EditAction.actionPerformed()
  EditAction.isSelected(Component)
  EditAction.getView(EventObject)
  EditAction.getBuffer(EventObject)
- CreateDockableWindow class deprecated. Write a dockables.xml file
  instead of listening for this message.
- DockableWindow interface deprecated. No need to implement it any more.
- EditBus named list stuff deprecated. It was only being used for
  dockables and ErrorList's error sources. To register dockables, use
  the new dockables.xml API. To register error sources, use the relevant
  APIs in the ErrorList plugin.
- DockableWindowManager.getDockableWindow() method (that returns a
  DockableWindow instance) has been deprecated in favor of the new
  DockableWindowManager.getDockable() (which returns a JComponent
  instance)
- TextAreaHighlight.init() method removed. If it exists, it will be
  called via reflection so that old plugins can continue to work, but
  new plugins should pass a text area instance to the constructor of the
  highlighter.
- MiscUtilities.VersionCompare class and MiscUtilities.compareVersions()
  method removed. Use compareStrings() instead
- Buffer.markTokens() now returns instance of Buffer.TokenList class
- New BufferUpdate message type: FOLD_HANDLER_CHANGED
- Buffer.insertString() deprecated; call Buffer.insert() instead
- Buffer.remove(), Buffer.getText() and Buffer.createPosition() no longer
  throw BadLocationExceptions
- Buffer.getDefaultRootElement() deprecated; call
  Buffer.getLineStartOffset(), Buffer.getLineEndOffset(),
  Buffer.getLineLength() and Buffer.getLineOfOffset() instead
