# jstools changes through 3.6/3.0

(I don't have a record of changes before 3.6/2.0, and for changes to libraries (as opposed to applications) between 3.6/2.0 and 3.6/3.0, I don't have chronological information.)

More recent changes to all the applications and libraries are documented in chronological order.

## General jstools library changes

The jstools libraries have changed extensively since version 3.6/2.0. The biggest change (aside from the addition of new libraries) is that the procedures have been broken down into much smaller libraries, according to function; in version 3.6/2.0 there were only four libraries, but one of them (jlibrary.tcl) was huge and monolithic. They are also now all autoloaded, rather than being explicitly sourced.

## General jstools application changes

The jstools package has changed extensively since version 3.6/2.0. One significant change is that the libraries are now all autoloaded, rather than being explicitly sourced. Another major change is that a lot of the applicationspecific code in `jedit` and `jdoc` (né `jhelp`) has moved into libraries. (This improves startup time, and improves the modularity of the applications. It also makes it easier to share code among applications, and in the case of `jedit` it makes the functionality of the application embeddable in other Tkbased applications without starting a separate process.)

## jabbrevs

* The Save button used to be labelled Write.

## jedit

### Changes since version 3.6/2.0

The following changes have been made since version 3.6/2.0 of `jedit`:

* A lot of code has been reorganised and moved.

* The editor now supports multiple windows. This has required changes at many places in the code, and some new commands.

* The editor can now be embedded easily in other Tkbased applications.

* Support for multiple display attributes (fonts, underlining, colours) has been rolled into the editor. It was previously provided adhoc by a couple of the editing modes. Most of it is now in libraries that can be used by other applications. The `Format' menu has been added to support this.

* You can now choose permode which menus you want displayed. (You can also choose whether you want the buttonbar displayed.)

* The mechanism for using a mode has changed a bit, which means that old code implementing modes needs to change. A mode file now just defines some (at least one) procedures, including `mode:` mode`:init`, where mode is the name of the mode.

* A number of modes have been added, including `exmh-mode`, `jdoc-mode`, `tcl-mode`, and `richtext-mode`.

* Support for a buttonbar below the menubar has been added.

* The ability to flash matching parentheses, braces, and brackets is new.

* The optional `Prefs' menu is new.

* The `Pipe' menu has been renamed `Filter'.

* `vi` bindings have been improved (in the libraries).

* The mouse bindings library has been improved so a click is less likely to be interpreted as a drag; this makes it easier to paste with the middle mouse button and to move the insert point with the left mouse button.

### Changes since version 3.2/1.0

The following changes have been made since version 3.2/1.0 of `edit.tk`:

* The name has been changed to `jedit`, to avoid having a period in the X application name and to avoid potential conflict with other applications.

* A lot of code has been reorganised and moved. A number of the library and editor procedures have incompatible interface changes. A lot of things have been generalised and moved from the editor into the libraries. There are now four libraries used: `jlibrary.tcl`, `jabout.tcl`, `jrichtext.tcl`, and `jbindings.tcl`.

* Support for distinct editing modes based on file type has been added, inspired by GNU Emacs. (The provided modes are fairly rudimentary at this stage.)

* Text (and entry) bindings have been reorganised. The Emacs bindings have been pretty thoroughly redone, and are now in a library (jbindings.tcl) rather than just a sample .textbindings.tcl file. Text bindings are controlled by a preferences option.

* The preferences panel has been split into three separate panels (one controlling values shared with the other jstools applications), and a lot of new preferences have been added.

* A limited undo mechanism has been added.

* Static abbreviations can now be capitalised, with some limits.

* A number of hooks have been added in various places for the use of editing modes.

* Very rudimentary support for tagged text is available in the form of the `Rich Load...' and `Rich Save' commands. This is definitely going to change.

* `Replace All' has been added to the Find panel.

* The `Issue Unix Command...' command is new.

### Changes since version 0.9

The following changes have been made since version 0.9 of `edit.tk`:

* A number of the procedures shared in common by `edit.tk` and `browser.tk` have been combined into the library jlibrary.tcl, and some changes have been made to them. In particular, the fileselection dialogue box has been vastly changed. Autopositioning of dialogue boxes has also been improved.

The names of these procedures have all changed, and this may require changes in your ~/.tk/edittkrc.tcl configuration file.

This library file can either be located in the standard systemwide Tk library directory or in the user's .tk directory (for the convenience of people who don't have write permission in their systemwide Tk library directory, or who wish to customise the shared library procedures).

* The `Checkpoint' and `Revert to Checkpoint' commands are new. They will be eliminated when (or if) I implement a general undo command.

* Support for dynamic and static abbreviations has been added.

* A number of options have been added to the Preferences panel.

* The find panel has been overhauled, and the `Find Again' command has been added.

* Other new commands have been added: `Insert Output of...' and `Issue Tcl Command...'.

* The supplied Emacsstyle .tk/textbindings.tcl key bindings have been improved. In particular, some of the Emacsstyle bindings now apply to Entry widgets like that in the fileselection panel.

* When the selection is piped through a filter, the resulting text is selected, so that further filters can be applied to it.

* The `Unindent' command has become `Unindent/Unquote'; it now removes some styles of email quoting.

* Minor changes have been made to the way prompting for input works.

* Some new keyboard equivalents have been added.

### Changes since version 0.8

The following changes have been made since version 0.8 of `edit.tk`:

* `edit.tk` now works under versions 3.0 through 3.2 (and possibly beyond) of Tk.

* The main configuration file edittkrc.tcl must now be in the directory .tk in your home directory; it can no longer be in the top level of your home directory. (And edittkrc.tcl can't start with a period, while the .tk directory has to.)

* There is now a rudimentary preferences panel. See the description of the `Preferences...' command under The Editor Menu for more information.

* The `About the Author' box has been updated.

* The `Pipe Through...' command is new.

## Libraries split off from jlibrary.tcl in 3.6/2.0

* jalert.tcl

* jconfirm.tcl

* jfindpanel.tcl

* jfs.tcl

* jmetawidgets.tcl

* jmore.tcl

* jparseargs.tcl

* jprefixmatch.tcl

* jprefpanel.tcl

* jprefs.tcl

* jprompts.tcl

* jrichtext.tcl

* jtkutils.tcl

## Libraries that were new in version 3.6/3.0

* joptionbutton.tcl

* jtext.tcl

* jtexttags.tcl

* jtclutils.tcl

* jtkversion.tcl

* jviewers.tcl

## Changes to particular libraries

These changes mostly occurred between versions 3.6/2.0 and 3.6/3.0.

### jfindpanel.tcl

The ability to use regular expressions is new.

### jfs.tcl

* `j:fs` used to result in a `cd` to the directory in which the user selected a file (or the directory the user selected). It no longer does. (Well, actually, it does while it's filling in the listbox, but theen it `cd`s back.) If you want your script to `cd` to the directory the user left the file selector panel in, do so explicitly based on the name returned.

* The options for dealing with file types (and hence the ability to let the user select a file type) are new.``

### jparseargs.tcl

* The `j:parse_argv` procedure is new.

### jprefs.tcl

* For a while, I was using X resource format for preference files. I decided (with the help of some comments by John Ousterhout on `comp.lang.tcl`) that it made sense for the sorts of things I was using these procedures for to be stored as Tcl code instead. However, (1) I hope to provide some sort of GUI for generalised graphical lookandfeel customisation in the future, and that will use X resource format files, and (2) you should make sure your users don't get the impression that they can put arbitrary Tcl code in their preferences files, because it'll get clobbered the next time they save their preferences.

* The .tcl tacked onto the end of filename is new; I added it to avoid conflicts between filenames of the old Xresource format files and the new Tclformat files. (I.e., you don't need to change your calling code, but the new routines will use new filenames.)

### jrichtext.tcl

* These procedures have been rewritten slightly to use the new jtexttags.tcl library procedures.

* The styles for `j:rt:textfonts` have changed to be compatible with the tags used by jtexttags.tcl. Unfortunately that means they're no longer based on the actual commands used to insert rich text.

``