Back to README file

Browse source

Download source distribution

Build instructions

Fix bug where window resize will cause copying process to stop (needed to retry on EINTR).

Fix bug where closing the copying process didn't cause the other end of the pipe feeding stdin from seeing SIGPIPE.

Fix bug where 'New File' was displayed in "echo hi | joe -"

Make piping into JOE binary clean. For example, in: "echo -e 'a\0b' | joe" the NUL was missing.

Check the correct (Windows) path in the home directory for color schemes. This was not re-implemented properly in 4.5.

Fix file access checks. Inaccessible files due to ACL's weren't correctly detected. This was a regression in 4.5.

Switch JOE to issue scrolling commands, even at high baud rates (before this, JOE issued scrolling commands only at 19200 and below because it used to be that simple screen refresh was faster than scrolling in terminal emulators. But this is no longer true with complex screens involving color schemes, unicode and highlighting).

Improve efficiency of screen update algorithm: JOE had been resetting attributes such as background color before performing cursor motions (probably as work around for bugs in old terminal emulators). This made screen update slow when there were many attributes, as with syntax highlighting and color schemes. It was also repeatedly emitting ESC [ K.

Improve screen update algorithm so that spaces at the ends of lines are always emitted. This allows them to be preserved when cutting text with the mouse from a terminal emulator window.

Restore default handling of SIGPIPE and SIGINT for shell commands. This fixes an issue where SIGPIPE doesn't terminate a process as expected, for example by the head -n 10 in: ^K R !sh -c 'while :; do echo y; done' | head -n 10. This issue only occurred in read/write to !, JOE already did the right thing for shell windows and the filter region through shell command.

Fix bug where path restart (//) was being applied to block filter command prompt. Strange things would happen if you had adjacent slashes in command arguments.

-highlighter_context was missing from many file types, which negated some improvements from the previous version.

Fix bug where JOE would sometimes crash when editing shell scripts. This was due to an obscure bug in the syntax highlighter: 'reset' command (used for default state) was incorrectly messing with stack.

Support strikeout and double-underline attributes for the few terminal emulators that support them. Use "stricken" and "dunderline" in the syntax files, or \s and \z in help screens and status line.

Install Gnome .desktop files for JOE. This allows you to use JOE in GUI "Open With" mouse actions.

Upgrade to Unicode 10.0.0. Add configure environment variable that allows you select Unicode 8.0.0, 9.0.0 or 10.0.0.

Before:

After:

Don't try to open files for writing to check file access. This behaves better on unionfs mounts.

For jmacs: ^Q^J now again inserts

in the string replace prompt. This broke beginning with JOE 4.0.

Fix regex assertions: they were not working because the character before the search position was not being loaded.

Fix exsave: (^K ^X) should close file when a block is present in the window, and the file is unmodified (regression from ^C change in 4.2).

Now pass character which invoked a macro to each macro step and call. If a macro step happens to be the 'type' command, the character which invoked the macro will be typed in. For example, this macro will type three 'X's. Before this change you got three NULs.

Updated all language syntax files to use comment_todo and string/comment contexts where appropriate.

The gutter containing line numbers has a dynamic size based on the length of the file, rather than a fixed size of 10.

The current line can be highlighted by pressing ^T U or by enabling the -hiline option.

24-bit color support can be enabled by setting the COLORTERM environment variable to truecolor or 24bit .

New color scheme feature, which can be accessed with ^T S or by setting the -colors option.

Fix segfault due to buffer overrun. This happens if a line with many backslashes appears in the status line context display.

Download

(from newer version) Fix segfault due to buffer overrun. This happens if you a line with many backslashes appears in the status line context display.

Fixed a missed merge that prevented some options menu items from being changed (tab width, tab char, etc).

Gracefully handle short terminals: fix segfaults which occur when trying to shrink terminal while many windows are on the screen or while turning on help with a short terminal. Fix similar bugs involving the skiptop option. JOE now works even if the terminal height is only one line.

Character classes with ranges were not working for UTF-8 (as in \[a-z])

Get mouse to work in menus: this broke in 4.1

Forward direction delimiter matching where the delimiters do not begin with special characters (for example in Verilog "begin" / "end") was not working.

Use 'LC_ALL=C sed' to get JOE to compile in OS X.

PgUp/PgDn would try to scroll menu if the window above is a menu (it should do this only for completion menus associated with prompts)

Negative numbers were not being recognized in blocks

Do not kill region highlighting during incremental search (patch from Petr Olsak).

Handle middle mouse button in "joe -mouse" mode (before it did nothing). It's treated as paste (copy region to mouse) as expected. (patch from Petr Olsak).

Force more appropriate modes when we enter hex dump display: enable overtype, disable autoindent, wordwrap, ansi, picture.

Add a mode 'title' to enable or disable the status line context display (previously autoindent mode was overloaded to do this).

Improve performance of status line context display (which shows the first line of the function that the cursor is currently in). This feature was making JOE very slow on extremely large files with auto indent enabled (typically JSON or XML data files). Now the syntax highlighter computes the context display (using a new syntax named context.jsf).

If cursor was at end of a long line and you switched to hex dump display mode, then hex dump was scrolled. Now scroll offset is reset when you switch to hex display mode.

Guess_crlf forced UNIX line endings for new files even though crlf was set. Now crlf is left alone if guess_crlf can not determine the line ending.

Allow koi8r and koi8-r for KOI8-R in joe_getcodeset (which is only used if there is no setlocale).

Fix issue where highest valued Unicode character equivalent was not translating to its corresponding 8-bit character. Effect of this was that Delete key was not working in shell windows in ASCII character set.

Fix bug where indent step value was not shown on ^T menu

Fix use after free bug which shows up as a crash in OpenBSD

Add -left and -right options to control the amount scrolling when the cursor moves past the left or right edge of the screen. When the baud rate is low these are automatically set to a large amount. Also, these now control the manual horizontal scrolling commands. When these are positive, they indicate number of columns. When they are negative, they indicate a fraction of the screen width (-2 is 1/2 the width).

Make new regex engine (from JOE 4.1) more compatible with the classic engine. \y is now shorthand for \(\.\*\), so that it does what \* did in the old engine. Also:

Tab completion now works at the calculator prompt (and in all prompts which allow numeric input, such as ^KL- go to line).

Calculator region functions now assume the entire buffer if no region is set.

Built-in calculator now prints and accepts separating underscores for clarity. For example, 4_294_967_296 instead of 4294967296.

Built-in calculator can now print and accept numbers in binary, octal and engineering formats: dec 12_345 eng 12.345_0e3 bin 0b11_0000_0011_1001 oct 0o3_0071 hex 0x3039

Tags search now tries to find the tags file in parent directories if it does not exist in the current directory and if the TAGS environment variable was not set.

Enable -noxon by default (disable ^S/^Q flow control). This allows us to bind ^Q to quote and ^S / ^R to incremental search.

Provide aborthint and helphint options so that the ^C and ^K H hints can be customized depending on the rc file (so say ^G for abort in jmacs, for example).

Add ^KH for help to search and replace prompts. Many JOE users do not know about this context sensitive help.

Remove time and "Ctrl-K H for help" message from status bar. Beginners often don't notice this help message, and it takes up valuable status bar space that power users want for the context display.

Mention Ctrl-Arrow region selection, status and goto matching delimiter commands on the first screen.

Make it more obvious that there is more than one screen: put the help for help inline with the text instead of in the (seemingly invisible) header.

How do I close all files and exit? Now Ctrl-K Q does this. Previously ^K Q was the same as ^C: abort a single file.

How do I dismiss the region highlighting? The traditional way is to hit ^K B ^K K, but this is slightly non-obvious and has always been awkward. Now Ctrl-C will do it.

How do I save and exit? The startup copyright notice has been replaced with basic help for beginners: ^K Q to exit and ^K H for help.

New or improved syntax files for the following languages:

Download

Fixes to keep the Window title in sync with the current file.

Brought in Ryan Prichard's winpty for a better pop-up terminal experience (now with tab-completion, colors, doskey, and support for Powershell)

Parse "Entering directory `/home/xxxxxx'" messages to determine the directory containing the file with an error message.

Change to the current directory before running the command

Tab completion now works for the command and its arguments

Fix bug where regular expressions were not working in incremental search when wrap is enabled (which is the case in jmacs).

Ignore case for letter commands: ^X i and ^X I are the same

M-^ deleted indentation but did not join with previous line

Highlighter enhancement: when % is used in place of a character list, it matches the save_c delimiting character as-is (vs. & which matches the opposite character). For example, if save_c has {, then % matches { while & matches }. This allows JOE to highlight q{hello { there } } in Perl.

Added file type (as defined in ftyperc) setting option. For example, with "joe -type c fred" JOE will assume fred is a C language file. Use ^T F to change the file type from within JOE.

Add options to control sending of bracketed paste mode command to terminal emulator (brpaste) and detection of paste by timing (pastehack).

Quoted insert of TAB always inserts a TAB character, even when smart indent is enabled.

Macros after :def are now allowed to cross lines in the joerc file

Backspace now jumps back to parent menu in ^T submenus (and remembers the cursor position within the parent)

Tab completion now handles directory and file names with spaces in them.

Tab completion now works for the command and its file arguments after '!' in file prompts. Tab completion now works for the filename after '>>' in file write prompts.

Fixed issue where syntax could not be set on command line with -syntax.

Fixed issue when recording paste in a macro. If you tried to play the macro, the pasted text is not inserted and JOE is stuck waiting for the bracketed paste end string.

Prevent filt and blkdel from modifying read-only buffers. This could happen if you run them from modifyable buffer but with block set in a read-only buffer.

Improve performance where JOE would seem to lock up if you tried to reformat a very long single word due to O(n^3) algorithm.

Fix bug where lockup would happen if you try querysave when the only buffer left is the startup log.

Fix bug where position cursor history operations would mix pointers between different buffers if user had switched buffers in a window.

Fix bug where \ was not parsed correctly within syntax file character lists unless it was at the end of the string.

Remove C usage which is illegal in C++ so that JOE can be compiled by C++ compilers as well as C compilers. This is useful because C++ compilers sometimes warn about issues that C compilers miss.

Clean up code so that we get a clean compile even with many more warnings enabled. Going forward this helps find real bugs by highlighting new warnings.

Give up trying force all strings to "unsigned char *" so that the code is less weird.

Switch to ptrdiff_t for memory offsets and off_t for file offsets (prior to this, int and long were used). Now you can edit files larger than 4 GB on 32-bit systems.

\c for identifier continuation character, \C for not identifier continuation character

Use \p{Cherokee} to specify any character from a named Unicode block.

Use \p{Lu} to specify a Unicode character class: any one of L, Lu, Ll, Lt, Lm, Lo M, Mn, Mc, Me N, Nd, Nl, No P, Pc, Pd, Ps, Pe, Pi, Pf, Po S, Sm, Sc, Sk, So Z, Zs, Zl, Zp C, Cc, Cf, Cs, Co, Cn See: ftp://ftp.unicode.org/Public/5.1.0/ucd/UCD.html#General_Category_Values

Use \x{f123} to specify a particular character.

Character lists in syntax files and search strings (regular expressions) now provide access to the Unicode category database and provide some other useful character classes:

Identifiers within JOE now allow Unicode. For example, variables at the math prompt and JOE macros can use any letter.

Jump to matching delimiter (Ctrl-G) now supports Unicode for word delimiters (for example, within XML tags).

Note that even if you are using an 8-bit locale, keys are translated to UTF-8 before keymap lookup. This means you must use the Unicode code for your character in the joerc file, not the 8-bit code for the character.

Also you can specify Unicode in hexadecimal like this: U+F123

Key sequences in the joerc file are now UTF-8 coded Unicode.

Switched to new character class data structure for faster Unicode (uses radix search instead of binary search).

Character class database has been updated to the latest version (Unicode 8.0.0)

Case conversion allowed in replacement string, as in sed: everything between \U and \E converted to uppercase.

Submatches within regular expressions can now be any size (up to the size of the disk!). Before this, they were limited to 16K.

Standard syntax regular expressions are now used in the ftyperc file (which is used to determine the syntax of the file by inspecting its contents)

JOE also supports the standard regular expression syntax where these characters are not escaped.

JOE now supports full regular expressions (but as before special characters are escaped by default), so:

Old one was a recursive matcher, new one is compiled Thompson NFA matcher

If you change the encoding (with ^T E) between UTF-8, UTF-16 and UTF-16R, JOE will convert the file to the desired encoding on save.

Within JOE, native byte order is called UTF-16 and reversed order is called UTF-16R.

JOE can now edit UTF-16BE and UTF-16LE files. It does this by converting them to UTF-8 during load and back to UTF-16 during save.

New or improved syntax files for the following languages:

Download

Download

Clean up documentation, convert much of it to Markdown.

Tags search will prepend the path to the tags file file name in the tags file. This is important when JOE finds the tags file via the TAGS environment variable.

Tags search will now match on the member name part of member functions ('fred' will match 'myclass::fred').

Tags search now supports multiple matches. ^K ; can be configured to either provide a menu of the matches or to cycle through them.

Temporary messages are now dismissed by keyboard input only. Before, they could also be dismissed by shell input.

The error parser now ignores ANSI sequences (some versions of grep color their results, now JOE can still parse it).

At file prompts you can begin a new anchored path without having to delete the old one. It means that ~jhallen/foo//etc/passwd is translated to /etc/passwd. Prompt windows are now highlighted to indicate which parts of the path are being dropped. There is a syntax file for this: filename.jsf

Now there is a per-buffer concept of current directory. This was added to make the pop-up shell windows work better, but it's useful in general.

parserr (the error parser) will parse only the highlighted block if it's set. Before it always parsed the entire buffer.

The status command (^K SPACE) can now be customized using the same syntax as the status bar. Look for smsg and zmsg in joerc to see how to do this.

JOE now has pop-up shell windows with full terminal emulation and shell commands that can control the editor. Hit F1 - F4 to bring up a shell window. See Pop-up shell feature for a full description.

Download

fix window size detection bug: can't take out types.h from tty.c

Use joerc if fancyjoerc not there.

Convert double to long long (if we have it) when printing hexadecimal.

Add a new command 'timer' which executes a macro every n seconds. I use this for periodically injecting a command into a shell window for overnight testing of some device.

Save/restore utf-8 and crlf modes when changing in/out of hex edit for better display

Support italic text (on some terminal emulators) with "\l" (patch by Egmont Koblinger)

Use 80th column if terminal has xn capability (patch by pts and Egmont Koblinger).

There is a new flag 'noexmsg' which, when set, makes JOE quiet when it shuts down (suppresses "File not changed so no update needed" message).

JOE now starts up quiet (prints no extra messages when starting). Messages are collected in a startup log (view with ESC x showlog).

When 'notite' mode is enabled, JOE now emits linefeeds to preserve the screen contents in the terminal emulator's scrollback buffer. This can be suppressed with a new flag: nolinefeeds.

Jump to matching delimiter (Ctrl-G) has been improved. It can now use the syntax files to parse the document in order to identify strings and comments which should be skipped during the matching delimiter search. (patch by Charles Tabony).

Change default indent from 2 to 4. Add quick menu to change to common indent values: ^T = (1, 2, 4, or 8). Switch to + and - for definitively setting or clearing options so that 0 and 1 can be use for quick select.

Search JOE image for :include files referenced by the joerc file. Include ftyperc file in the JOE image.

Improve ubop: can reformat a block of paragraphs again. Reformat of adjacent indented paragraphs working again.

Make mail.jsf more forgiving for those of us who still use old UNIX mail

Modify configure scrips to use docdir for extra documents and datadir/joe for syntax and i18n files.

Treat \ as a quote character for file I/O. Now you can edit files like !test with \!test

Use this to add your own macros to ^T.

Menu entries are the pair: 'macro string'. String is a format string displayed in the menu. Macro is executed when then menu entry is selected.

Menus are defined in joerc with ':defmenu name' followed by a set of menu entries.

Menus are now made up of macros instead of options.

Fix crash when JOE tries to write to unwritable file

Fix ^G in Perl mode when you hit it on second brace in:

Allow inserting file in rectangle mode even if selected rectangle is zero-width.

Paragraph format of single line paragraph is indented only if autoindent is enabled. (jqh)

Look at LC_MESSAGES to get the language to use for editor messages.

Fix German and French .po files: they were cause search&replace to break.

Improve HTML highlighter... if you see <? it's probably a script...

Fix bug where backup file did not get modtime of original

You can give a path to the tags file in the TAGS environment variable.

Option which allows you set how many undo records to keep.

Support for 'long long' allows editing parts of files larger than 4GB. For example, you can say: joe /dev/hda,0x100000000,0x1000 to edit the 4KB block at offset 4GB of a hard drive.

Built-in joerc file allows JOE to run even if /etc/joe directory is missing.

Macros can be typed at the ESC X prompt (before it used to accept only commands).

Spell check language can be set in the editor

Single key queries are now internationalized (set local versions in the .po file)

Query windows now expand to multiple lines if necessary

New syntax files: troff, Haskell, Cadance SKILL, REXX, LUA, RUBY. Many of the existing syntax files have been improved.

"Bufed" (prompt for a buffer to edit), works like other file prompt commands: it's a real prompt with history and completion.

File selection menu/completion-list is now above the prompt (which is more like bash). Also it is transposed, so that it is sorted by columns instead of rows.

JOE now matches Thomas Dickey's implementation of my xterm patch (but configure xterm with --paste64).

Highlighting now uses less CPU time and always parses from the beginning of the file (the number of sync lines option is deprecated). Here is a CPU usage comparison for scrolling forwards and backwards through a 35K line C file:

You can now define which characters can indent paragraphs. Also the default list has been reduced so that formatting of TeX/LaTeX files works better.

Many bugs have been fixed. I've tried to address every issue in the bug tracker. Hopefully I didn't create too many new ones :-)

echo "hi" | joe - | mail fred "hi" ends up in first buffer. When you save, mail is sent.

joe - JOE does not try to read from stdin, but when the file is saved, it writes to stdout.

tail -f log | joe A shell process is started which 'cat's the output from 'tail -f' (watch a log file) into the first buffer.

joe < file A shell process is started which 'cat's the file into the first buffer.

Syntax highlighter definition files (.jsf files) can now have subroutines. This eases highlighter reuse: for example, Mason and PHP can share the HTML highlighter.

Build and grep window work more like Turbo-C: the messages window is forced onto the screen when you hit ^[ = and ^[ -.

'e': the search covers all files in the error list.

'a': the search covers all loaded buffers. So you can say:

There are two new search and replace options:

Internationalized joerc files are now possible. If LANG is en_GB, JOE tries successively to load joerc.en_GB, joerc.en and joerc.

JOE now uses gettext(), so that internal messages can be translated to the local language. The /etc/joe directory now has a lang subdirectory for the .po files.

Grep find: use ESC g to grep. Then use ESC space to jump to to indicated file/line.

Improved jpico: search now looks more like real pico

An xterm-patch is included which makes "-mouse" mode work better. (With the patch, also set "-joexterm").

During selection with the mouse, the window will autoscroll when you go past the edge.

The mouse can now resize windows and select menu entries.

The default background color can now be set.

A Perforce SCM "p4 edit" macro has been supplied (along with the hooks

within JOE which support it) so that when you make the first change to a

read-only file, JOE runs "p4 edit". (look in joerc file to enable the

macro).

Hex edit mode has been added. For example: joe -hex /dev/hda,0,1024

New '-break_links' option causes JOE to delete before writing files, to

break hard links. Useful for 'arch' SCM.

JOE now has GNU-Emacs compatible file locks. A symbolic link called

.#name is created, "pointing" to "user@machine.pid" whenever the buffer

goes from unmodified to modified. If the lock can't be created, the user

is allowed to steal or ignore the lock, or cancel the edit. The lock is

deleted when buffer goes from modified to unmodified (or you close the

file).

JOE now periodically checks the file on the disk and gives a warning if

it changed when you try to modify the buffer. (JOE already performed this

test on file save).

The built-in calculator (ESC m) is now a full featured scientific

calculator (I'm shooting for Casio Fx-4000 level here :-), including

hexadecimal and ability to sum (and perform statistics on) a highlighted

(possibly rectangular) block of numbers. Hit ^K H at the math prompt for

documentation.

You can now change the current directory in JOE (well, it prompts with

the latest used directory).

Colors can now be specified in the joerc file

Macro language now has conditionals and modifiers for dealing with

repeat arguments. Jmacs now works better due to this.

Tab completion works at tags search prompt ^K ;

^G now jumps between word delimiters (begin..end in Verilog, #if #else #endif

in C, / .. / and XML tags). If it doesn't know the word, it

starts a search with the word seeding the prompt. It is also much smarter

about skipping over comments and quoted matter.

TAB completion is now much more like bash (again :-). The cursor stays

at the file name prompt instead of jumping into the menu system. Also

^D brings up the menu, as in tcsh. Also, tab completion now works on user

names for ~ expansion.

Now there is a ~/.joe_state file which stores:

all history buffers

current keyboard macros

yank records

Joe now has xterm mouse support: when enabled, the mouse can position

the cursor and select blocks. The mouse wheel will scroll the screen.

When enabled, shift-click emulates old xterm mouse behavior (cut &

paste between applications).

More syntax files: TeX, CSS, OCaml, Delphi, SML and 4GL. Thanks to

all of the contributers.

Vastly improved highlighting of Perl and Shell due to the highlighter now

understanding word and balanced delimiters.