debdiff attached. It was generated this way: $ wget http://archive.ubuntu.com/ubuntu/pool/universe/j/joe/joe_3.1-0.2_i386.deb $ wget http://www.szszi.hu/~pts/joe/joe_3.5-3_i386.deb $ debdiff joe_3.1-0.2_i386.deb joe_3.5-3_i386.deb >joe-3.1-3.5-ubuntu-dapper.debdiff Download our patches from http://www.szszi.hu/wiki/JoePatches List of our modification follows. The 1st patch fixes a few bugs and quirks, and also adds a few small features. If necessary, we can split this patch to several smaller patches. Bugfixes: * pfcol() is updated so it now doesn't move the cursor to the nearest character boundary while computing p->col. o The fix fixes the issue when the column field (%c) in status line gets updated (pfcol() called from stagen() called from disptw() called from edupd() called from ttgetc() called from edloop() called from main()), and the cursor is not standing on a proper UTF-8 charcacter boundary (possibly in hex mode). o The original implementation had a side effect: it changed b->byte etc., moving the cursor forward to the next boundary (which was a side effect of `while (p->byte < pos) pgetc(p);'). This was certainly incorrect, because it caused the cursor to move actually rightwards with `ltarw' command (which is supposed to move it leftwards), when that command was executed along with a status line refresh. o The fix here changes only p->col and p->valcol, other attributes (especially p->byte) are left unaffected. The behaviour of the fix is identical to the original when p is standing on UTF-8 character boundary. On the other hand, if p is in the middle of an UTF-8 character, p->col is set to the column at the beginning of that character. * Fixed a segfault in docmd() and exmacro() when an empty (whitespace) macro is specified. * Fixed a typo (> 255) in macro.c. * Fixes in utypeb_raw() for proper insertion of bytes in hex and nonhex mode. * time_rc was not initialized in main(). Bug found using valgrind(1). * Fixes in main() to support .joerc file and folder names containing spaces. * Small fixes to procrc() for handling long configuration lines. New or improved features: * ustat() (the stat command) now displays the number of bytes the current UTF-8 character occupies. * If the environment variable NO_JOERC is present, system configuration files (such es /etc/joe/joerc) are not parsed. (Many functions affected.) The reason for this improvement is that on some systems JOE configuration files are completely bogus, so the user should be able to tell JOE to ignore those files and read configuration from the user's home directory instead. * Ditto for the JOE syntax highlighting configuration files. * The configuration file line maximum line length is increased from 1024 to 4096 in procrc(). * If a configuration file line is too long, an error message is displayed, the line is processed truncated, and line numbering continues working. Modified procrc(). * New built-on commands fwrdhist (ufwrdhist()) and bkwdhist (ubkwdhist()) are provided. These commands are useful in history buffers. They jump to the next or previous line, respectively, which starts with the same string as the current line up to the cursor. This is equivalent to bash's history-search-backward and history-search-forward commands, which are bound to the PageUp and PageDown keys in /etc/inputrc on modern Linux distributions. Keyboard bindings added to builtins.c. * docmd() now reports more detailed errors if a command missing or not found. * Configuration lines are now also read from $HOME/.joe/rc (in main.c). This is so all relevant configuration files can be put by the user into $HOME/.joe and added to a personal CVS. * Added functionality to uquote() (the quote command) so that now it can insert bytes (not only characters). Byte insertion is activated by pressing y first. Byte insertion works in hex and non-hex mode, too. * Added support for the OVERRIDE_JOE_P35RC environment variable, which, when specified, sets the file name of the .joerc file to use. This is a convenience feature for experimenting with alternative .joerc files. Implementation improvements: * prgetc() is made faster for UTF-8 buffers. * p_goto_eol() is made faster with o.crlf and UTF-8 buffers. * head comments added to brzs(), pfwrd() and pbkwd() to b.h. * The .joe folder name is not hard-wired into the .c files anymore. Now it is specified in Makefile.in, and passed to the C code as #define DOTJOEDIR ".joe" . * Some math functions (in umath.c) such as m_cbrt() are skipped when compiling with uClibc, because these functions are not available. * my_getcap() now doesn't reopen the same termcap file multiple times (for tc=) * Added documentation fixes to utf8.c. * Added preprocessor support (preprocess_rc_line()) to procrc(). Currently preprocessing does nothing. The 2nd patch adds a preprocessor to the .joerc configuration files. Preprocessing is done separately on one each line read from configuration files. Only lines starting with $ are affected (others are left unchanged). The affected lines are replaced by the string returned by the preprocessor, and the replaced line is parsed by JOE as a regular configuration file line. The rationale for a preprocessor is to allow JOE's configuration depend on the environment variables.