JEDIT 4.1 VERSION HISTORY

* Version 4.1final

Thanks to Alex Jacoby, Andreas Mross, Kris Kopicki, and Patrick Tingen
for contributing to this release.

+ Enhancements:

- Updated Progress syntax highlighting (Patrick Tingen).

- Updated FAQ (Kris Kopicki).

- Updated batch file syntax highlighting (Alex Jacoby).

+ Bug Fixes:

- Fixed possible ArrayIndexOutOfBoundsException when using
  "Collapse All Folds" or "Expand Folds With Level" due to a regression
  from pre11.

- Cached token marker state was not properly cleared when switching
  modes due to a regression from pre10.

- MacOS plugin 2.0.4 fixes a few bugs when opening files from the
  Finder.

- Minor fix for XML syntax highlighting.

- Fixed "Preview Javadoc of Buffer" macro (Andreas Mross).

- The file system browser's completion no longer breaks when entering
  paths not in the current directory.

- EditServer class no longer uses deprecated Thread.stop() method.

* Version 4.1pre11

Thanks to Kris Kopicki and Stefan Kost for contributing to this release.

+ Enhancements:

- "BeanShell Error" dialog box now shows the full traceback, not just
  the exception message.

- Some minor optimizations.

- FAQ updates (Kris Kopicki).

+ Bug Fixes:

- Minor fix to BibTeX syntax highlighting (Stefan Kost).

- jEditLauncher was not being correctly installed on Windows.

- Fixed accidental AbstractOptionPane API breakage.

- FileVFS._mkdir() did not send the correct VFSUpdates if more than one
  nested directory had to be created.

- Fixed some obscure problems with file system browser dialog box
  completion.

- Narrowing would display the wrong text if the text area was scrolled
  to the start of the buffer.

- jEdit.exit() no longer throws an exception if no views are open. This
  fixes the problem of not being able to exit jEdit when running on
  MacOS X with the -background command line switch (Kris Kopicki).

- Narrowing to one set of lines and then immediately to another such
  that the intersection of the two sets is empty would cause problems.

+ API Additions:

- Added Buffer.invalidateCachedFoldLevels() method needed by SideKick
  plugin.

* Version 4.1pre10

Thanks to Kris Kopicki and Oliver Rutherfurd for contributing to this
release.

+ Enhancements:

- Divider position in Global Options dialog box is now saved.

- Minor improvement to Python auto indent (Oliver Rutherfurd).

- Invocations of 'Delete Line' are now undone one at a time.

- Documentation updates.

- FAQ updates (Kris Kopicki).

- API documentation generated with javadoc is now included. A custom
  doclet is used to generate a tree view for the help viewer.

- The installer now packs .tar.bz2 archives instead of storing files in
  the JAR directly. Now that javadocs have been added to the core
  distribution, the old installer balooned to 2.7Mb; the new installer
  is only 1.4Mb.

  To implement this the installer uses the org.apache.excalibur.bzip2
  and com.ice.tar libraries. Licensing info and home page links can be
  found in README.txt.

+ Bug Fixes:

- Stricter checks for windows being out-of-bounds.

- The text area no longer falls over if an exception is thrown while
  firing a caret or scroll event.

- Saving a file within jEdit will refresh the directory search file list
  if necessary.

- The Format Paragraph command was once again broken on Java 1.3.

- Installer's "auto" mode works now. The command line syntax has
  changed:

  java installer.Install auto <install directory>
    unix-script=<bin directory> unix-man=<man directory>

  The last two parameters are optional.

- EOL_SPAN_REGEXP rule was broken (Oliver Rutherfurd).

- Undoing all changes up to a save would not delete the autosave file,
  even though the buffer was no longer marked as "dirty".

- Fixed minor problem with expanding files when moving the caret outside
  the narrowed range.

- Fixed digit highlighting regexp since it didn't pick up 0xff00 (and
  various other combinations) properly.

- Installer didn't work on OS/2.

- "Toggle Line Separator" command now sets buffer dirty status.

- Splitting the view more than once could break.

- Fixed a NullPointerException when doing a "Replace All" over a
  directory right after a HyperSearch in the same directory, then
  closing some of the buffers touched by the "Replace All".

- Fixed display of docking buttons on Mac OS X (Kris Kopicki).

- Dialog boxes shown by search and replace are now parented by a
  search dialog, if one is open.

- Fixed yet another bug when editing the same buffer in two splits,
  this time if the second split was narrowed.

- Fixed obscure file system browser selection bug.

- Fixed unnecessary repainting in text area, this should improve
  performance.

* Version 4.1pre9

Thanks to Chris Petersen, Iain Hewson, Kris Kopicki, Randolf Mock and
Reinout van Schouwen for contributing to this release.

+ Syntax Highlighting Changes:

- Added gettext mode (primarily used on Unix for translating programs
  to other languages) (Reinout van Schouwen).

- Added APDL mode (Randolf Mock).

- Updated CSS, PHP, Perl syntax highlighting (Chris Petersen).

+ Miscellaneous Changes:

- Global options dialog box remembers its size and position now.

- Much faster auto indent.

- Prefix keys (C+e, C+e n, C+m, C+r) now show a status bar message.

- Added a "Docking Options" item to the docking button's right-click
  menu.

+ Installer Changes:

- On Unix systems, a jedit.1 manual page is now installed.

+ Bug Fixes:

- Saving a file from one file system to another using the "Save a Copy
  As" command could cause problems if the destination VFS implemented
  the _saveComplete() method. This method was only passed a buffer
  instance, and there was no way to obtain the destination path.

- Making changes above the first line did not scroll the text area.

- Fixed a bug with nested compound edits. I'm not sure if it ever caused
  any problems, however it did affect performance.

- More fixes for non-standard mouse button handling under MacOS X
  (Kris Kopicki).

- Fixed possible incorrect enabling and disabling of controls, and an
  ArrayIndexOutOfBoundsException when selecting the last edit mode in
  the Editing option pane's list.

- Fixed possible ArrayIndexOutOfBoundsException while scrolling in a
  text area that was narrowed to a specific region in the buffer.

- Fixed problem with Gutter marker tooltips not showing up sometimes if
  the text area was scrolled horizontally.

- JEditTextArea.getPhysicalLineOfScreenLine() was broken. This caused
  problems for JDiff.

- Fixed problem when scrolling with soft wrap where the last visible
  line would get clipped.

- The jeditshell directory was missing from the source download.

- Plugin properties would override site properties.

- Various modes were missing a "lineUpClosingBracket" property.

- Editing option pane's "Use default settings" check box was broken.

- Fixed an auto-indent bug that would give lines incorrect indent if
  they contained both a closing and an opening bracket.

- Fixed a problem with undo -- after undoing the full undo queue,
  further edits were not being added. This problem has been there since
  the 4.0 pre-releases, damn.

- Fixed problem with grabbing keystrokes with the Shift modifier set and
  all other modifiers unset (Iain Hewson).

+ API Changes:

- VFS._saveComplete(Object session, Buffer buffer, Component comp) is
  now VFS._saveComplete(Object session, Buffer buffer, String path,
  Component comp).

+ API Additions:

- HyperSearchResults.getTree() method added.

* Version 4.1pre8

Thanks to Carmine Lucarelli, Chris Petersen, Jonathan Revusky,
Kris Kopicki, Silas Smith and Will Varfar for contributing to this
release.

+ Syntax Highlighting Changes:

- Icon syntax highlighting (Silas Smith).

- Redcode syntax highlighting (Will Varfar).

- Minor updates to JavaScript, PHP and ShellScript modes
  (Chris Petersen).

- Updated FreeMarker syntax highlighting (Jonathan Revusky).

- Java mode now highlights "assert" and "strictfp" keywords.

+ Auto Indent Changes:

- "indentPrevLine" buffer-local property now named "indentNextLine".
  Update your modes.

- Added a new "indentNextLines" property that indents all subsequent
  lines, not just the next line. This finally gives correct auto-indent
  behavior in Python files.

- Added a new "lineUpClosingBracket" property. If false, then a closing
  bracket will not unindent the current line, but rather the next line.
  This gives us semi-correct indent behavior in Lisp and Scheme modes.

+ Miscellaneous Changes:

- Plugin manager progress window now only has one progress bar.

- In the file system browser, S+ENTER with a directory selected opens
  the directory in a new browser window.

- Pressing LEFT in the filename field with the caret already at the
  left-most position goes to the parent directory location.

- Added View->Show Buffer Switcher command (shortcut: A+BACK_QUOTE). It
  shows the buffer switcher combo box if it is enabled.

- Improved scrolling performance when soft wrap is on. In previous 4.1
  pre-releases and especially in 4.0, the editor was noticably less
  responsive if soft wrap was on. No longer.

- Documentation updates.

- Added some more tips of the day.

+ Bug Fixes:

- Sometimes the status bar was not updated properly in newly created
  views.

- Fixed a few help viewer quirks.

- Fixed several bugs in the text area scrolling code.

- Fixed Global Options dialog box resizing problems.

- Fixed possible ArrayIndexOutOfBoundsExceptions when deleting text.

- Fixed various minor bugs with the "Format Paragraph" command.

- Fixed some popup menu display bugs.

- Fixed possible NullPointerException in Syntax Highlighting option
  pane.

- Highlighting of m{...} and s{...}{...} in Perl mode was broken.

- The 4.1pre7 changelog claimed that roots: now listed the desktop. This
  was broken and has now been fixed (Carmine Lucarelli).

- Fixed NPE when a client instance of jEdit requested an already opened
  buffer to be shown in a new view if that buffer had been changed on
  disk.

- Contents of filename field in "Save As" dialog box now take precedence
  over the currently selected file in the file list.

- Fixed possible deadlock on startup if jEdit was opening a file stored
  on a remote server using, say, the FTP plugin and the plugin displayed
  a modal dialog box.

- If "two stage save" was disabled, saving a file did not send VFS
  update messages, so features that relied on that message didn't work
  (reload of file system browser, reload of edit modes).

- Fixed minor XSLT syntax highlighting glitch.

- Fixed minor CSS syntax highlighting glitch.

- jEdit would misdetect Windows ME as Windows NT. This caused problems
  for the Console plugin.

- Right mouse button should work on MacOS X now.

- Markers menu showed wrong line text (Ollie Rutherfurd).

- "Write HyperSearch Results" macro updated to work with
  multiple-results code (Rudi Widmann).

- Fixed various auto indent bugs.

- Wheel mouse page scroll now scrolls the correct amount if soft wrap is
  on.

- Starting a rectangular selection on a bracket should no longer leave a
  bogus bracket block selection in place.

+ API Additions:

- Added org.gjt.sp.jedit.gui.AnimatedIcon class (Kris Kopicki).

* Version 4.1pre7

Thanks to Chris Kent, Jonathan Revusky and Marcelo Vanzin for
contributing to this release.

+ Syntax Highlighting Changes:

- FreeMarker syntax highlighting (Jonathan Revusky).

+ User Interface Changes:

- The parent directory list in the file system browser now requires a
  double-click (or middle mouse button click) to open a directory. This
  makes it consistent with the behavior of the file tree below it, which
  also requires double-clicks.

- The tooltips shown by the file system browser when a filename is
  partially obscured are no longer positioned over the filename, because
  Swing does not pass clicks inside tooltips to the underlying
  component.

- The help viewer now shows the title of the current page in place of
  the location field, and the location field is now gone. As a result
  the help viewer can no longer be used to view arbitriary URLs. Use the
  InfoViewer plugin for that purpose instead.

+ Global Options Dialog Changes:

- The Global Options dialog box now opens to display the most recently
  viewed option pane. Also the "overview" pane is gone.

- Merged the Editing and Mode-Specific option panes.

- The text area right-click popup menu now contains an item "Customize"
  for quick access to the Context Menu pane of the Global Options dialog
  box.

- If a HyperSearch produces no results, older result nodes are collapsed
  in the "HyperSearch Results" window.

+ Performance Improvements:

- Improved performance of line offset manager when a lot of changes are
  made starting from the end of the buffer going to the beginning. Early
  in the 4.1 series a corresponding optimization was added for edits
  going in the other direction, which improved performance of "Replace
  All" and similar operations significantly. This change improves
  performance of undos of "Replace All".

- Improved performance of text area when a lot of changes are made to a
  buffer, especially while selections are active, or if soft wrap is
  switched on. Again this improves performance of "Replace All", which
  was nearly unusable with soft wrap.

- Updated to BeanShell 1.2b7. This version has less debugging code and
  should be faster.

+ Miscellaneous Changes:

- If the user and system macro directories have a subdirectory with the
  same name, the contents of the subdirectories are merged in the
  "Macros" menu. Previously, one could end up with two "Text" menus, for
  instance.

- The plugin list in the "Install Plugins" and "Update Plugins" dialog
  boxes is now categorized.

- jEdit now remembers if a window was maximized when saving geometry if
  running under Java 1.4. (Chris Kent)

- The roots: filesystem now calls Java 1.4 methods where appropriate to
  obtain the roots. This means that on Windows, for example, in addition
  to listing drive letters, it will also list files on the desktop.

- The tips of the day have been updated for assorted jEdit 4.1 changes.

- User's guide is more up-to-date with respect to jEdit 4.1 now. There
  is still much to be done though.

+ Bug Fixes:

- The action "Insert Tab and Indent" was broken. If you reassigned TAB
  to "Insert Tab" to work around this problem in pre6, you can revert
  the assignment (unless you'd like the TAB key to always insert a tab,
  without indenting).

- Backed out Rex Young's ReadWriteLock.java fix from pre6 since it
  caused deadlocks.

- Fixed some long-standing bugs in the reverse search code.

- Dialogs that are shown by other dialogs have been updated to have the
  invoking dialog as their parent, instead of the containing frame. This
  should fix problems with some windows obscuring others, etc.
  (Marcelo Vanzin)

- Fixed a possible ClassCastException that could occur if macro
  directories were nested.

- "Rectangular selection mode" status message was not being shown on
  MacOS X.

- Fixed a NoSuchMethodError when invoking "Format Paragraph" on Java
  1.3.

- A Control-click did not bring up the right-click popup menu in the
  file system browser on MacOS X.

- Fixed a NullPointerException when selecting text in the last visible
  line, if soft wrap was on and only the top part of the last visible
  line was visible.

- Fixed a possible ArrayIndexOutOfBoundsException when a rectangular
  selection started or ended within a hard tab.

- Plugin actions and dockables are no longer loaded if the plugin's
  start() method failed, or if dependencies were unsatisfied.

- Wheel mouse scrolling should once again respect the operating system's
  scroll amount setting.

- The Page Scroll Up and Page Scroll Down commands now scroll the
  correct amount if soft wrap is enabled.

- Fixed possible ArrayIndexOutOfBoundsException if a buffer had a
  HyperSearch performed in it, then modified, closed and opened again.

- When doing a Replace All operation over a directory, edits performed
  on files that were not open before the search started were not batched
  in a compound edit due to an erronous "isTemporary()" check in
  begin/endCompoundEdit().

- Fixed a possible ArrayIndexOutOfBoundsException in the status bar when
  making changes near the end of the buffer.

- Closing the Global Options dialog box would add dockables to plain
  views. Plain views are not supposed to have dockables.

- Bracket highlight color setting in Gutter option pane was broken.

- Digits would not be highlighted properly in modes which did not define
  any keywords.

+ API Additions:

- You can now open the Global Options dialog box on a specified option
  pane using the new GlobalOptions(Frame,String) and
  GlobalOptions(Dialog,String) constructor.

- Added VFS.getTwoStageSaveName() method. Override this if your VFS does
  not allow file names to contain the # character.

* Version 4.1pre6

Thanks to Cullen Linn, Giulio Piancastelli, John Perry, Joshua Miller,
Kris Kopicki, Marcelo Vanzin, Peter Cox, Rex Young, Ryan Grove,
Rudolf Widmann and Steve Snider for contributing to this release.

+ Help System Changes:

- The user's guide, FAQ, and plugin documentation is now searchable. An
  in-memory index is built the first time a search is performed during a
  jEdit session. Currently, the search engine is very simple and only
  performs whole-word matching (so searching for "auto save" and
  "autosave" will yield different results). Results are ranked according
  to how many times that word appears in the document. Searching for
  multiple words returns all documents that contain at least one of the
  words, however documents containing multiple search terms are ranked
  higher.

+ Editing Changes:

- The "Indent on Enter" and "Indent on Tab" options are no longer.
  (Actually, the former was removed in pre5, but I forgot to mention it
  in the changelog).

  The new way to change these options is to just rebind the ENTER and
  TAB keys in the Shortcuts option pane. There are several actions they
  can be bound to:

  Insert Enter
  Insert Enter and Indent
  Insert Tab
  Insert Tab and Indent
  Indent Line (if you want TAB to indent anywhere in a line, not just in
  the leading whitespace, like in emacs).

+ Syntax Highlighting Changes:

- Added .NET CIL syntax highlighting (Cullen Linn).
- Added Maple syntax highlighting (John Perry).
- Added NSIS2 syntax highlighting (Ryan Grove).
- Updated ColdFusion syntax highlighting (Joshua Miller).
- Updated Fortran syntax highlighting (Yifan Song).
- Updated PL-SQL syntax highlighting (Steve Snider).
- Updated Prolog syntax highlighting (Giulio Piancastelli)

+ Miscellaneous Changes:

- Holding down Alt while scrolling with the wheel mouse now moves the
  caret up or down. Holding down Shift and Alt will extend the selection
  up or down (Rudolf Widmann).

- The "HyperSearch Results" window now remembers old search results.
  They can be cleared out by right-clicking and selecting "Remove Node"
  from the resulting popup menu (Peter Cox).

- The content of the status bar can be customized in the new
  "Status Bar" pane of the Global Options dialog box (Kenrick Drew).

+ Platform-Specific Changes:

- Updated MacOS plugin (Kris Kopicki).
  - Added MacOS menu to the Plugins menu. Provides time saving features
    like revealing files and folders in the Finder, and running
    AppleScripts.
  - You can run AppleScripts (compiled, uncompiled and standalone).
    Scripts must be located in the scripts folder in the jEdit folder.
    They can be either plain text or compiled scripts. Scripts must have
    their type and creator set correctly, have a .scpt (for compiled
    scripts) or .applescript (for uncompiled scripts) extension, or
    both. Note: Scripts that require user interaction are not supported.
  - Added and option to Mac OS Plugin settings to change the script
    folder search depth.

+ Bug Fixes:

- Removed erronous check box from Buffer Options dialog box.
- Changed the code that makes sure windows are always displayed in the
  visible region of the screen. It now only moves windows if their
  top-left corner is invisible; windows with other parts obscured are
  not moved.
- Fixed possible ArrayIndexOutOfBoundsException with regular expression
  syntax rules.
- Plugin manager's dialog boxes are now parented by the plugin manager,
  not the view (Marcelo Vanzin).
- Fixed repaint problems in tool bar option pane's buttons (and possibly
  other places) by making RolloverButton's isOpaque() method return
  false.
- Fixed highlighting of digits in C, C++, Java and similar modes; now
  hex digits are only highlighted if the number begins with "0x".
- Print output would be clipped if the "print header" option was
  switched off.
- Fixed obscure deadlock condition in ReadWriteLock.java (Rex Young).
- The drop down box on a history text field was painted in the menu
  foreground, not the text field foreground. This could look bad if text
  field colors were customized using the "Use jEdit text area colors in
  all text components".
- Fixed a problem where the Complete Word popup would not be closed
  under some circumstances.
- "Unsplit Current" command no longer changes the divider location to
  zero.
- "Copy Append to Register" and "Cut Append to Register" commands would
  throw NullPointerExceptions when appending to a register that didn't
  exist. The correct behavior is to put the selected text in the
  register.
- $ at the end of an abbreviation expansion is now treated literally.
- Fixed an obscure bug that could result in exceptions being thrown by
  the caret status display.
- Fixed a problem with BeanShell namespace handling that would cause
  some macros to fail (eg, Add_Prefix_and_Suffix.bsh).

+ API Changes

- Macros.Handler.accept() now takes a path name, not a file name. This
  should not affect existing plugins since none that I know of
  override this method.

* Version 4.1pre5

Thanks to Axel Biernat, Chris Petersen, Eric Benoit, Fan Ho Yin, Kris
Kopicki, Marco Gotze, Ollie Rutherfurd, and Steve Snider for
contributing to this release.

+ Syntax Highlighting Changes:

- Added NQC syntax highlighting (Fan Ho Yin)
- Added Ruby-HTML syntax highlighting (Eric Benoit)
- Added Pike syntax highlighting (Marco Gotze)
- Updated C-Sharp syntax highlighting (Ollie Rutherfurd)
- Updated Perl syntax highlighting (Chris Petersen)
- Updated PL-SQL syntax highlighting (Steve Snider)
- Updated CSS syntax highlighting (Axel Biernat)
- The "More accurate syntax highlighting" option is no longer. When it
  was on, it would do the following:

  - Cause the buffer to be parsed entirely by the syntax engine when
    first loaded.
  - When parsing a line for syntax tokens, it would scan back to the
    start of the buffer looking for a line with valid syntax info,
    instead of only looking 100 lines back.

  However, the second made the first unnecessary, and with the first
  behavior gone, the performance hit is not noticable. So this option is
  now effectively always on.

+ Global Options Dialog Changes:

- The tool bar option pane now has an "Edit" button for modifying the
  currently selected tool bar entry.
- Now org.gjt.sp.jedit.gui.OptionsDialog is an abstract class, with a
  concrete org.gjt.sp.jedit.options.GlobalOptions subclass with the
  Global Options-specific code. This allows plugins to create paned
  dialog boxes similar to Global Options.
- The "Standard go to next/previous word behavior" setting has been
  removed; instead some new actions have been added which can be bound
  to C+LEFT, C+RIGHT, CS+LEFT and CS+RIGHT to achieve the behavior of
  this setting:

  Go to Next Word (Eats Whitespace)
  Go to Previous Word (Eats Whitespace)
  Select Next Word (Eats Whitespace)
  Select Previous Word (Eats Whitespace)

+ Plugin Manager Changes:

- Added "Select All" button to Install and Update Plugins dialogs
- The plugin list is only downloaded once per Plugin Manager dialog box
  instance

+ Miscellaneous Changes:

- Added an "Unsplit Current" command, bound to C+0 by default. It
  removes the split pane containing the current edit pane only, as
  opposed to the "Unsplit All" command (previously "Unsplit", still
  bound to C+1) which removes all splits from the view.
- Behavior of "Warn if file is modified on disk by another program"
  setting is now more intuitive; even if its off, the write protection
  status of a buffer is still updated if it changes on disk. Also this
  setting now controls the modification check when saving; previously it
  only controlled the check performed when jEdit received focus.
- jEdit now makes sure that windows are within the bounds of the screen
  when loading saved geometry. This should improve matters for people
  who use a laptop with a docking station that has a different
  resolution, etc. (Kris Kopicki)

+ Bug Fixes:

- Line numbers in the 'Markers' menu were off by one
- On some Java versions, the popup menu code would not work in frames
  and dialog boxes and print a stream of exceptions
- Fixed exception thrown on MacOS X when attempting to list "Local
  Drives" in the file system browser (Kris Kopicki)
- Fixed problems if a macro file name had a space in it
- Fixed a number of problems with mode property handling:
  - It was not possible to override a mode's property with a blank
    value; for example if you no longer wanted objective-c mode to open
    *.m files (and instead use matlab mode for those files) you had to
    enter a dummy filename glob in the objective-c settings.
  - Changing the filename or first line glob in the "Mode Specific" pane
    would not take effect until jEdit was restarted.
- Entering a relative path in the file system browser's "Path" field
  didn't work
- "Format Paragraph" command would insert extra newlines if a line ended
  with a space
- The MacOS plugin had a version check that looked for an exact MRJ
  version match, rather than an equal or newer version. This broke the
  plugin when running on MacOS X 10.2. (Kris Kopicki)
- If an action caused the creation of a dockable window, the standard
  variables (view, buffer, textArea, editPane) would be cleared from the
  action's namespace from that point on. This has been fixed by making
  dockable creation and action invocation take place in different
  namespaces.
- Fixed a display problem if a SEQ_REGEXP, SPAN_REGEXP or
  EOL_SPAN_REGEXP syntax highlighting rule matched a tab.
- Added a workaround for a Java problem were very wide rectangles were
  not painted properly in the selection painting code.
- The TERMINATE_AT rule was broken; the number of characters to
  terminate at was taken to be from the start of the file, not from the
  start of the current line. This broke FORTRAN syntax highlighting, for
  example.
- The "Close Current Docking Area" command should work now.

* Version 4.1pre4

Thanks to Kris Kopicki and Stefan Jozsa for contributing to this
release.

+ Syntax Highlighting Changes:

- Added AppleScript syntax highlighting (Kris Kopicki)
- Improved Informix-4GL syntax highlighting (Stefan Jozsa)

+ User Interface Changes:

- TAB key can now be used to insert completions in the 'Complete Word'
  popup.

+ Bug Fixes:

- Macro listing code was completely broken in 4.1pre3; only the first
  macro in each directory would be shown.
- Disabled Java-style auto indent for LISP and Scheme modes since in
  fact it is quite inappropriate there.
- Gutter highlight interval setting was broken.

* Version 4.1pre3

Thanks to Ivan Herman, Kris Kopicki, Marco Hunsicker, Matthias Schneider
and Rudolf Widmann for contributing to this release.

+ Syntax Highlighting Changes:

- Added regular expression matching features. Currently this is used to
  implement better (but still not 100% accurate) highlighting of various
  constructs in Perl mode, like s/// and such.

  - SEQ_REGEXP rule: highlights a sequence matching a regular
    expression.
  - SPAN_REGEXP rule: like SPAN but the start string is a regular
    expression (the end cannot be a regular expression currently).
  - EOL_SPAN_REGEXP rule: ditto, but for EOL_SPAN.

  - All rules must define a HASH_CHAR attribute; this is the character
    that the rule will be hashed by, to avoid checking every character
    against every regexp.

- Added a new AT_WORD_START attribute to all syntax rules. If this is
  set to TRUE, the rule will only match if it is at the start of a token
  boundary (in most cases, this is the same as a word boundary, hence
  the name).

  To illustrate the difference, suppose you have a SPAN rule that
  matches from "quux(" to ")". Without AT_WORD_START, it would highlight
  this sequence:

  foobarquux(hello world)

  However with AT_WORD_START it would only highlight if there was a
  token in between foobar and quux().

- CHILL (CCITT recommendation language) syntax highlighting added.
  (Rudolf Widmann)

- Updated CSS syntax highlighting for CSS2 spec. (Ivan Herman)

- Updated AWK and COBOL syntax highlighting. (Matthias Schneider)

+ Editing Changes:

- Previously when expanding an abbreviation with positional parameters,
  unspecified parameters would expand to $n where 'n' is the number of
  the parameter. This was not very intuitive; now missing parameters
  expand to empty strings, and result in a status bar message being
  shown.

+ File System Browser Changes:

- In file dialog boxes, the 'File name' text field now supports
  auto-completion. Previously auto-completion was only supported in the
  browser view itself.

- For some reason I can't remember now, the state of the 'Filter' check
  box was only being saved on the browser, and not the dialog box
  versions of this control. I have changed this so the state of the
  check box is preserved in all cases.

- You can now right-click on directories in the parent directory list to
  display a menu of commands.

+ Global Options Dialog Changes:

- Added an option to Utilities->Global Options->Docking for
  jEdit 4.0-style tool bar placement.

- Text area and gutter color settings have been moved to the Text Area
  and Gutter panes of the Global Options dialog box; the Colors pane is
  no longer.

- The "smart home" and "smart end" settings are now much more flexible.
  Instead of them being flags in the Text Area pane, the various
  behaviors of the Home and End keys have been split into multiple
  actions, all of which can be bound to any shortcut key (including HOME
  and END of course) in the Shortcuts pane.

+ Window Docking Changes:

- 'Close Top/Left/Bottom/Right Docking Area' commands all merged into a
  single 'Close Current Docking Area' command, bound by default to
  C+e C+BACK_QUOTE.

- 'Go to Top/Left/Bottom/Right Docking Area' commands added, bound by
  default to C+e C+UP/LEFT/DOWN/RIGHT. It opens the docking area in
  question if it is closed, and sends keyboard focus to the selected
  dockable window.

- 'Go to Text Area' command added, bound by default to C+e C+e. It sends
  keyboard focus to the text area.

- The popup menu shown when right-clicking on the strip of buttons in a
  dockable window container now contains a new sub-menu, labelled "New
  Floating Instance". This menu contains items which open new floating
  instances of the windows docked in this area.

+ User Interface Changes:

- A few more menu bar rearrangements:
  - 'Recent Directories' moved from File to Utilities menu.
  - 'Current Directory' moved from File to Utilities menu.
  - 'Select Line Range' from from Edit to Edit->More Selection.
  - BeanShell evaluation commands moved from Macros to
    Utilities->BeanShell.
  - Various troubleshooting-related commands moved from Utilities to
    Utilities->Troubleshooting (like they were in 4.1pre1).

- More tool bar icons added. (Kris Kopicki)

+ Miscellaneous Changes:

- The JARClassLoader now registers plugin packages and manifest files.
  (Marco Hunsicker)

- Because a lot of people send me their .jedit/activity.log files
  without invoking 'Update Activity Log on Disk' first, I have added a
  notice to this file, stating that you must invoke the above command
  otherwise the file will be incomplete.

- Added two new actions, by default not in any menu, nor bound to any
  keystroke; 'Toggle Line Separator' and 'Toggle Word Wrap'. They have
  the same effect as clicking the appropriate section of the status bar,
  and they can be bound to shortcut keys or added to the tool bar, etc.

- Removed ICONS.LICENSE.txt file since we no longer use the Sun icons.

+ Bug Fixes:

- Clicking the 'Open' button or pressing Enter in the 'Open File' dialog
  box did not work; only double-clicking would open files.

- Changing the tab size, indent size or maximum line length settings on
  a global or mode-specific basis should now take effect in all open
  buffers. Previously changes to these settings would only take effect
  in subsequently opened files.

- Under some circumstances the file system browser would case a
  different buffer to be selected in the current view after a directory
  was loaded. It has been confirmed that one jEdit user was admitted
  to a mental asylum because of this bug.

- The file system browser's 'Encoding' menu did not work at all.

- Adding a mode to the user modes directory with the same name as one in
  the system directory would not take effect until jEdit was restarted.

- Abbreviations whose expansions started with the text "<html>" could
  cause problems since Swing automatically tries to display such strings
  as HTML. A workaround has now been added.

- If a virtual file system displayed a dialog box upon creating a VFS
  session (for example, an FTP login dialog box), cancelling the dialog
  would leave the file system browser stuck with a 'Loading' message.
  This has now been fixed.

- If multiple selection mode was enabled, clicking the mouse did not
  move the caret! What a silly bug...

- If a mode file did not contain well-formed XML, the resulting error
  dialog box would be empty.

- Due to an oversight when implementing the ability to have startup
  scripts written in any language, scripts were being run in their
  own namespace in 4.1pre2; as a result functions and variables defined
  at startup were not available to other macros.

+ API Changes:

- Buffer.getFile() method deprecated. Use Buffer.getPath() and the VFS
  API instead.

* Version 4.1pre2

Thanks to Alexander Maryanovsky and Gerd Knops for contributing to this
release.

+ Editing Changes:

- The 'Smart Home/End' setting has been split into two separate
  settings, one for Home and one for End.

- Made behavior of mouse in gutter more customizable. (Gerd Knops)

- Added option to make double-click drag treat each non-alphanumeric
  character as one word. (Gerd Knops)

- Added an option to not hide the final end of line character of a
  buffer.

+ Syntax Highlighting Changes:

- Syntax rules can now specify the AT_WHITESPACE_END attribute. If this
  is set to TRUE, then the rule will only match if it is the first
  non-whitespace text in the line.

- Fixed minor highlighting problem with properties mode.

+ File System Browser Changes:

- Multiple files can now be selected in the stand-alone browser;
  right-clicking no longer deselects all but the clicked file.

- Right-click menus in the 'Open File' dialog box now contain menu items
  for opening files in new views and new splits.

- File->Open With Encoding menu replaced with an 'Encoding' menu in the
  file system browser's 'Commands' menu.

+ Scripting Changes:

- 'scriptPath' BeanShell variable is set to the macro file path while a
  macro or startup script is executing.

- Startup scripts can now be written in any language supported by a
  registered macro handler; so you can put Python scripts in the
  'startup' directory if you have the JythonInterpreter plugin
  installed, for example.

- Slight performance improvement when invoking editor actions.

+ Miscellaneous Changes:

- The HyperSearch feature no longer blocks the GUI while listing a
  directory (which could take some time).

- New 'broken image' icon shown in place of tool bar buttons whose icons
  cannot be located.

- Improved popup menu positioning code.

- jEdit.get{Integer,Double}Property and Buffer.getIntegerProperty() no
  longer barf if the property contains leading or trailing whitespace.

- Added View->New Plain View command that opens a new view without
  toolbars or dockables. This can be useful for opening up a quick
  window for taking notes, etc.

- File system browser color regexps are now case-insensitive.

- Each dockable window now has a <name>-float action that opens a new
  instance of that dockable in a few floating window (regardless of the
  docking status of the window). These commands do not appear in the
  menu bar, however they can be added to the context menu and tool bar,
  or bound to keystrokes.

+ Bug Fixes:

- Fixed default install path settings in installer when running on Unix.
  Now, instead of checking for a user name of "root", it checks if the
  appropriate subdirectories of /usr/local are writable.

- When evaluating BeanShell expressions, the standard
  view/buffer/editPane/textArea variables would not be unset when the
  expression finishes executing.

- The text area did not get initial focus if there is a window docked
  in the left or top part of the view, and the 'tip of the day' was
  switched on.

- Removed debugging messages from PanelWindowContainer.java.

- Fixed bottom tool bar layout problem.

- Image shown in 'welcome to jEdit' page in help was not being installed
  by the installer.

- Fixed a bug in the folding code that could be triggered by switching
  to indent fold mode, collapsing some folds, switching to explicit fold
  mode, then switching back to indent fold mode again.

- The view's minimum size was rather large, this caused problems while
  trying to resize it if the option to decorate window borders using the
  Swing L&F was enabled.

- 'Expand Fold Fully' command didn't work.

- The 'gutter bracket highlight' setting in the Color option pane didn't
  work.

- Fixed possible ClassCastException if a 'paste previous' string started
  with the text "<html>". Swing has a weird feature where any text label
  beginning with <html> is rendered using the Swing HTML engine, and
  this would trip it off.

- HyperSearch inside a selection did not handle ^ and $ in regular
  expressions correctly on the first or last line of the selection.

- Insertion of { and } in C-like modes can now be undone in one step.

- Another indentPrevLine regexp fix. (Alexander Maryanovsky)

+ API Changes:

- It is no longer necessary to define labels for dockable window
  -toggle actions. The label is now automatically created by appending
  "(Toggle)" to the non-toggle action's label.

- Old-style dockable window API no longer supported; the following
  symbols have been removed:

  EditBus.addToNamedList() method
  EditBus.removeFromNamedList() method
  EditBus.getNamedLists() method
  CreateDockableWindow class
  DockableWindow interface

* Version 4.1pre1

Thanks to Alexander Maryanovsky, Alfonso Garcia, Claude Eisenhut,
Joseph Schroer, Kris Kopicki, Steve Snider and Thomas Dilts for
contributing to this release.

+ Editing Changes:

- Improved rectangular selection. It now does the right thing with hard
  tabs, and the width of the selection is no longer limited to the width
  of the last line. A new 'Vertical Paste' command has been added (it
  behaves in a similar manner to the 'Virtual Paste' macro, which has
  now been removed). When inserting text into a rectangle, the inserted
  text is left-justified with spaces. The quick copy feature has been
  extended to support this -- a Control-middle click vertically pastes
  the most recently selected text.

- Fixed auto-indent behavior when entering constructs like:
  if(foo)
    bar();
  baz();
  in Java/C/C++/etc modes. Previously the 'baz();' would get an
  unnecessary level of indent, requiring it to be removed manually.
  (Alexander Maryanovsky)

- Added an option to the 'Text Area' pane to implement "standard"
  previous/next word behavior, like that in a lot of other programs
  (next word moves caret to start of next word, instead of end of
  current word; previous word moves caret to end of previous word,
  instead of start of current word).

  You might remember I implemented this behavior for a little while in
  the 4.0 pre-releases, but now it's back as a configurable option.
  (Alexander Maryanovsky)

- Added a few extra key bindings for Windows users:
  S+DELETE bound to cut
  C+INSERT bound to copy
  S+INSERT bound to paste

- Optimized the several parts of the buffer code; this should make
 'Replace All' and similar edit-intensive tasks much faster.

+ Search and Replace Changes:

- HyperSearch now respects rectangular selections. 'Replace All' already
  supported rectangular selections.

- Directory search is now VFS-aware; however it shows a confirm dialog
  before doing a search on a remote filesystem. If your VFS is not
  affected by network latency, you can have the getCapabilities() method
  return the new LOW_LATENCY_CAP capability.

- Tool bars no longer take up the full width of the view. This saves
  some screen space.

- Clicking 'Cancel' or closing the search and replace dialog box no
  longer shows warnings about empty filesets, etc.

+ Syntax Highlighting Changes:

- More intelligent highlighting of numbers. Instead of hard-coded
  heuteristic that only worked for C-like languages, numbers are now
  highlighted as follows:
  - A keyword consisting of only digits is automatically marked with the
    DIGIT token type.
  - If it has a mix of digits and letters, it is marked as DIGIT of it
    matches the regexp specified in the rule set's DIGIT_RE attribute.
    If this attribute is not set, then mixed sequences of digits and
    letters are not highlighted.
  - In Java mode, for example, the default value of this regexp is
    "(0x[[:xdigit:]]+|[[:digit:]]+)[lLdDfF]?".

- EOL_SPAN elements can now have DELEGATE attributes.

- SEQ elements can now have DELEGATE attributes. If specified, this rule
  set will be swapped in after the text matched by the sequence rule.

- Delegates to rulesets with TERMINATE rules should work now.

- IGNORE_CASE attribute of KEYWORDS rule removed. This value is now the
  same as the IGNORE_CASE attribute of the parent RULES tag.

- WHITESPACE rule no longer necessary in mode definitions.

- It is no longer necessary to define <SEQ TYPE="NULL"> rules for
  keyword separator characters. Now, any non-alphanumeric character,
  that does not appear in a keyword string or the "noWordSep"
  buffer-local property is automatically treated like it had a sequence
  rule.

- Added FORTRAN syntax highlighting (Joseph Schroer)
  Added Interilis syntax highlighting (Claude Eisenhut)
  Updated PL-SQL mode (Steve Snider)
  Updated NetRexx mode (Patric Bechtel)

- HTML and related edit modes now correctly highlight sequences like:

  <SCRIPT LANGUAGE="JavaScript">...</SCRIPT>
  <SCRIPT ... whatever ...>...</SCRIPT>

  Previously only JavaScript between <SCRIPT> and </SCRIPT> was
  highlighted. A similar change has been made for <STYLE> tags.

- Improved loading time of plain text files if 'more accurate syntax
  highlighting' is on.

+ User Interface Changes:

- Status bar looks somewhat different now, and shows the word wrap mode
  and line separator status.

- The search bar commands now show the search bar if it is hidden.
  Search bars that come into existence as a result of this have an
  extra close box button on the right. Pressing ESCAPE in the text field
  or clicking the button hides the search bar.

  I have renamed the search bar setting in the General option pane to
  "Always show search bar", and made it be switched off by default.
  You can revert to the old behavior simply by switching this setting
  back on.

- The text color and style used to show the "[n lines]" string can now
  be set independently of the EOL marker color.

- Plugin manager window can be closed by pressing Escape.

- Open buffers are shown with a different icon in the file system
  browser.

- 'I/O Progress Monitor' window is dockable now.

- Added two new sub-menus to the Utilities menu, 'jEdit Home Directory'
  and 'Settings Directory'. These two work in a similar fashion to the
  'Current Directory' menu.

  Also the 'Current Directory' menu (and these two new menus) now also
  lists directories; selecting a directory menu item opens it in the
  file system browser.

- Moved BeanShell evaluation commands from 'Utilities' to 'Macros' menu,
  rearranged 'Edit' menu.

- New splash screen, about box, and tool bar icons. (Kris Kopicki)

- Added ColorWellButton control. Under Mac OS X, changing the background
  color of a JButton doesn't work if the MacOS Adaptive look and feel is
  in use... so I wrote a custom control. It looks better and eliminates
  duplicated code anyway. Plugin developers, please use this instead of
  the widely-copied and pasted JButton trick. (Kris Kopicki)

- Added RolloverButton control. Use this instead of the JToolBar
  "isRollover" client property (which only works in the Metal L&F unless
  you're running Java 2 version 1.4). (Kris Kopicki)

+ OS-specific Changes:

- MacOS plugin version 1.2.1 adds an option pane with a few settings,
  and some bug fixes and cleanups. (Kris Kopicki)

- When running on MacOS, the roots: filesystem now lists all disks
  mounted under /Volumes. (Kris Kopicki)

- On Unix, the installer now defaults to installing in the user's home
  directory when running as a non-root user.

+ Miscellaneous Changes:

- WheelMouse plugin integrated into core -- no need to install a
  separate plugin to get wheel mouse scrolling under Java 2 version 1.4.

- Added SOCKS proxy support. This option will help people trapped behind
  a Microsoft Proxy Server configured to use NTLM authentication.
  Normal HTTP connections through the proxy would not be possible since
  Java does not implement this proprietary protocol; however a little
  known fact is that MS Proxy Server also usually runs a SOCKS service
  that does not require a password. (Alfonso Garcia)

 - BeanShell 1.2b6 included. Changes since 1.2b5 are:

  - Made bsh.Parser public and added a main() method allowing users to
    call the parser on files for simple validity checking.
  - Made a small addition to grammar to provide an option to retain
    formal (javadoc style) comments in the parse tree.
  - Fixed accessibility bug in finding fields.
  - Fixed scoping on catch blocks such that untyped variables in the
    catch parameter do not leak out of the block. They now act as they
    would with a declared type in Java (local).
  - Fixed some thread safety bugs with try/catch blocks.
  - Fixed Interpreter serialization issue - reset streams.
  - Fixed bug in accessibility affecting access to package hidden
    superclasses.
  - Exposed bsh.BshMethod and added a public invoke() method.
  - Added getMethods() method to namespace to enumerate methods.

  The fact that BshMethod is now public has facilitated optimizations
  which improve performance of BeanShell search and replace.

- Updated printing code (Thomas Dilts)
  - Uses Java 2 version 1.4 print dialogs when running on that Java
    version
  - Performs printing in a background thread

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

+ Bug Fixes:

- Select Open File; press Enter first; then choose a file to open. Bang,
  an error message. Now fixed.

- When closing a file with unsaved changes, the file will now stay open
  if the save failed. Previously it would be closed and the unsaved
  changes would be lost forever.

- If 'Keep Dialog' was off, the search dialog would close, even after an
  unsuccessful HyperSearch. This was inconsistent with the bahavior for
  normal searches, where an unsuccessful match did not close the dialog
  (so you could correct the search string easier).

- The 'initially collapse folds with level' setting was not being
  honored when reloading files.

- A few printing bugs fixed. (Thomas Dilts)

- Workaround for views not being brought to front on windows. This
  workaround minimises and then restores the view, so a minimise
  animation might be visible for a brief period of time. However,
  there is no other way of fixing this. (Alexander Maryanovsky)

- Dynamic menus (Recent Files, etc) did not work under MacOS X if the
  menu bar was at the top of the screen. Note that this does not solve
  the other problem with having the menu bar there, namely keyboard
  shortcuts not being displayed. For now, leave the menu bar inside the
  frame for best results. (Kris Kopicki)

- Fixed silly windows backup saving bug.

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

- 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)

- 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.

- Middle mouse button drags now work if there is an existing selection.

+ API Changes:

- Two methods added to jEdit class:
  getDoubleProperty()
  setDoubleProperty()

- Removed unused TextUtilities.findMatchingBracket(Buffer buffer,
  int line, int offset, int startLine, int endLine) method.

- New ViewUpdate.EDIT_PANE_CHANGED message added; it is sent when a
  different edit pane in a split view receives focus.

- EBMessage.veto(), isVetoable() methods and EBMessage.NonVetoable class
  deprecated.

- Removed old text area highlighter API, old buffer folding API.

- Removed BufferUpdate.ENCODING_CHANGED, FOLD_HANDLER_CHANGED messages;
  replaced with generic BufferUpdate.PROPERTIES_CHANGED.

- MultiSelectStatusChanged message removed.

- Buffer.markTokens(int lineIndex) deprecated; use
  Buffer.markTokens(int lineIndex, TokenHandler tokenHandler) instead,
  with one of the available TokenHandler implementations from
  org.gjt.sp.jedit.syntax.

  The tokenizer now behaves differently with respect to whitespace. Tab
  characters are always put into separate tokens with type Token.TAB;
  other whitespace gets token type Token.WHITESPACE.

- Added new jEdit.getActiveView() method.

- VFS file chooser now supports a new 'CHOOSE_DIRECTORY_DIALOG' mode.

- Buffer.getRuleSetAtOffset() method is now public.

jEdit buffer local properties:
:wrap=hard:maxLineLen=72:indentSize=2:
