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.
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.
parserr (the error parser) will parse only the highlighted block if it’s set. Before it always parsed the entire buffer.
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.
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 highighted to indicate which parts of the path are
being dropped. There is a syntax file for this: filename.jsf
The error parser now ignores ANSI sequences (some versions of grep
color their results, now JOE can still parse it).
Temporary messages are now dismissed by keyboard input only. Before, they
could also be dismissed by shell input.
Tags search now supports multiple matches. ^K ; can be configured to
either provide a menu of the matches or to cycle through them.
Tags search will now match on the member name part of member functions
(‘fred’ will match ‘myclass::fred’).
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
Remove ` as quote character from incremental search.
Clean up documentation, convert much of it to Markdown.
Search JOE image for :include files referenced by the joerc file.
Include ftyperc file in the JOE image.
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.
Added option to suppress DEADJOE file
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).
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.
JOE now starts up quiet (prints no extra messages when starting).
Messages are collected in a startup log (view with ESC x showlog).
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).
Use 80th column if terminal has xn capability (patch by pts and Egmont
Support italic text (on some terminal emulators) with “l” (patch by
Support bracketed paste (patch by Egmont Koblinger)
Fix line number in syntax highlighter error output
Prevent infinite loops caused by buggy syntax definitions.
New and improved syntax definitions for:
- Ant: contributed by Christian Nicolai
- Batch files: contributed by John Jordan
- C#: contributed by John Jordan
- Debian apt sources.list: contributed by Christian Nicolai
- Elixir: contributed by Andrew Lisin
- Erlang: contributed by Christian Nicolai, Jonas Rosling, Andrew Lisin
- git-commit messages: contributed by Christian Nicolai
- Go: contributed by Matthias S. Benkmann
- HAML: contributed by Christian Nicolai
- INI: contributed by Christian Nicolai
- iptables: contributed by Christian Nicolai
- json: contributed by Rebecca Turner
- Markdown: contributed by Christian Nicolai, Jonas Rosling
- Powershell: contributed by Oskar Liljeblad
- Prolog: contributed by Christian Nicolai
- Puppet: contributed by Christian Nicolai, Eric Eisenhart
- Sieve: contributed by Christian Nicolai
- YAML: contributed by Christian Nicolai
Syntax definition fixes for: C, Python, Java, Lua, sh, Ruby, PHP, TeX,
CSS, and XML
Save/restore utf-8 and crlf modes when changing in/out of hex edit for
Fix autocomplete for paths containing spaces
Accept mouse events beyond column 208 (patch by Egmont Kobligner)
Adjust guess_indent behavior based on user feedback
Fix infinite loop in search and replace
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.
Convert double to long long (if we have it) when printing hexadecimal.
Fix bug where undo was acting strangly in shell windows.
Fix crash when hitting ———–.. wordwrap bug.
Check for math functions
Use joerc if fancyjoerc not there.
fix segfault from -orphan
fix window size detection bug: can’t take out types.h
update status line immediately on resize.
don’t smartbackspace when smartbacks is off.
backspace/DEL means ‘n’ in replace prompt for better emacs
Menus are now made up of macros instead of options.
* menu Prompt for a menu to display with tab completion. * mode Prompt for an option to change with tab completion.
Menus are defined in joerc with ‘:defmenu name’ followed
by a set of menu entries.
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.
Use this to add your own macros to ^T.
^T is now a user definable menu system
Treat as a quote character for file I/O. Now you can edit
files like !test with !test
Print NULs in default search string. Handle many s properly.
Allow backslashes in file names
Fix %A to print unicode
Charles Tabony’s (vectorshifts’s) highlighter stack patch
! is relace all in replace prompt
Turn off UTF-8 when we enter hex mode
Call ttsig on vfile I/O errors.
Abort cleanly when malloc returns NULL
Add reload command to reload file from disk
Modify configure scrips to use docdir for extra documents and
datadir/joe for syntax and i18n files.
Don’t use bold yellow, it’s bad for white screens
Fix TeX highlighter: don’t highlight “
Make mail.jsf more forgiving for those of us who still use old UNIX mail
Fix file rename bugs
Improve ubop: can reformat a block of paragraphs again. Reformat
of adjacent indented paragraphs working again.
Improve XML highlighter: allow r in whitespace
Preserve setuid bit
Fix bug where backup file did not get modtime of original
New diff highlighter
Fix paragraph format when overtype is on
Fix non-french spacing
Fix bug with joe +2 on single line files
Add syntax file for .jsf files
Add ASCII table to joerc help
^KD renames file
Improve HTML highlighter… if you see <? it's probably a script…
Check for EINTR from ioctl
allowed in xml content
Add -flowed option: adds a space after paragraph lines.
Fix German and French .po files: they were cause search&replace to break.
Look at LC_MESSAGES to get the language to use for editor messages.
Added -no_double_quoted and -tex_comment for TeX
Added -break_symlinks option and changed -break_links option to not
break symbolic links.
Paragraph format of single line paragraph is indented only if autoindent
is enabled. (jqh)
Guessindent no longer overrides istep if indendation is space.
Fix low limit of lmargin
Allow inserting file in rectangle mode even if selected rectangle is
Fix ^G in perl mode when you hit it on second brace in:
Fix LUA highlighter (dirk_s)
Improved conf.jsf (dirk_s)
Added local option (-nobackup) to suppress backup files (peje)
Add Matlab syntax file (neer)
Improve mail syntax highlighter (jqh)
Fix crash when calling syntax file as subroutine (hal9042)
Get “ctags” tag search to work again
Fix crash when JOE tries to write to unwritable file
Fix crash when entering blank macro ESC x
Improve Verilog highlighter
Fix crash when typing ESC x !ls
Add C++ keywords to highlighter (otterpop81)
Added RPM spec file syntax spec.jsf
Improve ‘istring’ (.jsf command) (hal9042)
Update French .po file (jengelh)
Fix infinite search/replace loop bug (yugk)
New feature: insert status line format string using ‘txt’ (tykef)
Update Russion .po file (yugk)
Update Russian manpage (yugk)
Update jicerc Russian rc file (yugk)
Fix lock prompt message (yugk)
Add Ukrainian .po file (yugk)
Paragraph reformatter and word wrap now handle ‘*’ and ‘-‘ bullet lists.
Better internationalization (i18n):
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.
Internationalized joerc files are now possible. If LANG is en_GB, JOE
tries successively to load joerc.en_GB, joerc.en and joerc.
Multi-file search and replace:
There are two new search and replace options:
‘a’: the search covers all loaded buffers. So you can say:
joe *.c and then ^KF foo <return> ra <return> bar <return> to replace all instances of foo in all .c files.
‘e’: the search covers all files in the error list.
You can use grep-find to create a list of files: ESC g grep -n foo f*.c ^KF foo <return> re bar <return> You can also use 'ls' and 'find' instead of grep to create the file list.
JOE now restores cursor position in previously visited files.
Build and grep window work more like Turbo-C: the messages window is
forced onto the screen when you hit ^[ = and ^[ -.
Syntax highlighter definition files (.jsf files) can now have subroutines.
This eases highlighter reuse: for example, Mason and PHP can share the HTML
I’ve changed the way JOE handles ‘-‘ and redirected input:
joe < file A shell process is started which 'cat's the
file into the first buffer.
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 – JOE does not try to read from stdin, but
when the file is saved, it writes to stdout.
echo “hi” | joe – | mail fred
“hi” ends up in first buffer. When you
save, mail is sent.
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 🙂
You can now define which characters can indent paragraphs. Also the
default list has been reduced so that formatting of TeX/LaTeX files works
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:
JOE now matches Thomas Dickey’s implementation of my xterm patch (but
configure xterm with –paste64).
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.
“Bufed” (prompt for a buffer to edit), works like other file prompt
commands: it’s a real prompt with history and completion.
Automatic horizontal left scroll jumps by 5-10 columns.
New syntax files: troff, Haskell, Cadance SKILL, REXX, LUA, RUBY. Many of
the existing syntax files have been improved.
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
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 “firstname.lastname@example.org” 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
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
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
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.
Many bugs have been fixed (every bug which has been entered into the
sourceforge project page has been addressed). Hopefully I didn’t add
too many new ones 🙂
Regex and incremental search (jmacs ^S) now work for UTF-8
More and improved syntax highlighting files, including Mason
Use ^T E to set character set of file (hit at the
prompt for a list of available character sets).
Can install custom “i18n” style byte oriented character set
No longer depends on iconv() (easier to compile)
Fix bug where right arrow was not doing right thing on last line
Fix UTF-8 codes between 0x10000 – 0x1FFFF
Now prints for unicode control characters
Improved smart home, indent, etc.
TAB completion is now more “bash”-like
When multiple files are given on command line, they end up in
same order on the screen in JOE (before they were shuffled).
Menu size is now variable (40% of window size or smaller if
it’s not filled).
Added -icase option for case insensitive search by default.
Added -wrap option, which makes searches wrap
Added status line sequence %x: shows current context (function
name if you’re editing C).
Added tab completion at search prompts and ESC-Enter for tab
completion within text windows.
Warn if file changed on save.
Added Ctrl-space block selection method
Added Ctrl-arrow key block selection method
^K E asks if you want to load original version of the file
jmacs bugs fixes: upperase word, transpose words, ^X ^C is
more emacs-like., ^X k and ^X ^V more like emacs.
Much improved compile system ^[ c
Much improved jpico