diff --git a/joe/.env b/joe/.env new file mode 100755 index 0000000..d359e99 --- /dev/null +++ b/joe/.env @@ -0,0 +1,14 @@ +#!/bin/sh +dir=$(pwd) + +# overlay our directories +test -f /.overlayfs || { + find . -type d -mindepth 1 | while read dir; do + cp -d -r ./$dir/* /$dir/. + done + echo 1 > /.overlayfs + echo "[i] imported overlay fs" + echo "[i] editor 'joe' installed" | logger +} + + diff --git a/joe/build.sh b/joe/build.sh new file mode 100755 index 0000000..42a78d8 --- /dev/null +++ b/joe/build.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -e +name=joe +../build_nixpkg.sh $name +out=$(pwd) +set -x +rm -rf *.zip bin usr etc || true +cp -r result/{bin,etc} . +mkdir usr +cp -r result/share usr/. +zip -r package.$name.zip bin usr etc root .env diff --git a/joe/etc/joe/ftyperc b/joe/etc/joe/ftyperc new file mode 100644 index 0000000..300b3c3 --- /dev/null +++ b/joe/etc/joe/ftyperc @@ -0,0 +1,923 @@ + File Type table. This is :included by the joerc file. + Scripts can look like this '#!/usr/bin/python' or this '#! /usr/bin/env python3' + + A text file +[text] + No '.' in file name? Assume it's a text file and we want wordwrap on. +* + Text file. +*.txt + + Not a text file +[not_text] + File name with '.'? It's probably not a text file. +*.* +-wordwrap + + Diff +[diff] +* ++\? [A-Za-z] ++Index: [A-Za-z] ++Only in ++Nur in ++--- ++\*\*\* ++[1-9][0-9]*[cda] +*.diff +*.patch +-syntax diff + + Troff +[troff] +*.1 +*.1.in +-wordwrap +-syntax troff + + TeX +[tex] +*.tex +*.sty +-syntax tex +-tex_comment +-no_double_quoted +-wordwrap + + News/mail files. +[email] +*.article* +*.followup +*.letter + NN newsreader +*tmp/nn.* + mail +*tmp/Re* + elm +*tmp/snd.* + dmail +*tmp/dmt* + pine +*tmp/pico.* + Mutt +*tmp/mutt-* +-wordwrap +-syntax mail + + AVR assembly language +[avr] +*.avr +*.inc +-syntax avr +-autoindent +-wordwrap +-tab 8 + + Generic assembly language +[assembly] +*.asm +*.s +*.S +-highlighter_context +-wordwrap +-syntax asm + + Mason (Perl in HTML) +[mason] +*.mas +-autoindent +-title +-syntax mason +-smarthome +-smartbacks +-highlighter_context + + SML +[sml] +*.sml +-autoindent +-title +-syntax sml +-smarthome +-smartbacks +-istep 2 +-highlighter_context + + OCaml +[ocaml] +*.ml + OCaml language interface +*.mli +-autoindent +-title +-syntax ocaml +-smarthome +-smartbacks +-istep 2 +-highlighter_context + + Ruby +[ruby] +*.rb +* ++#![ ]*[^\n]*ruby[0-9.]*\> +*.gemspec +*Gemfile +*Rakefile +*Guardfile +*.rabl +-autoindent +-title +-pound_comment +-syntax ruby +-text_delimiters do=end +-highlighter_context + + Perl +[perl] +* ++#![ ]*[^\n]*perl[0-9.]*\> +*.pl +*.pm +*.t +-autoindent +-title +-syntax perl +-smarthome +-smartbacks +-pound_comment +-single_quoted +-highlighter_context + + SQL +[sql] +*.sql +-autoindent +-title +-syntax sql +-smarthome +-smartbacks +-purify +-single_quoted +-c_comment +-vhdl_comment +-cpp_comment +-text_delimiters BEGIN|Begin|begin=END|End|end +-cpara >#!;*/% +-highlighter_context + + AWK +[awk] +*.awk +-autoindent +-title +-syntax awk +-smarthome +-smartbacks +-purify +-pound_comment +-highlighter_context + + YACC +[yacc] +*.y +-autoindent +-title +-syntax c +-highlighter_context +-smarthome +-smartbacks +-purify +-single_quoted +-c_comment +-cpp_comment +-text_delimiters #if|#ifdef|#ifndef=#elif=#else=#endif +-cpara >#!;*/% + + Lex +[lex] +*.l +*.lex +-autoindent +-title +-syntax c +-highlighter_context +-smarthome +-smartbacks +-purify +-single_quoted +-c_comment +-cpp_comment +-text_delimiters #if|#ifdef|#ifndef=#elif=#else=#endif +-cpara >#!;*/% + + Ada +[ada] +*.adb +*.ads +-syntax ada +-autoindent +-title +-istep 2 +-smarthome +-smartbacks +-purify +-vhdl_comment +-text_delimiters declare|Declare|DECLARE|exception|Exception|EXCEPTION|if|If|IF|loop|Loop|LOOP|case|Case|CASE|package|Package|PACKAGE|procedure|Procedure|PROCEDURE|record|Record|RECORD|function|Function|FUNCTION=end|End|END +-highlighter_context + + COBOL +[cobol] +*.cbl +*.cob +-syntax cobol +-highlighter_context + + REXX +[rexx] +*.rex +*.REX +* ++#![ ]*[^\n]*rexx[0-9.]*\> +-syntax rexx +-autoindent +-title +-highlighter_context + + SED script +[sed] +*.sed +-syntax sed +-highlighter_context + + Postscript +[postscript] +*.ps +*.eps +-syntax ps +-highlighter_context + + C language +[c] +*.c +*.cpp +*.cc +*.c++ + C language header file +*.h +*.h.in +*.hpp +*.h++ +*.hh +*.mm +-autoindent +-title +-syntax c +-highlighter_context +-smarthome +-smartbacks +-purify +-single_quoted +-c_comment +-cpp_comment +-text_delimiters #if|#ifdef|#ifndef=#elif=#else=#endif +-cpara >#!;*/% + + Verilog +[verilog] +*.v + Verilog header file +*.vh +-autoindent +-syntax verilog +-istep 2 +-smarthome +-smartbacks +-purify +-c_comment +-cpp_comment +-text_delimiters `ifdef|`ifndef=`else=`endif:begin=end:case|casex|casez=endcase:function=endfunction:module=endmodule:task=endtask:attribute=endattribute:primitive=endprimitive:table=endtable +-cpara >#!;*/% +-highlighter_context + + VHDL +[vhdl] +*.vhd +-autoindent +-syntax vhdl +-istep 2 +-smarthome +-smartbacks +-purify +-vhdl_comment +-text_delimiters entity|ENTITY|if|IF|component|COMPONENT|loop|LOOP|configuration|CONFIGURATION|units|UNITS|record|RECORD|case|CASE|function|FUNCTION|package|PACKAGE|architecture|ARCHITECTURE|block|BLOCK|process|PROCESS|generate|GENERATE=end|END +-cpara >#!;*-/% +-highlighter_context + + XML +[xml] +*.xml +*.xsd +* ++<.xml +*.jnlp + RESX/.NET resource files +*.resx + Ant's build.xml +*build.xml +-autoindent +-syntax xml +-highlighter_context + + Apple plists +[plist] +*.plist +-autoindent +-syntax xml + + HTML +[html] +*.htm +*.html +-wordwrap +-autoindent +-smarthome +-smartbacks +-syntax html + + CSS +[css] +*.css +-wordwrap +-autoindent +-smarthome +-smartbacks +-syntax css + + JAVA +[java] +*.java +-autoindent +-title +-syntax java +-smarthome +-smartbacks +-c_comment +-cpp_comment +-purify +-cpara >#!;*/% +-highlighter_context + + Javascript +[javascript] +*.js +* ++#![ ]*[^\n]*nodejs[0-9.]*\> +-autoindent +-title +-syntax js +-smarthome +-smartbacks +-purify +-c_comment +-cpp_comment +-cpara >#!;*/% +-highlighter_context + + JSON +[json] +*.json +-autoindent +-syntax json +-smarthome +-smartbacks +-highlighter_context + + Typescript +[typescript] +*.ts +-autoindent +-title +-syntax typescript +-smarthome +-smartbacks +-purify +-c_comment +-cpp_comment +-cpara >#!;*/% +-highlighter_context + + Hypertext preprocessor file +[php] +*.php +-autoindent +-title +-syntax php +-smarthome +-smartbacks +-purify +-highlighter_context + + Python +[python] +* ++#![ ]*[^\n]*python[0-9.]*\> +*.py +-autoindent +-title +-syntax python +-highlighter_context +-smarthome +-smartbacks +-purify +-single_quoted +-pound_comment + + C-shell +[csh] +* ++#![ ]*[^\n ]*/csh\> ++#![ ]*[^\n ]*/tcsh\> +*.csh +*.login +*.logout +*.tcsh +*.tcshrc +-autoindent +-title +-syntax csh +-pound_comment +-highlighter_context + + Shell +[sh] +* ++#![ ]*[^\n ]*/sh\> ++#![ ]*[^\n ]*/bash\> +*.sh +*profile +*.bash +*.bashrc +*.bash_login +*.bash_logout +-autoindent +-title +-syntax sh +-highlighter_context +-pound_comment +-text_delimiters do=done:if=elif=else=fi:case=esac + + Lisp +[lisp] +*.lisp +*.lsp +*.el +-autoindent +-title +-syntax lisp +-semi_comment +-highlighter_context + + Korn shell +[ksh] +* ++#![ ]*[^\n ]*/ksh\> +*.ksh +-autoindent +-title +-syntax sh +-highlighter_context +-pound_comment +-text_delimiters do=done:if=elif=else=fi:case=esac +-highlighter_context + + PASCAL +[pascal] +*.p +*.pas +-autoindent +-title +-syntax pascal +-smarthome +-smartbacks +-purify +-text_delimiters begin|BEGIN|record|RECORD|case|CASE=end|END:repeat|REPEAT=until|UNTIL +-highlighter_context + + Fortran +[fortran] +*.f +*.f90 +*.for +*.FOR +-autoindent +-title +-syntax fortran +-highlighter_context + + Cadence SKILL +[skill] +*.il +-semi_comment +-syntax skill +-autoindent +-title +-istep 3 +-indentc 32 +-smartbacks +-smarthome +-indentfirst +-highlighter_context + + Lua +[lua] +*.lua +* ++#![ ]*[^\n]*lua[0-9.]*\> +-autoindent +-title +-syntax lua +-highlighter_context + + TCL +[tcl] +*.tcl +-autoindent +-title +-syntax tcl +-highlighter_context + + Go language +[go] +*.go +-autoindent +-title +-syntax go +-smarthome +-smartbacks +-purify +-single_quoted +-c_comment +-text_delimiters #if|#ifdef|#ifndef=#elif=#else=#endif +-cpara >#!;*/% +-highlighter_context + + CSharp +[c#] +*.cs +-autoindent +-title +-syntax csharp +-smarthome +-smartbacks +-purify +-cpara >#!;*/% +-text_delimiters #region=#endregion:#if=#elif=#else=#endif +-highlighter_context + + Joe Syntax File +[jsf] +*.jsf +*.jsf.in +-autoindent +-title +-syntax jsf +-smarthome +-highlighter_context + + Joe Colorscheme file +[jcf] +*.jcf +-syntax jcf + + M4 / Autoconfig file +[m4] +*.ac +*.m4 +-autoindent +-title +-syntax m4 +-highlighter_context + + Matlab file (clashes with objective-C) +[matlab] +*.m +-wordwrap +-syntax matlab +-highlighter_context + + UNIX configuration file +[conf] + Automake file +*.am + System RC file +*rc + Makefile +*Makefile +*makefile.in +*Makefile.in +*makefile +*AKEFILE +-autoindent +-syntax conf +-pound_comment +-highlighter_context + + Windows batch files +[bat] +*.bat +*.cmd +-autoindent +-syntax batch +-highlighter_context + + JOERC file +[joerc] +*ftyperc +*joerc +*jmacsrc +*jstarrc +*rjoerc +*jpicorc +*joerc.in +*jmacsrc.in +*jstarrc.in +*rjoerc.in +*jpicorc.in +-syntax joerc +-highlighter_context + + Markdown +[markdown] +*.md +-syntax md +-wordwrap + + YAML +[yaml] +*.yml +*.yaml +-autoindent +-smarthome +-smartbacks +-pound_comment +-syntax yaml +-highlighter_context + + Debian apt +[debian] +*apt/sources.list +*sources.list.* +-pound_comment +-syntax debian + + Java's .properties +[java_properties] +*.properties + this is part of the specification: +-encoding iso-8859-1 +-pound_comment +-syntax properties +-highlighter_context + + INI Files +[ini] +*.ini +*.inf +*hgrc +*.gitconfig +*.git/config +-syntax ini +-pound_comment +-semi_comment +-highlighter_context + + plain ERB +[erb] +*.erb +-syntax erb +-highlighter_context + + ERB within HTML +[erb_html] +*.html.erb +-syntax htmlerb +-highlighter_context + + Haml +[haml] +*.haml +-syntax haml +-istep 2 +-indentc 32 +-autoindent +-smarthome +-smartbacks +-highlighter_context + + Erlang +[erlang] +*.erl +*.eterm +*.app.src +*rebar.config +*.hrl +*.erlang +-syntax erlang +-autoindent +-title +-highlighter_context + + Sieve (ManageSieve) +[sieve] +*.sieve +-syntax sieve +-autoindent +-title +-highlighter_context + + Puppet +[puppet] +*.pp +-syntax puppet +-pound_comment +-autoindent +-title +-highlighter_context + + ip(6)tables +[iptables] +* ++# Generated by iptables-save ++# Generated by ip6tables-save +-syntax iptables +-pound_comment + + PowerShell +[powershell] +*.ps1 +*.psm1 +-syntax powershell +-autoindent +-smarthome +-smartbacks +-highlighter_context + + Git COMMIT_EDITMSG +[git-commit] +*COMMIT_EDITMSG +-syntax git-commit + + Elixir +[elixir] +*.ex +*.exs +-autoindent +-smarthome +-smartbacks +-title +-syntax elixir +-pound_comment +-text_delimiters do=else=end +-indentc 32 +-istep 2 +-highlighter_context + + R +[r] +*.r +-autoindent +-title +-syntax r +-pound_comment +-smarthome +-smartbacks +-purify +-single_quoted +-highlighter_context + + Groovy +[groovy] +*.gvy +*.groovy +*.gy +*.gsh +-autoindent +-title +-syntax groovy +-c_comment +-cpp_comment +-smarthome +-smartbacks +-purify +-single_quoted +-highlighter_context + + Clojure +[clojure] +*.clj +*.cljs +*.cljc +*.edn +-autoindent +-title +-syntax clojure +-semi_comment +-smarthome +-smartbacks +-purify +-highlighter_context + + Rust +[rust] +*.rs +-autoindent +-title +-syntax rust +-c_comment +-cpp_comment +-smarthome +-smartbacks +-purify +-single_quoted +-highlighter_context + + Coffeescript +[coffee] +*.coffee +-autoindent +-title +-syntax coffee +-pound_comment +-smarthome +-smartbacks +-purify +-single_quoted +-highlighter_context + + Scala +[scala] +*.scala +-autoindent +-title +-syntax scala +-c_comment +-cpp_comment +-smarthome +-smartbacks +-purify +-single_quoted +-highlighter_context + + Swift +[swift] +*.swift +-autoindent +-title +-syntax swift +-c_comment +-cpp_comment +-smarthome +-smartbacks +-purify +-single_quoted +-highlighter_context + + D +[d] +*.d +-autoindent +-title +-syntax d +-c_comment +-cpp_comment +-smarthome +-smartbacks +-purify +-single_quoted +-highlighter_context + + Docker +[dockerfile] +*Dockerfile +-autoindent +-title +-syntax dockerfile +-pound_comment +-highlighter_context + + RPM Spec +[spec] +*.spec +-autoindent +-syntax spec + + Haskell +[haskell] +*.hs +-autoindent +-smarthome +-smartbacks +-syntax haskell +-vhdl_comment +-highlighter_context diff --git a/joe/etc/joe/jicerc.ru b/joe/etc/joe/jicerc.ru new file mode 100644 index 0000000..646a2f3 --- /dev/null +++ b/joe/etc/joe/jicerc.ru @@ -0,0 +1,1265 @@ + + Инициализационный файл JOE + Joe для iceB + + JOE ищет этот файл в: + 1 - $HOME/.jicerc + 2 - /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc + + Этот файл может включать другие файлы путем размещения с первой колонки + команды вида: + + :include filename + + ПЕРВАЯ СЕКЦИЯ: Умолчания глобальных опций (эти опции также могут быть указаны + в командной строке. Кроме того, опции NOXON, LINES, COLUMNS, DOPADDING и BAUD + могут задаваться с помощью переменных среды): + + Перекрытие цветов лексических классов, определенных в синтаксических файлах: + Поместите желаемый перекрывающий цвет в первую колонку. + + Допустимые цвета + bold (яркость) inverse (инверсия) blink (мерцание) + dim (полуяркость) underline (подчеркивание) italic (?????) + white (белый) cyan (бирюзовый) magenta (фиолетовый) blue (синий) + yellow (желтый) green (зеленый) red (красный) black (черный) + для фона + bg_white bg_cyan bg_magenta bg_blue bg_yellow bg_green bg_red bg_black + + Другие возможные цвета: см. syntax/c.jsf + + Установить цвет для всех случаев класса Idle: + =Idle red + + Установить цвет Idle только для синтаксического файла языка С: + =c.Idle red + + Следующий пример взят из c.jsf. Примеры других классов - см. в остальных синтаксических файлах. + + =Idle + =Bad bold red + =Preproc blue + =Define bold blue + =IncLocal cyan + =IncSystem bold cyan + =Constant cyan + =Escape bold cyan + =Type bold + =Keyword bold + =CppKeyword bold + =Brace magenta + =Control + + Разместите опцию, которую хотите установить, начиная с первой колонки: + + -option Установка опции + --option Сброс опции + + -help_is_utf8 Установить, если текст подсказки - в кодировке UTF-8. Иначе будет считаться, что она - + в обычной 8-битной кодировке. + + -mid При скроллинге выполнять центрирование курсора + -left nn Amount to jump left when scrolling is necessary (-1 for 1/4 width) + -right nn Amount to jump right when scrolling is necessary (-1 for 1/4 width) + + -marking Подсвечивать текст между началом блока и курсором + (используйте вместе с -lightoff) + +-asis Символы с кодами 128 - 255 показывать без преобразований + + -force Принудительно устанавливать перевод строки в конце файла + + -nolocks Если не желаете использовать блокировку файлов + + -nomodcheck Запретить периодическую проверку - не стал ли файл на диске новее, чем в буфере. + (при сохранении этот контроль все равно производится - даже несмотря на наличие + данной опции). + + -nocurdir Не вставлять текущую директорию в запрос файла + + -nobackups Если не желаете, чтобы создавались резервные файлы + + -nodeadjoe If you don't want DEADJOE files to be created + + -break_hardlinks + Удалять файл перед записью, для разрыва жестких ссылок + (but don't break symbolic links). + + -break_links + Delete file before writing, to break hard links + and symbolic links. + + -lightoff Выключать подсветку после копирования или перемещения блока + + -exask Запрашивать подтвеждение имени файла при выходе + +-beep Звякать в случае ошибки и при выходе курсора за границы + + -nosta Запретить строку состояния + + -keepup Часто изменять значение esc-последовательностей %k и %c + в строке состояния + + -pg nnn Количество строк, оставляемых при PgUp/PgDn + + -undo_keep nnn Количество последних изменений, запоминаемых для возможного "отката". + 0 - если запоминать без ограничений. + + -csmode ^KF после предыдущего поиска действует как ^L + + -backpath path + Директория для сохранения резервных файлов (один пробел между 'backpath' и + 'path', без завергающих пробелов или комментариев после path). + + -floatmouse Клик за концом строки переносит курсор за конец строки + + -rtbutton Для выполнения действия использовать правую кнопку мыши вместо левой + +-nonotice Не выводить copyright + + -noexmsg Disable exiting message ("File not changed so no updated needed") + + -noxon Выключить обработку ^S/^Q + + -orphan Положить дополнительные файлы, указанные в ком.строке, + в скрытые буфера, а не в окна + + -dopadding Использовать символы заполнения при выводе + (если не применяется никакой протокол управления потоком) + + -lines nnn Установить кол-во строк на экране + +-baud 19200 Установить скоросто обмена для оптимизации терминального вывода + + -columns nnn Установить кол-во колонок на экране + + -helpon Включать экран подсказки при запуске + + -skiptop nnn Не использовать верхние nnn строк экрана + +-notite Не посылать строки инициализации и терминации терминала: + предотвращает восстановление экрана при выходе. + + -nolinefeeds Prevent sending linefeeds to preserve screen history in terminal + emulator's scroll-back buffer. + + -usetabs Использовать табуляторы для оптимизации экранного вывода + +-assume_color Предполагать, что терминал поддерживает цвет в стандарте ANSI, + даже если это не указано в описании termcap/terminfo. + +-assume_256color + Предполагать, что терминал поддерживает 256 цветов в стиле xterm + (ESC [ 38 ; 5 ; NNN m и ESC [ 48 ; 5 ; NNN m). + +-guess_non_utf8 Allow guess of non-UTF-8 file encoding in a UTF-8 locale. + + -guess_utf8 Allow guess of UTF-8 file encoding in non-UTF-8 locale. + +-guess_utf16 Allow guess of UTF-16 encoding + +-guess_crlf Автоопределять файлы MS-DOS и соотв. устанавливать -crlf + +-guess_indent Угадывать символы для отступа (табулятор или пробел). + +-menu_explorer Оставаться в меню при выборе директории (в противном случае + директория дописывается к пути и меню закрывается). + +-menu_above Если разрешено - меню/списки будут располагаться над строкой запроса. + Иначе - под ней. + +-transpose Перемещать строки с колонками во всех меню. + + -menu_jump Перемещаться по меню выбора файла по нажатию клавиши Tab (иначе + меню появляется, но курсор остается на запросе имени файла). + + -icase Поиск регистронезависим по умолчанию. + + -wrap Циклический поиск. + + -autoswap При необходимости менять местами метки начала и конца блока + +-joe_state Использовать файл сохранения состояния ~/.joe_state + +-mouse Включить поддержку мыши в xterm. При этом нажатие левой кнопки мыши + будет перемещать курсор, ее нажатие-оттягивание - отмечать блок. + Для выполнения стандартного в xterm запоминания в буфер и + извлечения из него - прижмите клавишу Shift. + + -joexterm Если вы используете Xterm, модифицированный для Joe - это + делает режим -mouse более удобным (запоминание/извлечение + будет выполняться прозрачно). + +-brpaste When JOE starts, send command to the terminal emulator that + enables "bracketed paste mode" (but only if the terminal + seems to have the ANSI command set). In this mode, text + pasted into the window is bracketed with ESC [ 2 0 0 ~ and + ESC [ 2 0 1 ~. + +-pastehack If keyboard input comes in as one block assume it's a mouse + paste and disable autoindent and wordwrap. + + -square Режим прямоугольных блоков + + -text_color color + Установить цвет для текста. + -status_color color + Установить цвет для строки состояния. + -help_color color + Установить цвет для подсказки. + -menu_color color + Установить цвет для меню. + -prompt_color color + Установить цвет для запросов. + -msg_color color + Установить цвет для сообщений. + + Например: -text_color bg_blue+white + Устанавливает голубой фон и белый цвет переднего плана. + +-restore Восстанавливать предыдущую позицию курсора при открытии файлов. + +-search_prompting + Запрашивать образец для последующих поисков. + + -regex Search uses standard regular expression format (otherwise it uses + JOE format where all special characters have to be escaped). + + Строка определения строки состояния. -lmsg определяет часть, выровненную + влево, а -rmsg - вправо. Первый символ строки -rmsg - символ для заполнения + фона. В строках могут использоваться следующие управляющие последовательности: + + %t время в 12-часовом формате + %u время в 24-часовом формате + %T O при режиме замещения, I при режиме вставки + %W W если разрешен перенос слов + %I A если разрешен автоотступ + %X Индикатор режима прямоугольных блоков + %n Имя файла + %m '(Изменено)' если файл был изменен + %* '*' если файл был изменен + %R Индикатор режима "только чтение" + %r Номер строки + %c Номер колонки + %o Байтовое смещение в файле + %O Байтовое смещение в файле в шестнадцатиричном виде + %a Код символа над курсором + %A Код символа над курсором в шестнадцатиричном виде + %p Процент файла в позиции курсора + %l Кол-во строк в файле + %k Введенный символ-префикс + %S '*SHELL*' если в окне выполняется шелл + %M Сообщение о записи макро + %y Синтаксис + %x Context (first non-indented line going backwards) + + Также можно использовать следующие коды: + + \i Инверсия + \u Подчеркивание + \b Повышенная яркость + \d Пониженная яркость + \f Мерцание + \l ????? + +-lmsg \i%k%T%W%I%X %n %m%y%R %M %x +-rmsg %S Стр %4r Поз %3c %t Подсказка - по F1 +-smsg ** Line %r Col %c Offset %o(0x%O) %e %a(0x%A) Width %w ** +-zmsg ** Line %r Col %c Offset %o(0x%O) ** +-xmsg \i Joe's Own Editor %v (%b) ** Type \bCtrl-K Q\b to exit or \bCtrl-K H\b for help **\i + + Key sequence hints which are displayed in various prompts. +-aborthint ^C +-helphint ^K H + + + ВТОРАЯ СЕКЦИЯ: Установка локальных опций в зависимости от имени файла: + + Каждая строка с символом '*' в первой колонке предваряет список режимов, + которые должны устанавливаться для файлов, имена которых соответствуют + данному регулярному выражению. Если имя файла соответствует более чем одному + регулярному выражению - выбирается последнее из подходящих. + + Регулярное выражение содержимого файла также может указываться в отдельной + строке, начинающейся с '+regex'. Если используется такое регулярное + выражение, то для того, чтобы указанные опции применялись к файлу - + он должен соответствовать обоим регулярным выражениям: и имени файла, + и содержимого. + + Вы можете установить следующие опции: + + -cpara >#!;*/% + Characters which can indent paragraphs. + + -cnotpara . + Characters which begin non-paragraph lines. + + -encoding name + Установить кодировку файла (например: utf-8, iso-8859-15) + + -syntax name + Определить синтаксис (будет загружен файл + синтаксиса 'name.jsf') + + -hex Режим 16ричного редактирования + + -highlight Разрешить подсветку + + -smarthome Клавиша Home сначала перемещает курсор в + начало строки, а при повторном нажатии - + на первый непробельный символ + + -indentfirst При включенном режиме smarthome клавиша Home + сначала перемещает курсор на первый + непробельный символ строки, а не в ее начало + + -smartbacks Клавиша Backspace удаляет 'istep' символов + заполнения отступа 'indentc', если курсор + находится на первом непробельном символе. + + -tab nnn Ширина табуляции + + -indentc nnn Символ заполнения отступа (32 - пробел, + 9 - tab) + + -istep nnn Количество колонок отступа + + -spaces TAB вставляет пробелы, а не табуляторы. + + -purify Исправлять отступы если необходимо + (например, если в отступе имеются и пробелы, + и табуляторы, а indentc - пробел, то отступ + будет преобразован в пробелы). + + -crlf В качестве конца строки используется CR-LF + + -wordwrap Перенос слов + + -autoindent Автоотступ + + -overwrite Режим замещения + + -picture Режим картины (стрелка вправо может уходить + за конец строки) + + -lmargin nnn Левая граница + + -rmargin nnn Правая граница + + -flowed Put one space after intermediate paragraph lines + for support of flowed text. + + + -french Один пробел после '.', '?' and '!' при + переносе слов и форматировании абзацев вместо + двух. Joe не изменяет вашего стиля расстановки + пробелов, но иногда должен вставлять пробелы + сам. Этим ключом выбирается - сколько пробелов + ему следует вставлять. + + -linums Включить нумерацию строк + + -rdonly Файл можно только читать + + -keymap name + Раскладка клавиатуры, если не 'main' + + -lmsg Определение строки состояния - более подробно + -rmsg см. предыдущую секцию. + + -mfirst macro + Макро, выполняемое при первой модификации файла + -mnew macro + Макро, выполняемое при загрузке нового файла + -mold macro + Макро, выполняемое при загрузке существующего файла + -msnew macro + Макро, выполняемое при сохранении нового файла + -msold macro + Макро, выполняемое при сохранении существующего файла + + Макросы, используемые в приведенных выше опциях, описываются + так же, как и раскладки клавиатуры в последующем разделе, + но без строк имен клавиш. + + These define the language syntax for ^G (goto matching delimiter): + + -highlighter_context Use the highlighter context for ^G + + -single_quoted Текст внутри ' ' следует игнорировать (это не + очень хорошо для обычного текста, т.к. ' в нем + может использоваться в качестве апострофа) + + -c_comment Текст внутри /* */ следует игнороировать + + -cpp_comment Текст после // следует игнорировать + + -pound_comment Текст после # следует игнорировать + + -vhdl_comment Текст после -- следует игнорировать + + -semi_comment Текст после ; следует игнорировать + + -text_delimiters begin=end:if=elif=else=endif + + Определяет слова-ограничители + + Локальные опции по умолчанию +-highlight +-istep 4 + + + Используйте это макро (поместите в первую колонку) чтобы заставить joe вызывать + команду "p4 edit" для измененного файла. + + -mfirst if,"rdonly && joe(sys,\"p4 edit \",name,rtn)",then,mode,"o",msg,"executed \"p4 edit ",name,"\"",rtn,endif + + Таблица типов файлов теперь находится в отдельном файле. Вы можете скопировать его в ~/.joe и настроить. + +:include ftyperc + + SECOND and 1/2 SECTION: Option menu layout + + :defmenu name [macro] + Defines a menu. + The macro here is executed when the user hits backspace. + + macro string comment + A menu entry. Macro is any JOE macro- see "Macros:" + below. String is the label to be used for the macro + in the menu. It is in the same format as the -lmsg + and -rmsg options above. + + Two whitespace characters in a row begins a comment. + Use '% ' for a leading space in the string. + +:defmenu root +mode,"overwrite",rtn T Overtype %Zoverwrite% +mode,"hex",rtn ' Hex edit mode +mode,"autoindent",rtn I Autoindent %Zautoindent% +mode,"wordwrap",rtn W Word wrap %Zwordwrap% +mode,"tab",rtn D Tab width %Ztab% +mode,"lmargin",rtn L Left margin %Zlmargin% +mode,"rmargin",rtn R Right margin %Zrmargin% +mode,"square",rtn X Column mode %Zsquare% +mode,"indentc",rtn % % Indent char %Zindentc% +mode,"istep",rtn % % Indent step %Zistep% +menu,"indent",rtn = Indent select +mode,"highlight",rtn H Highlighting %Zhighlight% +mode,"crlf",rtn Z CR-LF/MS-DOS %Zcrlf% +mode,"linums",rtn N Line numbers %Zlinums% +mode,"hiline",rtn U Highlight line %Zhiline% +mode,"beep",rtn B Beep %Zbeep% +mode,"rdonly",rtn O Read only %Zrdonly% +mode,"syntax",rtn Y Syntax +mode,"colors",rtn S Color scheme +mode,"encoding",rtn E Encoding +mode,"asis",rtn % % Meta chars as-is +mode,"language",rtn V Language +mode,"picture",rtn P picture %Zpicture% +mode,"type",rtn F File type [%Ztype%] +mode,"title",rtn C Context %Ztitle% +menu,"more-options",rtn % % More options... + +:defmenu more-options menu,"root",rtn +menu,"^G",rtn % % ^G options +menu,"search",rtn % % search options +menu,"paragraph",rtn % % paragraph options +menu,"file",rtn % % file options +menu,"menu",rtn % % menu options +menu,"global",rtn % % global options +menu,"cursor",rtn % % cursor options +menu,"marking",rtn % % marking options +menu,"tab",rtn % % tab/indent options + +:defmenu indent menu,"root",rtn +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 1, Indent character = 32",rtn 1 Space +mode,"istep",rtn,"2",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 2, Indent character = 32",rtn 2 Spaces +mode,"istep",rtn,"3",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 3, Indent character = 32",rtn 3 Spaces +mode,"istep",rtn,"4",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 4, Indent character = 32",rtn 4 Spaces +mode,"istep",rtn,"5",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 5, Indent character = 32",rtn 5 Spaces +mode,"istep",rtn,"8",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 8, Indent character = 32",rtn 8 Spaces +mode,"istep",rtn,"10",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 10, Indent character = 32",rtn 0 Ten +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"9",rtn,msg,"Indent step = 1, Indent character = 9",rtn T Tab + +:defmenu menu menu,"more-options",rtn +mode,"menu_explorer",rtn % % Menu explorer %Zmenu_explorer% +mode,"menu_above",rtn % % Menu position %Zmenu_above% +mode,"menu_jump",rtn % % Jump into menu %Zmenu_jump% +mode,"transpose",rtn % % Transpose menus %Ztranspose% + +:defmenu ^G menu,"more-options",rtn +mode,"highlighter_context",rtn % % ^G uses highlighter context %Zhighlighter_context% +mode,"single_quoted",rtn % % ^G ignores '...' %Zsingle_quoted% +mode,"no_double_quoted",rtn % % ^G no ignore "..." %Zno_double_quoted% +mode,"c_comment",rtn % % ^G ignores /*...*/ %Zc_comment% +mode,"cpp_comment",rtn % % ^G ignores //... %Zcpp_comment% +mode,"pound_comment",rtn % % ^G ignores #... %Zpound_comment% +mode,"vhdl_comment",rtn % % ^G ignores --... %Zvhdl_comment% +mode,"semi_comment",rtn % % ^G ignores ;... %Zsemi_comment% +mode,"tex_comment",rtn % % ^G ignores %%... %Ztex_comment% +mode,"text_delimiters",rtn % % Text delimiters %Ztext_delimiters% + +:defmenu search menu,"more-options",rtn +mode,"icase",rtn % % Case insensitivity %Zicase% +mode,"wrap",rtn % % Search wraps %Zwrap% +mode,"search_prompting",rtn % % Search prompting %Zsearch_prompting% +mode,"csmode",rtn % % Continued search %Zcsmode% + +:defmenu paragraph menu,"more-options",rtn +mode,"french",rtn % % French spacing %Zfrench% +mode,"flowed",rtn % % Flowed text %Zflowed% +mode,"cpara",rtn % % Paragraph indent chars %Zcpara% +mode,"cnotpara",rtn % % Not-paragraph chars %Zcnotpara% + +:defmenu file menu,"more-options",rtn +mode,"restore",rtn % % Restore cursor %Zrestore% +mode,"guess_crlf",rtn % % Auto detect CR-LF %Zguess_crlf% +mode,"guess_indent",rtn % % Guess indent %Zguess_indent% +mode,"guess_non_utf8",rtn % % Guess non-UTF-8 %Zguess_non_utf8% +mode,"guess_utf8",rtn % % Guess UTF-8 %Zguess_utf8% +mode,"guess_utf16",rtn % % Guess UTF-16 %Zguess_utf16% +mode,"force",rtn % % Force last NL %Zforce% +mode,"nobackup",rtn % % No backup %Znobackup% + +:defmenu global menu,"more-options",rtn +mode,"nolocks",rtn % % Disable locks %Znolocks% +mode,"nobackups",rtn % % Disable backups %Znobackups% +mode,"nodeadjoe",rtn % % Disable DEADJOE %Znodeadjoe% +mode,"nomodcheck",rtn % % Disable mtime check %Znomodcheck% +mode,"nocurdir",rtn % % Disable current dir %Znocurdir% +mode,"exask",rtn % % Exit ask %Zexask% +mode,"nosta",rtn % % Disable status line %Znosta% +mode,"keepup",rtn % % Fast status line %Zkeepup% +mode,"break_hardlinks",rtn % % Break hard links %Zbreak_hardlinks% +mode,"break_links",rtn % % Break links %Zbreak_links% +mode,"joe_state",rtn % % Joe_state file %Zjoe_state% +mode,"undo_keep",rtn % % No. undo records %Zundo_keep% +mode,"backpath",rtn % % Path to backup files %Zbackpath% + +:defmenu cursor menu,"more-options",rtn +mode,"pg",rtn % % No. PgUp/PgDn lines %Zpg% +mode,"mid",rtn C Center on scroll %Zmid% +mode,"left",rtn L Columns to scroll left %Zleft% +mode,"right",rtn R Columns to scroll right %Zright% +mode,"floatmouse",rtn % % Click past end %Zfloatmouse% +mode,"rtbutton",rtn % % Right button %Zrtbutton% + +:defmenu marking menu,"more-options",rtn +mode,"autoswap",rtn % % Autoswap mode %Zautoswap% +mode,"marking",rtn % % Marking %Zmarking% +mode,"lightoff",rtn % % Auto unmask %Zlightoff% + +:defmenu tab menu,"more-options",rtn +mode,"smarthome",rtn % % Smart home key %Zsmarthome% +mode,"smartbacks",rtn % % Smart backspace %Zsmartbacks% +mode,"indentfirst",rtn % % To indent first %Zindentfirst% +mode,"purify",rtn % % Clean up indents %Zpurify% +mode,"spaces",rtn % % No tabs %Zspaces% + + ТРЕТЬЯ СЕКЦИЯ: Экраны подсказки: + + Используйте \i для вкл/выкл инверсии + Используйте \u для вкл/выкл подчеркивания + Используйте \b для вкл/выкл повышенной яркости + Используйте \d для вкл/выкл пониженной яркости + Используйте \f для вкл/выкл мерцания + Используйте \l для вкл/выкл ????? + Используйте \| для вставки пружинки: все пружинки в строке устанавливаются + на одинаковую ширину, чтобы строка растягивалась на всю ширину экрана (если + кратность не получается и остается N пробелов, то каждая из N пружинок справа + дополняется еще одним пробелом). Совет: если требуется вертикальное + выравнивание - в каждой строке должно быть одинаковое количество пружинок. + + Используйте глобальную опцию '-help_is_utf8' чтобы разрешить UTF-8 в тексте + подсказки. Иначе предполагается локальная 8-битная кодировка. + +{Basic +\i Окно ПОДСКАЗКИ - \|выключить по F1 след.экран - ^N \i +\i \i\|\uПЕРЕХОДЫ\u \|\uПЕРЕХОДЫ\u \|\uБЛОКИ\u \|\uУДАЛЕНИЕ\u \|\uПРОЧЕЕ\u \|\uВЫХОД\u \|\i \i +\i \i\|^B left ^F right \|^U prev. screen \|^KB begin \|^D char. \|^KJ reformat \|^KX save \|\i \i +\i \i\|\b^Z\b пред. слово \|\bPgUp\b пред. экран \|\bF3\b начало \|\bDel\b симв.\|\b^KJ\b формат \|\bF10\b сохр. \|\i \i +\i \i\|\b^X\b след. слово \|\bPgDn\b след. экран \|\bS/F3\b конец \|\b^Y\b стр. \|\b^T\b режимы \|\b^C\b прерв.\|\i \i +\i \i\| \|\bHome\b нач. строки \|\bF6\b перенос \|\b^W\b >слово \|\b^R\b перерис. \|\b^KZ\b shell \|\i \i +\i \i\| \|\bEnd\b кон. строки \|\bF5\b копир. \|\b^O\b слово< \|\b^@\b вставка \|\uФАЙЛ\u \|\i \i +\i \i\|\uПОИСК\u \|\bF2\b начало файла \|\bS/F5\b в файл \|\b^J\b >стр. \|\uSPELL\u \|\b^KE\b новый \|\i \i +\i \i\|\bS/F7\b по образцу \|\bS/F2\b конец файла \|\bS/F6\b удал. \|\b^_\b отмен. \|\b^[N\b слова \|\b^KR\b читать\|\i \i +\i \i\|\bF7\b следующий \|\b^L\b на строку No. \|\b^K/\b фильтр \|\b^^\b не отм \|\b^[L\b файла \|\bS/F10\b писать\|\i \i +} + +{Windows +\i Окно ПОДСКАЗКИ - \|выключить по F1 пред.экран - ^P след. экран ^N \i +\i \i\b\|^KO\b Разрезать окно пополам \|\b^KE\b Загрузить файл в окно \|\i \i +\i \i\b\|^KG\b Увеличить текущее окно \|\b^KT\b Уменьшить текущее окно \|\i \i +\i \i\b\|^KN\b Перейти в нижнее окно \|\b^KP\b Перейти в верхнее окно \|\i \i +\i \i\b\|^C\b Удалить текущее окно \|\b^KI\b Показать все окна / одно окно \|\i \i +} + +{Advanced +\i Окно ПОДСКАЗКИ - \|выключить по F1 пред.экран - ^P след. экран ^N \i +\i \i\|\uМАКРО\u \|\uПРОЧЕЕ\u \|\uПРОКРУТКА\u \|\uSHELL\u \|\uGOTO\u \|\uI-SEARCH\u \|\i \i +\i \i\b\|^K[ 0-9\b Начало \|\b^K\b ПРБЛ статус \|\b^[W\b Вверх \|\b^K'\b В окне \|\b^[B\b To ^KB \|\b^[R\b Назад \|\i \i +\i \i\b\|^K]\b Конец \|\b^K\\\b Повтор \|\b^[Z\b Вниз \|\b^[!\b Команда \|\b^[K\b To ^KK \|\b^[S\b Вперед \|\i \i +\i \i\b\|^K 0-9\b Выполн.\|\b^[M\b Калькулятор \|\b^K<\b Влево \|\uQUOTE\u \|\uУДАЛЕНИЕ\u \|\uМЕТКИ\u \|\i \i +\i \i\b\|^K?\b Query \|\b^KA\b Центриров. \|\b^K>\b Вправо\|\b`\b Ctrl- \|\b^[Y\b отмена \|\b^[ 0-9\b Goto \|\i \i +\i \i\b\|^[D\b Дамп \|\b^[H\b Сообщение \| \|\b^\\\b Meta- \|\b^[O\b стр.< \|\b^[^[\b Установ.\i \|\i +} + +{Programs +\i Окно ПОДСКАЗКИ - \|выключить по F1 пред.экран - ^P след. экран ^N \i +\i \i\|\uПЕРЕХОДЫ\u \|\uСДВИГ\u \|\uCOMPILING\u \|\i \i +\i \i\b\|^G\b К соотв. ( [ { \|\b^K,\b влево \|\b^[C\b Compile and parse errors \|\i \i +\i \i\b\|^K-\b На прежнее место \|\b^K.\b вправо \|\b^[E\b Parse errors \|\i \i +\i \i\b\|^K=\b На след. место \| \|\b^[=\b To next error \|\i \i +\i \i\b\|^K;\b Поиск файла тагов \| \|\b^[-\b To prev. error \|\i \i +} + +{Search +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch sequences: \|\i \i +\i \i \\^ \\$ matches beg./end of line \\. match any single char \|\i \i +\i \i \\< \\> matches beg./end of word \\! match char or expression \|\i \i +\i \i \\( \\) grouping \\| match left or right \|\i \i +\i \i \\[a-z] matches one of a set \|\i \i +\i \i \\{1,3} match 1 - 3 occurrences \\? match 0 or 1 occurrence \|\i \i +\i \i \\+ match 1 or more occurrences \\* match 0 or more occurrences \|\i \i +\i \iReplace sequences: \|\i \i +\i \i \\& replaced with entire match \\1 - 9 replaced with Nth group \|\i \i +\i \i \\u \\l convert next to upper/lower \\U \\L case convert until \\E \|\i \i +} + +{Escape sequences +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iEscape sequences: \\x{10fff} Unicode code point \\p{Ll} Unicode category \|\i \i +\i \i \\i / \\I Identifier start \\t tab \\e escape \|\i \i +\i \i \\c / \\C Identifier continue \\n newline \\r carriage return \|\i \i +\i \i \\d / \\D Digit / Not a digit \\b backspace \\xFF hex character \|\i \i +\i \i \\w / \\W Word / Not a word \\a alert \\377 octal character \|\i \i +\i \i \\s / \\S Space / Not a space \\f formfeed \\\\ backslash \|\i \i +} + +{SearchOptions +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch options: \|\i \i +\i \i r Replace k Restrict search to highlighted block \|\i \i +\i \i i Ignore case b Search backwards instead of forwards \|\i \i +\i \i a Search across all loaded files \|\i \i +\i \i e Search across all files in Grep or Compile error list \|\i \i +\i \i w / n Allow / prevent wrap to start of file \|\i \i +\i \i x / y Search text is standard format / JOE format regular expression \|\i \i +\i \i nnn Perform exactly nnn replacements \|\i \i +} + +{Math +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \i \uCOMMANDS\u (hit ESC m for math) \uFUNCTIONS\u \|\i \i +\i \i hex hex display mode sin cos tab asin acos atan \|\i \i +\i \i dec decimal mode sinh cosh tanh asinh acosh atanh \|\i \i +\i \i ins type result into file sqrt cbrt exp ln log \|\i \i +\i \i eval evaluate block int floor ceil abs erg ergc \|\i \i +\i \i 0xff enter number in hex joe(..macro..) - runs an editor macro \|\i \i +\i \i 3e-4 floating point decimal \uBLOCK\u \|\i \i +\i \i a=10 assign a variable sum cnt Sum, count \|\i \i +\i \i 2+3:ins multiple commands avg dev Average, std. deviation \|\i \i +\i \i e pi constants \uOPERATORS\u \|\i \i +\i \i ans previous result ! ^ * / % + - < <= > >= == != && || ? :\|\i \i +} + +{Names +\i Окно ПОДСКАЗКИ - \|выключить по F1 пред.экран - ^P след. экран ^N \i +\i \i Нажмите TAB на запрос имени файла для генерации меню имен файлов \|\i \i +\i \i Или используйте клавиши вверх/вниз для выбора из ранее вводившихся имен \|\i \i +\i \i Специальные имена файлов: \|\i \i +\i \i !command Канал в/из команды шелла \|\i \i +\i \i >>filename Добавлять к файлу \|\i \i +\i \i - Читать/Писать в/из стандартного входа/выхода \|\i \i +\i \i filename,START,SIZE Читать/Писать часть файла/устройства \|\i \i +\i \i Задайте START/SIZE в 10-ном (255), 8-ном (0377) или 16-ном (0xFF) \|\i \i +} + +{Joe +\i Окно ПОДСКАЗКИ - \|выключить по F1 пред.экран - ^P след. экран ^N \i +\i \i Send bug reports to: http://sourceforge.net/projects/joe-editor \|\i \i +\i \i \|\i \i +\i \i default joerc file is here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc \|\i \i +\i \i default syntax and i18n files are here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/joe \|\i \i +\i \i additional documentation can be found here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/doc/joe \|\i \i +} + +{CharTable +\i Help Screen \|turn off with F1 prev. screen ^P \i +\i \i\| Dec \u 0123 4567 8901 2345 0123 4567 8901 2345 \u Dec \|\i \i +\i \i\| | | \|\i \i +\i \i\| 0 | \u@ABC\u \uDEFG\u \uHIJK\u \uLMNO\u \i\u@ABC\u\i \i\uDEFG\u\i \i\uHIJK\u\i \i\uLMNO\u\i | 128 \|\i \i +\i \i\| 16 | \uPQRS\u \uTUVW\u \uXYZ[\u \u\\]^_\u \i\uPQRS\u\i \i\uTUVW\u\i \i\uXYZ[\u\i \i\u\\]^_\u\i | 144 \|\i \i +\i \i\| 32 | !"# $%&' ()*+ ,-./ ═║╒ё ╓╔╕╖ ╗╘╙╚ ╛╜╝╞ | 160 \|\i \i +\i \i\| 48 | 0123 4567 89:; <=>? ╟╠╡Ё ╢╣╤╥ ╦╧╨╩ ╪╫╬© | 176 \|\i \i +\i \i\| 64 | @ABC DEFG HIJK LMNO юабц дефг хийк лмно | 192 \|\i \i +\i \i\| 80 | PQRS TUVW XYZ[ \\]^_ пярс тужв ьызш эщчъ | 208 \|\i \i +\i \i\| 96 | `abc defg hijk lmno ЮАБЦ ДЕФГ ХИЙК ЛМНО | 224 \|\i \i +\i \i\| 112 | pqrs tuvw xyz{ |}~ ПЯРС ТУЖВ ЬЫЗШ ЭЩЧЪ | 240 \|\i \i +} + + ЧЕТВЕРТАЯ СЕКЦИЯ: Раскладки клавиатуры: + + Вы должны описать секции со следующими именами: + + :main Для окна редактирования + :prompt Для строк запросов + :query For single-character query lines + :querya Singe-character query for quote + :querysr Search & Replace single-character query + :shell For shell windows + :vtshell For terminal emulator windows + + Прочие секции также могут быть определены для организационных целей или + для использования с ключом '-keymap'. + + Используйте: + :inherit name Для копирования секции name в текущую + :delete key Удалить клавишу из текущей секции + + Клавиши: + + Используйте ^@ - ^_, ^# и ^? для обозначения управляющих символов + Используйте SP для обозначения пробела + Используйте TO b для генерации диапазона символов + Используйте MDOWN, MDRAG, MUP, M2DOWN, M2DRAG, M2UP, M3DOWN, M3DRAG, M3UP для мыши + Используйте MWDOWN, MWUP для колеса мыши + + Вы также можете использовать имена описания termcap. Например: + + .ku Стрелка вверх + .kd Стрелка вниз + .kl Стрелка влево + .kr Стрелка вправо + .kh Home + .kH End + .kI Insert + .kD Delete + .kP PgUp + .kN PgDn + .k1 - .k9 F1 - F9 + .k0 F0 или F10 + .k; F10 + + Макросы: + + Простой макрос может быть определен двумя или более именами команд, + разделенными запятыми. Например: + + eof,bol ^T Z Перейти в начало следующей строки + + Also quoted matter is typed in literally: + + bol,">",dnarw .k1 Quote news article line + + Макрос может переноситься на следующую строку, если заканчивается запятой + + Команды или именованные макросы могут быть созданы с помощью :def. + Например, вы можете указать: + + :def foo eof,bol + + для определения команды foo, которая будет выполнять переход + к началу следующей строки. + +:windows Общие клавиши для всех окон +type U+0 TO U+10FFFF +abort ^C Аварийное прерывание + abort ^K Q + abort ^K ^Q + abort ^K q +querysave,query,killjoe ^K Q Query to save files, then exit +querysave,query,killjoe ^K ^Q +querysave,query,killjoe ^K q +arg ^K \ Повтор следующей команды +explode ^K I Показывать все окна или только одно +explode ^K ^I +explode ^K i +help .k1 +help .k8 +help .k9 +help .F1 +help .F4 +help .F8 +help .F9 +help .FB +help .FC +help ^K H Подсказка +help ^K ^H +help ^K h +hnext ^N Следующая страница подсказки +hprev ^P Предыдущая страница подсказки +math ^[ m Калькулятор +math ^[ M Калькулятор +math ^[ ^M Калькулятор +msg ^[ h Вывод сообщения +msg ^[ H Вывод сообщения +msg ^[ ^H Вывод сообщения +nextw ^K N На следующее окно +nextw ^K ^N +nextw ^K n +nextw ^[ [ 1 ; 3 C правый Alt в (новом) xterm +nextw ^[ [ 3 C правый Alt в gnome-terminal +pgdn .kN На экран вниз +pgdn ^V + pgdn ^# S +pgup .kP На экран вверх +pgup ^U + pgup ^# T +play ^K 0 TO 9 Выполнить макро +prevw ^K P На следующее окно +prevw ^K ^P +prevw ^K p +prevw ^[ [ 1 ; 3 D Левый Alt в (новом) xterm +prevw ^[ [ 3 D Левый Alt в gnome-terminal +query ^K ? Macro query insert +record ^K [ Записать макро +retype ^R Перерисовка экрана +rtn ^M Перевод строки +shell ^K Z Выход в шелл +shell ^K ^Z +shell ^K z +stop ^K ] Конец записи макро + Управление мышью +defmdown MDOWN Переместить курсор в позицию мыши +defmup MUP +defmdrag MDRAG Отметить последовательность символов +defm2down M2DOWN Отметить слово в позиции мыши +defm2up M2UP +defm2drag M2DRAG Отметить последовательность слов +defm3down M3DOWN Отметить строку в позиции мыши +defm3up M3UP +defm3drag M3DRAG Отметить последовательность строк +defmiddleup MIDDLEUP +defmiddledown MIDDLEDOWN Insert text + +xtmouse ^[ [ M Начало обработки событий мыши в xterm +extmouse ^[ [ < Introduces an extended xterm mouse event (TODO: translate to Russian) + +if,"char==65",then,"it's an A",else,"it's not an a",endif ^[ q + +:main Окно редактирования текста +:inherit windows + + Макросы проверки грамматических ошибок + + Ispell +:def ispellfile filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype +:def ispellword psh,nextword,markk,prevword,markb,filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;tr -d $SPLTMP;aspell -x -c $SPLTMP /dev/tty;cat $SPLTMP;/bin/rm $SPLTMP",rtn,retype +:def aspellword psh,nextword,markk,prevword,markb,filt,"SPLTMP=`mktemp -t joespell.XXXXXXXXXX`;cat >$SPLTMP;aspell -x -c $SPLTMP /dev/tty;tr -d <$SPLTMP '\\012';/bin/rm $SPLTMP",rtn,retype,nextword + +ispellfile ^[ l +ispellword ^[ n + + Compile + +:def compile querysave,query,scratch,"* Build Log *",rtn,bof,markb,eof," ",markk,blkdel,build + + Grep + +:def grep_find scratch,"* Grep Log *",rtn,bof,markb,eof," ",markk,blkdel,grep + + Man page + +:def man scratch,"* Man Page *",rtn,bof,markb,eof," ",markk,blkdel," ",ltarw,run,"man -P cat -S 2:3 " + + Shell windows + We load the already existing Startup Log first so that Shell does not inherit the current directory. + +:def shell1 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 1 *",rtn,vtbknd!,eof +:def shell2 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 2 *",rtn,vtbknd!,eof +:def shell3 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 3 *",rtn,vtbknd!,eof +:def shell4 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 4 *",rtn,vtbknd!,eof + + Macros allowed in shell window commands +:def shell_clear psh,bof,markb,eof,markk,blkdel +:def shell_parse parserr +:def shell_gparse gparse +:def shell_release release +:def shell_math maths +:def shell_typemath txt,math,"ins",rtn,rtn,txt,"\r",rtn +:def shell_rtn rtn +:def shell_edit edit +:def shell_dellin dellin +:def shell_cd cd +:def shell_pop popabort +:def shell_markb markb +:def shell_markk markk + + Split window version + :def shell1 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 1 *",rtn,vtbknd!,eof + :def shell2 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 2 *",rtn,vtbknd!,eof + :def shell3 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 3 *",rtn,vtbknd!,eof + :def shell4 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 4 *",rtn,vtbknd!,eof + +paste ^[ [ 2 0 2 ~ Base64 paste (obsolete) ??? +brpaste ^[ [ 2 0 0 ~ Bracketed paste +brpaste_done ^[ [ 2 0 1 ~ Bracketed paste done +rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ [ 1 ; 5 C Mark right Xterm +rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ [ 5 C Mark right Gnome-terminal + rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ O C Mark right Putty Ctrl-rtarw +rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ O c Mark right RxVT Ctrl-rtarw +ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ [ 1 ; 5 D Mark left +ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ [ 5 D Mark left + ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ O D Mark left Putty Ctrl-ltarw +ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ O d Mark left RxVT Ctrl-ltarw + +uparw,dnarw,begin_marking,uparw,toggle_marking ^[ [ 1 ; 5 A Mark up +uparw,dnarw,begin_marking,uparw,toggle_marking ^[ [ 5 A Mark up + uparw,dnarw,begin_marking,uparw,toggle_marking ^[ O A Mark up Putty Ctrl-uparw +uparw,dnarw,begin_marking,uparw,toggle_marking ^[ O a Mark up RxVT Ctrl-uparw + +dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ [ 1 ; 5 B Mark down +dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ [ 5 B Mark down + dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ O B Mark down Putty Ctrl-dnarw +dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ O b Mark down RxVT Ctrl-dnarw + + Дополнительные функции, которые в действительности не являются + частью пользовательского интерфейса JOE: + +delbol ^[ o Удалить до начала строки +delbol ^[ ^O +dnslide ^[ z Скролл вниз на одну строку +dnslide ^[ Z Scroll down one line +dnslide ^[ ^Z Scroll down one line +dnslide,dnslide,dnslide,dnslide MWDOWN +compile ^[ c Compile +compile ^[ ^C Compile +compile ^[ C +grep_find ^[ g Grep +grep_find ^[ G Grep +grep_find ^[ ^G Grep +execmd ^[ x Запросить команду для выполнения +execmd ^[ X +execmd ^[ ^X +jump ^[ SP +finish ^[ ^I Complete word in document +finish ^[ ^M Complete word: used to be math +isrch ^[ s Инкрементальный поиск вперед +isrch ^[ S +isrch ^[ ^S +notmod ^[ ~ Not modified +nxterr ^[ = К следующей ошибке +parserr ^[ e Разобрать ошибки в текущем буфере +parserr ^[ E +parserr ^[ ^E +prverr ^[ - К предыдущей ошибке +rsrch ^[ r Инкрементальный поиск назад +rsrch ^[ R +rsrch ^[ ^R +run ^[ ! Выполнить программу в окне +tomarkb ^[ b К началу блока +tomarkb ^[ ^B +tomarkk ^[ k В конец блока +tomarkk ^[ ^K +tomarkk ^[ K +txt ^[ i Запросит текст и вставить его +txt ^[ I +upslide ^[ w Скролл вверх на одну строку +upslide ^[ ^W +upslide ^[ W +upslide,upslide,upslide,upslide MWUP +yank ^[ y Отменить удаление текста +yankpop ^[ ^Y +yank ^[ Y + + + toggle_marking ^@ Ctrl-space block selection method +insc ^@ Ctrl-space used to insert a space + + bufed ^[ d Меню буферов + pbuf ^[ . Следующий буфер + nbuf ^[ , Предыдущий буфер +nbuf ^[ v Следующий буфер +nbuf ^[ V Следующий буфер +nbuf ^[ ^V Следующий буфер +pbuf ^[ u Предыдущий буфер +pbuf ^[ U Предыдущий буфер +pbuf ^[ ^U Предыдущий буфер + query ^[ q Quoted insert + byte ^[ n Перейти на байт + col ^[ c Перейти в позицию + abortbuf ^[ k Kill current buffer- don't mess with windows + ask ^[ a Запрос на сохранение текущего буфера + bop ^[ p На абзац назад + bos ^[ x В конец экрана + copy ^[ ^W Copy block into yank + dupw ^[ \ Разрезать окно + eop ^[ n Вперед на абзац + format ^[ j Форматировать абзац, игнорируя блок + markl ^[ l Отметить строку + nmark ^[ @ Выключить отметку + pop ^[ > Сдвинуть блок вперед + psh ^[ < Сдвинуть блок + swap ^[ x Поменять местами начало отметки блока и курсор + tomarkbk ^[ g Переходить в начало и в конец блока + tos ^[ e В начало экрана + tw0 ^[ 0 Убить текущее окно (скрытый буфер) + tw1 ^[ 1 Убить все другие окна (скрытые буфера) + uarg ^[ u Универсальный аргумент + yank ^[ ^Y Undelete previous text + yapp ^[ w Append next delete to previous yank + + Стандартный пользовательский интерфейс JOE + +quote8 ^\ Ввести метасимвол +quote ` Ввести управляющий символ + +backs ^? Backspace +backs ^H +backw ^O Удалить слово назад +bknd ^K ' Окно шелла +blkcpy .k5 Копировать блок +blkcpy ^K C +blkcpy ^K ^C +blkcpy ^K c +blkdel .f6 Удалить блок +blkdel .F6 +blkdel ^K Y +blkdel ^K ^Y +blkdel ^K y +blkmove ^K M Переместить блок +blkmove .k6 +blkmove ^K ^M +blkmove ^K m +blksave .f5 Сохранить блок +blksave .F5 +blksave ^K W +blksave ^K ^W +blksave ^K w +bof .k2 В начало файла +bof ^K ^U +bof ^K u + bol .kh В начало строки + bol ^A +home .kh +home ^A +center ^K A Центрировать строку +center ^K ^A +center ^K a +crawll ^K < Pan left +crawll ^[ < Pan left +crawlr ^K > Pan right +crawlr ^[ > Pan right +delch .kD Удалить символ +delch ^D +deleol ^J Удалить до конца строки +dellin ^Y Удалить всю строку +delw ^W Удалить до конца слова +dnarw .kd Вниз +dnarw ^[ O B +dnarw ^[ [ B +edit ^K E Редактировать файл +edit ^K ^E +edit ^K e +eof .f2 В конец файла +eof .F2 +eof ^K V +eof ^K ^V +eof ^K v +eol .kH В конец строки +eol .@7 +eol ^E +exsave .k0 Сохранить файл и выйти +exsave .k; +exsave ^K X +exsave ^K ^X +exsave ^K x +ffirst .f7 Поиск первого +ffirst .F7 +ffirst ^K F +ffirst ^K ^F +ffirst ^K f +filt ^K / Фильтровать блок + finish ^K ^M Complete text under cursor +fnext .k7 Поиск дальше +fnext ^L +fmtblk ^K J Форматировать абзац в блоке +fmtblk ^K ^J +fmtblk ^K j +gomark ^[ 0 TO 9 Перейти к метке +groww ^K G Увеличить окно +groww ^K ^G +groww ^K g +insc .kI Вставить пробел + insc ^@ +insf ^K R Вставить файл +insf ^K ^R +insf ^K r +lindent ^K , Сдвинуть блок влево +line ^L Перейти на указанную строку +line ^K L +line ^K ^L +line ^K l +ltarw .kl Влево +ltarw ^[ O D +ltarw ^[ [ D +macros ^[ d Раскрыть макрос +macros ^[ ^D +markb .k3 Отметка начала блока +markb ^K B +markb ^K ^B +markb ^K b +markk .f3 Отметка конца блока +markk .F3 +markk ^K K +markk ^K ^K +markk ^K k + mode ^T Меню опций +menu,"root",rtn ^T +nextpos ^K = На следующую позицию в истории позиций +nextword ^X На следующее слово +nextword ^[ [ 1 ; 5 C ctrl right in (newer) xterm +nextword ^[ [ 5 C ctrl right in gnome-terminal +open ^] Разрезать строку +prevpos ^K - На предыдущую позицию в истории +prevword ^Z На предыдущее слово +prevword ^[ [ 1 ; 5 D ctrl left in (newer) xterm +prevword ^[ [ 5 D ctrl left in gnome-terminal +redo ^^ Отменить отмену изменений +rindent ^K . Сдвинуть блок вправо +rtarw .kr Вправо +rtarw ^[ O C +rtarw ^[ [ C +run ^K ! Run a shell command +save .f0 Сохранить файл +save .FA +save ^K D +save ^K S +save ^K ^D +save ^K ^S +save ^K d +save ^K s +setmark ^[ ^[ Установить метку +shrinkw ^K T Уменьшить окно +shrinkw ^K ^T +shrinkw ^K t +splitw ^K O Разрезать окно +splitw ^K ^O +splitw ^K o +stat ^K SP Показать статус +tag ^K ; Поиск файла тагов +tomatch ^G К парной скобке +undo ^_ Отменить изменение +uparw .ku Вверх +uparw ^[ O A +uparw ^[ [ A +shell1 ^[ [ 1 1 ~ +shell1 ^[ O P +shell1 ^[ [ [ A +shell1 .k1 +shell2 ^[ [ 1 2 ~ +shell2 ^[ O Q +shell2 ^[ [ [ B +shell2 .k2 +shell3 ^[ [ 1 3 ~ +shell3 ^[ O R +shell3 ^[ [ [ C +shell3 .k3 +shell4 ^[ [ 1 4 ~ +shell4 ^[ O S +shell4 ^[ [ [ D +shell4 .k4 + +:prompt Окна запроса +:inherit main +if,"byte>size",then,complete,complete,else,delch,endif ^D +complete ^I +dnarw,eol .kd Go down +dnarw,eol ^N +dnarw,eol ^[ O B +dnarw,eol ^[ [ B + dnarw,eol ^# B +uparw,eol .ku Go up + uparw,eol ^# A +uparw,eol ^P +uparw,eol ^[ O A +uparw,eol ^[ [ A + +:menu Меню выбора +:inherit windows +abort ^[ ^[ +backsmenu ^H +bofmenu ^K U +bofmenu ^K ^U +bofmenu ^K u +bolmenu .kh +bolmenu ^A +dnarwmenu .kd +dnarwmenu ^N +dnarwmenu ^[ [ B +dnarwmenu ^[ O B +dnarwmenu MWDOWN +eofmenu ^K V +eofmenu ^K ^V +eofmenu ^K v +eolmenu .kH +eolmenu ^E +ltarwmenu .kl +ltarwmenu ^B +ltarwmenu ^[ [ D +ltarwmenu ^[ O D +pgdnmenu .kN На экран вниз +pgdnmenu ^V +pgdnmenu ^[ [ 6 ~ +pgupmenu .kP На экран вверх +pgupmenu ^U +pgupmenu ^[ [ 5 ~ +rtarwmenu .kr +rtarwmenu ^F +rtarwmenu ^[ [ C +rtarwmenu ^[ O C +rtn SP +rtn ^I +rtn ^K H +rtn ^K h +rtn ^K ^H +tabmenu ^I +uparwmenu .ku +uparwmenu ^P +uparwmenu ^[ [ A +uparwmenu ^[ O A +uparwmenu MWUP +defm2down M2DOWN Hits return key + +:query Single-key query window +:inherit windows + +:querya Single-key query window for quoting +type U+0 TO U+10FFFF + +:querysr Search & replace query window +type U+0 TO U+10FFFF + +:shell Input to shell windows +:inherit main +"" ^C Abort +"" ^D Eof +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace + +:vtshell Input to ANSI shell windows +:inherit main +""  [ A +"" .ku +""  [ B +"" .kd +""  [ C +"" .kr +""  [ D +"" .kl +"" ^A BOL for bash +"" ^C Abort +"" ^D Eof +"" ^E EOL for bash +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace diff --git a/joe/etc/joe/jmacsrc b/joe/etc/joe/jmacsrc new file mode 100644 index 0000000..0f6a024 --- /dev/null +++ b/joe/etc/joe/jmacsrc @@ -0,0 +1,1284 @@ + + Initialization file for JOE + Gnu-Emacs Joe + + JOE looks for this file in: + 1 - $HOME/.jmacsrc + 2 - /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/jmacsrc + + This file can include other files by placing the following include command + in the first column: + + :include filename + + FIRST SECTION: Default global options (these options can also be specified + on the command line. Also the NOXON, LINES, COLUMNS, DOPADDING and BAUD + options can be specified in environment variables): + + Put each option you want set in the first column: + + -option Sets the option + --option Clears the option + + -help_is_utf8 Set if help text is in UTF-8 format. Leave clear if it's a raw 8-bit format. + +-mid Cursor is recentered when scrolling is necessary + -left nn Amount to jump left when scrolling is necessary (-1 for 1/4 width) + -right nn Amount to jump right when scrolling is necessary (-1 for 1/4 width) +-marking Text between ^KB and cursor is highlighted +-lightoff Turn off highlighting after block copy or move + -asis Characters 128 - 255 shown as-is + -force Force final newline when files are saved + -nolocks If you don't want file locks to be used + -nomodcheck Disable periodic checking of disk file newer than buffer + (this checking happens on save even with this option). + -nobackups If you don't want backup files to be created + -nodeadjoe If you don't want DEADJOE files to be created + -nocurdir Do not prompt with current directory + -break_hardlinks + Delete file before writing, to break hard links + (but don't break symbolic links). + + -break_links + Delete file before writing, to break hard links + and symbolic links. + + -exask ^KX always confirms file name +-beep Beep on errors and when cursor goes past extremes + -nosta Disable top-most status line + -keepup %k and %c status line escape sequences updated frequently +-pg 1 No. lines to keep for PgUp/PgDn + -undo_keep nnn Number of undo records to keep. 0 for infinite. + +-csmode ^KF after a pervious search does a ^L instead + + -backpath path + Directory to store backup files (one space between 'backpath' and + the 'path', no trailing spaces or comments after the path). + + -floatmouse Clicking past end of line moves the cursor past the end + -rtbutton Use the right mouse button for action, instead of the left + -nonotice Disable copyright notice + -noexmsg Disable exiting message ("File not changed so no updated needed") + +-noxon Attempt to turn off ^S/^Q processing +-orphan Put extra files given on command line in orphaned buffers + instead of in windows + -dopadding Output pad characters (for when there is no tty handshaking) + -lines nnn Set no. screen lines + -baud 19200 Set baud rate for terminal optimizations + -columns nnn Set no. screen columns + -helpon Start with help on + -skiptop nnn Don't use top nnn lines of the screen + +-notite Don't send terminal initialization and termination strings: prevents + restoration of screen on exit. + + -nolinefeeds Prevent sending linefeeds to preserve screen history in terminal + emulator's scroll-back buffer. + + -usetabs Use tabs to help optimize screen update. + +-assume_color Assume terminal has ANSI color support even if termcap/terminfo entry + says that it doesn't. This only applies if the terminal otherwise + looks like an ANSI terminal (support bold and capability starts with + ESC [). + +-assume_256color + Assume terminal has xterm 256 color support (ESC [ 38 ; 5 ; NNN m and + ESC [ 48 ; 5 ; NNN m). + +-guess_crlf Automatically detect MS-DOS files and set -crlf appropriately + +-guess_indent Guess indent character (tab or space). + +-guess_non_utf8 Allow guess of non-UTF-8 file encoding in a UTF-8 locale. + + -guess_utf8 Allow guess of UTF-8 file encoding in non-UTF-8 locale. + +-guess_utf16 Allow guess of UTF-16 encoding + +-menu_above Position menu/list above prompt when enabled. Otherwise position + below prompt. + +-transpose Transpose rows with columns in all menus. + + -menu_explorer Stay in menu system when a directory is selected (otherwise + directory is added to path and menu is closed). + + -menu_jump Jump into file selection menu when tab is hit (otherwise, menu + comes up, but cursor stays in file name prompt). + +-icase Search is case insensitive by default. + +-wrap Search wraps + +-autoswap Swap markb with markk when necessary + +-joe_state Use ~/.joe_state file + + -mouse Enable mouse support + + -joexterm If you are using Joe's modified Xterm, which makes -mouse + mode work better (cut & paste work transparently). + +-brpaste When JOE starts, send command to the terminal emulator that + enables "bracketed paste mode" (but only if the terminal + seems to have the ANSI command set). In this mode, text + pasted into the window is bracketed with ESC [ 2 0 0 ~ and + ESC [ 2 0 1 ~. + +-pastehack If keyboard input comes in as one block assume it's a mouse + paste and disable autoindent and wordwrap. + + -square Rectangular block mode + + -colors scheme + Set the default color scheme + +-restore Restore previous cursor position when files are opened + + -search_prompting + Search prompts with previous search request. + + -regex Search uses standard regular expression format (otherwise it uses + JOE format where all special characters have to be escaped). + + Status line definition strings. -lmsg defines the left-justified string and + -rmsg defines the right-justified string. The first character of -rmsg is + the background fill character. The following escape sequences can be used + in these string: + + %t 12 hour time + %u 24 hour time + %T O for overtype mode, I for insert mode + %W W if wordwrap is enabled + %I A if autoindent is enabled + %X Rectangle mode indicator + %n File name + %m '(Modified)' if file has been changed + %* '*' if file has been changed + %R Read-only indicator + %r Row (line) number + %c Column number + %o Byte offset into file + %O Byte offset into file in hex + %a Ascii value of character under cursor + %A Ascii value of character under cursor in hex + %w Width of character under cursor + %k Entered prefix keys + %p Percent of file cursor is at + %l No. lines in file + %S '*SHELL*' if there is a shell running in window + %M Macro recording message + %y Syntax + %e Encoding + %x Context (first non-indented line going backwards) + %dd day + %dm month + %dY year + %Ename% value of environment variable + %Tname% value of option (ON or OFF for boolean options) + + The formatting escape sequences may also be given: + + \i Inverse + \u Underline + \b Bold + \d Dim + \f Blink + \l Italic + +-lmsg \i%k%T%W%I%X %* [%n] %y %M +-rmsg %S Row %4r Col %3c %t ^X^H for help +-smsg ** Line %r Col %c Offset %o(0x%O) %e %a(0x%A) Width %w ** +-zmsg ** Line %r Col %c Offset %o(0x%O) ** +-xmsg \i Joe's Own Editor %v (%b) ** Type \b^X ^C\b to exit or \b^X ^H\b for help **\i + + Key sequence hints which are displayed in various prompts. +-aborthint ^G +-helphint ^X ^H + + + SECOND SECTION: File name dependant local option settings: + + Each line with '*' in the first column indicates the modes which should be + files which match the regular expression. If more than one regular + expression matches the file name, than the last matching one is chosen. + + Here is a list of modes which can be set: + + -cpara >#!;*/% + Characters which can indent paragraphs. + + -cnotpara . + Characters which begin non-paragraph lines. + + + -encoding name + Set file coding (for example: utf-8, iso-8859-15) + + -syntax name + Specify syntax (syntax file called + 'name.jsf' will be loaded) + + -hex Hex editor mode + + -highlight Enable highlighting + + -smarthome Home key first moves cursor to beginning of line, + then if hit again, to first non-blank character. + + -indentfirst Smart home goes to first non-blank character first, + instead of going the beginning of line first. + + -smartbacks Backspace key deletes 'istep' number of + 'indentc's if cursor is at first non-space + character. + + -tab nnn Tab width + + -indentc nnn Indentation character (32 for space, 9 for tab) + + -istep nnn Number of indentation columns + + -spaces TAB inserts spaces instead of tabs. + + -purify Fix indentation if necessary for rindent, lindent and backs + (for example if indentation uses a mix of tabs and spaces, + and indentc is space, indentation will be converted to all + spaces). + + -crlf File uses CR-LF at ends of lines + + -wordwrap Wordwrap + + -nobackup If you don't want backup file to be created + + -autoindent Auto indent + + -overwrite Overtype mode + + -picture Picture mode (right arrow can go past end of lines) + + -lmargin nnn Left margin + + -rmargin nnn Right margin + + -flowed Put one space after intermediate paragraph lines + for support of flowed text. + + + -french One space after '.', '?' and '!' for wordwrap + and paragraph reformat instead of two. Joe + does not change the spacing you give, but + sometimes it must put spacing in itself. This + selects how much is inserted. + + -linums Enable line numbers on each line + + -hiline Highlight current line + + -rdonly File is read-only + + -keymap name + Keymap to use if not 'main' + + -lmsg Status line definition strings- + -rmsg see previous section for more info. + + -mnew macro + Macro to execute when new files are loaded + -mold macro + Macro to execute when existing files are loaded + -msnew macro + Macro to execute when new files are saved + -msold macro + Macro to execute when existing files are saved + -mfirst macro + Macro to execute on first modification + + Macros for the above options are in the same format as in the key + binding section below- but without the key name strings. + + These define the language syntax for ^G (goto matching delimiter): + + -highlighter_context Use the highlighter context for ^G + + -single_quoted Text between ' ' should be ignored (this is + not good for regular text since ' is + normally used alone as an apostrophe) + + -c_comment Text between /* */ should be ignored + + -cpp_comment Text after // should be ignored + + -pound_comment Text after # should be ignored + + -vhdl_comment Text after -- should be ignored + + -semi_comment Text after ; should be ignored + + -text_delimiters begin=end:if=elif=else=endif + + Define word delimiters + + Default local options +-highlight +-istep 4 + + Use this macro (put in first column) to have joe "p4 edit" a file you're about to change. + + -mfirst if,"rdonly && joe(sys,\"p4 edit \",name,rtn)",then,mode,"o",msg,"executed \"p4 edit ",name,"\"",rtn,endif + + File type table is now in a separate file. You can copy this file to ~/.joe and customize it. + +:include ftyperc + + SECOND and 1/2 SECTION: Option menu layout + + :defmenu name [macro] + Defines a menu. + The macro here is executed when the user hits backspace. + + macro string comment + A menu entry. Macro is any JOE macro- see "Macros:" + below. String is the label to be used for the macro + in the menu. It is in the same format as the -lmsg + and -rmsg options above. + + Two whitespace characters in a row begins a comment. + Use '% ' for a leading space in the string. + +:defmenu root +mode,"overwrite",rtn T Overtype %Zoverwrite% +mode,"hex",rtn ' Hex edit mode +mode,"autoindent",rtn I Autoindent %Zautoindent% +mode,"wordwrap",rtn W Word wrap %Zwordwrap% +mode,"tab",rtn D Tab width %Ztab% +mode,"lmargin",rtn L Left margin %Zlmargin% +mode,"rmargin",rtn R Right margin %Zrmargin% +mode,"square",rtn X Column mode %Zsquare% +mode,"indentc",rtn % % Indent char %Zindentc% +mode,"istep",rtn % % Indent step %Zistep% +menu,"indent",rtn = Indent select +mode,"highlight",rtn H Highlighting %Zhighlight% +mode,"crlf",rtn Z CR-LF/MS-DOS %Zcrlf% +mode,"linums",rtn N Line numbers %Zlinums% +mode,"hiline",rtn U Highlight line %Zhiline% +mode,"beep",rtn B Beep %Zbeep% +mode,"rdonly",rtn O Read only %Zrdonly% +mode,"syntax",rtn Y Syntax +mode,"colors",rtn S Color scheme +mode,"encoding",rtn E Encoding +mode,"asis",rtn % % Meta chars as-is +mode,"language",rtn V Language +mode,"picture",rtn P picture %Zpicture% +mode,"type",rtn F File type [%Ztype%] +mode,"title",rtn C Context %Ztitle% +menu,"more-options",rtn % % More options... + +:defmenu more-options menu,"root",rtn +menu,"^G",rtn % % ^G options +menu,"search",rtn % % search options +menu,"paragraph",rtn % % paragraph options +menu,"file",rtn % % file options +menu,"menu",rtn % % menu options +menu,"global",rtn % % global options +menu,"cursor",rtn % % cursor options +menu,"marking",rtn % % marking options +menu,"tab",rtn % % tab/indent options + +:defmenu indent menu,"root",rtn +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 1, Indent character = 32",rtn 1 Space +mode,"istep",rtn,"2",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 2, Indent character = 32",rtn 2 Spaces +mode,"istep",rtn,"3",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 3, Indent character = 32",rtn 3 Spaces +mode,"istep",rtn,"4",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 4, Indent character = 32",rtn 4 Spaces +mode,"istep",rtn,"5",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 5, Indent character = 32",rtn 5 Spaces +mode,"istep",rtn,"8",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 8, Indent character = 32",rtn 8 Spaces +mode,"istep",rtn,"10",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 10, Indent character = 32",rtn 0 Ten +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"9",rtn,msg,"Indent step = 1, Indent character = 9",rtn T Tab + +:defmenu menu menu,"more-options",rtn +mode,"menu_explorer",rtn % % Menu explorer %Zmenu_explorer% +mode,"menu_above",rtn % % Menu position %Zmenu_above% +mode,"menu_jump",rtn % % Jump into menu %Zmenu_jump% +mode,"transpose",rtn % % Transpose menus %Ztranspose% + +:defmenu ^G menu,"more-options",rtn +mode,"highlighter_context",rtn % % ^G uses highlighter context %Zhighlighter_context% +mode,"single_quoted",rtn % % ^G ignores '...' %Zsingle_quoted% +mode,"no_double_quoted",rtn % % ^G no ignore "..." %Zno_double_quoted% +mode,"c_comment",rtn % % ^G ignores /*...*/ %Zc_comment% +mode,"cpp_comment",rtn % % ^G ignores //... %Zcpp_comment% +mode,"pound_comment",rtn % % ^G ignores #... %Zpound_comment% +mode,"vhdl_comment",rtn % % ^G ignores --... %Zvhdl_comment% +mode,"semi_comment",rtn % % ^G ignores ;... %Zsemi_comment% +mode,"tex_comment",rtn % % ^G ignores %%... %Ztex_comment% +mode,"text_delimiters",rtn % % Text delimiters %Ztext_delimiters% + +:defmenu search menu,"more-options",rtn +mode,"icase",rtn % % Case insensitivity %Zicase% +mode,"wrap",rtn % % Search wraps %Zwrap% +mode,"search_prompting",rtn % % Search prompting %Zsearch_prompting% +mode,"csmode",rtn % % Continued search %Zcsmode% + +:defmenu paragraph menu,"more-options",rtn +mode,"french",rtn % % French spacing %Zfrench% +mode,"flowed",rtn % % Flowed text %Zflowed% +mode,"cpara",rtn % % Paragraph indent chars %Zcpara% +mode,"cnotpara",rtn % % Not-paragraph chars %Zcnotpara% + +:defmenu file menu,"more-options",rtn +mode,"restore",rtn % % Restore cursor %Zrestore% +mode,"guess_crlf",rtn % % Auto detect CR-LF %Zguess_crlf% +mode,"guess_indent",rtn % % Guess indent %Zguess_indent% +mode,"guess_non_utf8",rtn % % Guess non-UTF-8 %Zguess_non_utf8% +mode,"guess_utf8",rtn % % Guess UTF-8 %Zguess_utf8% +mode,"guess_utf16",rtn % % Guess UTF-16 %Zguess_utf16% +mode,"force",rtn % % Force last NL %Zforce% +mode,"nobackup",rtn % % No backup %Znobackup% + +:defmenu global menu,"more-options",rtn +mode,"nolocks",rtn % % Disable locks %Znolocks% +mode,"nobackups",rtn % % Disable backups %Znobackups% +mode,"nodeadjoe",rtn % % Disable DEADJOE %Znodeadjoe% +mode,"nomodcheck",rtn % % Disable mtime check %Znomodcheck% +mode,"nocurdir",rtn % % Disable current dir %Znocurdir% +mode,"exask",rtn % % Exit ask %Zexask% +mode,"nosta",rtn % % Disable status line %Znosta% +mode,"keepup",rtn % % Fast status line %Zkeepup% +mode,"break_hardlinks",rtn % % Break hard links %Zbreak_hardlinks% +mode,"break_links",rtn % % Break links %Zbreak_links% +mode,"joe_state",rtn % % Joe_state file %Zjoe_state% +mode,"undo_keep",rtn % % No. undo records %Zundo_keep% +mode,"backpath",rtn % % Path to backup files %Zbackpath% + +:defmenu cursor menu,"more-options",rtn +mode,"pg",rtn % % No. PgUp/PgDn lines %Zpg% +mode,"mid",rtn C Center on scroll %Zmid% +mode,"left",rtn L Columns to scroll left %Zleft% +mode,"right",rtn R Columns to scroll right %Zright% +mode,"floatmouse",rtn % % Click past end %Zfloatmouse% +mode,"rtbutton",rtn % % Right button %Zrtbutton% + +:defmenu marking menu,"more-options",rtn +mode,"autoswap",rtn % % Autoswap mode %Zautoswap% +mode,"marking",rtn % % Marking %Zmarking% +mode,"lightoff",rtn % % Auto unmask %Zlightoff% + +:defmenu tab menu,"more-options",rtn +mode,"smarthome",rtn % % Smart home key %Zsmarthome% +mode,"smartbacks",rtn % % Smart backspace %Zsmartbacks% +mode,"indentfirst",rtn % % To indent first %Zindentfirst% +mode,"purify",rtn % % Clean up indents %Zpurify% +mode,"spaces",rtn % % No tabs %Zspaces% + + THIRD SECTION: Named help screens: + + Use \i to turn on/off inverse video + Use \u to turn on/off underline + Use \b to turn on/off bold + Use \d to turn on/off dim + Use \f to turn on/off flash + Use \l to turn on/off italic + +{Basic +\i Help Screen \|turn off with ^X^H more help with ^X. \i +\i \i\|\uCURSOR\u \|\uGO TO\u \|\uUNDO\u \|\uMISC\u \|\uREGION\u \|\uFILE/EXIT\u \|\i \i +\i \i\|^B left ^F right \|^[V prev screen \|^_ undo \|^[^[ option \|^@ mark \|^X^C exit \|\i \i +\i \i\|^P up ^N down \|^V next screen \|^^ redo \|^[Q format \|^X^X swap \|^X^F find \|\i \i +\i \i\|^[B prev. word \|^A beg of line \|\uDELETE\u \|^L refresh \|^W cut \|^X^V revert\|\i \i +\i \i\|^[F next word \|^E end of line \|^D char \|^[$ spell \|^[W copy \|^X^S save \|\i \i +\i \i\|\uSEARCH\u \|^X[ prev page \|^K >line \|^[M math \|^Y paste \|^XS all \|\i \i +\i \i\|^S forward \|^X] next page \|^[D >word \|^[X command \|^[Y switch \|^XI insert\|\i \i +\i \i\|^R backward \|^[G to line No. \|^[ DEL \|^XL status \|^XA file \|^XK kill \|\i \i +\i \i\|^[% find&replace \|^XG matching ([{\| word< \|^U repeat \|^X| filter \|^XB switch\|\i \i +} + +{Editing +\i Help Screen \|turn off with ^X^H prev. screen ^X, next screen ^X. \i +\i \i\|\uCASE\u \|\uTRANSPOSE\u \|\uINSERT\u \|\uMACROS\u \|\uPROGRAMS\u \|\i \i +\i \i\|^[U Up word \|^T Chars \|^O line \|^X( record \|^X^I Indent region \|\i \i +\i \i\|^[L Down word \|^[T Words \|^C space \|^X) stop \|^[. Tags file find \|\i \i +\i \i\|^[C Cap. word \|^X^T Lines \|^Q Ctrl- \|^XE play \|^X4. Tags other window \|\i \i +\i \i\|^X^U Up region \| \|^[( () \|^XQ query suspend \|^XC Compile \|\i \i +\i \i\|^X^L Down region\| \| \| \|^XN / ^XP next/prev err\|\i \i +} + +{Window +\i Help Screen \|turn off with ^X^H prev. screen ^X, next screen ^X. \i +\i \i\|\uWINDOW\u \|\uSCROLL\u \|\uMODE\u \|\uCURSOR\u \|\i \i +\i \i\|^X2 Split window in half \|^X^P up \|^XF rght mgn\|^[P prev. paragraph \|\i \i +\i \i\|^XO Switch to other window \|^X^N down \|^X^Q rdonly \|^[N next paragraph \|\i \i +\i \i\|^XZ Grow window \|^X< left \|^[~ not mod \|\uDELETE\u \|\i \i +\i \i\|^X^Z Shrink window \|^X> right \| \|^[ SP just one space \|\i \i +\i \i\|^X0 Kill window \|\uSHELL\u \|\uBOOKMARK\u \|^[ \\ no spaces \|\i \i +\i \i\|^X1 Kill all other windows \|^[! Command\|^XJ set \|^X^O cut blank lines \|\i \i +\i \i\|^[^Z ^[^V other PgUp/PgDn \|^[' Window \|^X/ goto \|^[z cut to character \|\i \i +} + +{Search +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch sequences: \|\i \i +\i \i \\^ \\$ matches beg./end of line \\. match any single char \|\i \i +\i \i \\< \\> matches beg./end of word \\! match char or expression \|\i \i +\i \i \\( \\) grouping \\| match left or right \|\i \i +\i \i \\[a-z] matches one of a set \|\i \i +\i \i \\{1,3} match 1 - 3 occurrences \\? match 0 or 1 occurrence \|\i \i +\i \i \\+ match 1 or more occurrences \\* match 0 or more occurrences \|\i \i +\i \iReplace sequences: \|\i \i +\i \i \\& replaced with entire match \\1 - 9 replaced with Nth group \|\i \i +\i \i \\u \\l convert next to upper/lower \\U \\L case convert until \\E \|\i \i +} + +{Escape sequences +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iEscape sequences: \\x{10fff} Unicode code point \\p{Ll} Unicode category \|\i \i +\i \i \\i / \\I Identifier start \\t tab \\e escape \|\i \i +\i \i \\c / \\C Identifier continue \\n newline \\r carriage return \|\i \i +\i \i \\d / \\D Digit / Not a digit \\b backspace \\xFF hex character \|\i \i +\i \i \\w / \\W Word / Not a word \\a alert \\377 octal character \|\i \i +\i \i \\s / \\S Space / Not a space \\f formfeed \\\\ backslash \|\i \i +} + +{SearchOptions +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch options: \|\i \i +\i \i r Replace k Restrict search to highlighted block \|\i \i +\i \i i Ignore case b Search backwards instead of forwards \|\i \i +\i \i a Search across all loaded files \|\i \i +\i \i e Search across all files in Grep or Compile error list \|\i \i +\i \i w / n Allow / prevent wrap to start of file \|\i \i +\i \i x / y Search text is standard format / JOE format regular expression \|\i \i +\i \i nnn Perform exactly nnn replacements \|\i \i +} + +{Math +\i Help Screen \|turn off with ^X^H prev. screen ^X, next screen ^X. \i +\i \i \uCOMMANDS\u (hit ESC m for math) \uFUNCTIONS\u \|\i \i +\i \i hex hex display mode sin cos tab asin acos atan \|\i \i +\i \i dec decimal mode sinh cosh tanh asinh acosh atanh \|\i \i +\i \i ins type result into file sqrt cbrt exp ln log \|\i \i +\i \i eval evaluate block int floor ceil abs erg ergc \|\i \i +\i \i 0xff enter number in hex joe(...macro...) - runs an editor macro \|\i \i +\i \i 3e-4 floating point decimal \uBLOCK\u \|\i \i +\i \i a=10 assign a variable sum cnt Sum, count \|\i \i +\i \i 2+3:ins multiple commands avg dev Average, std. deviation \|\i \i +\i \i e pi constants \uOPERATORS\u \|\i \i +\i \i ans previous result ! ^ * / % + - < <= > >= == != && || ? :\|\i \i +} + +{Names +\i Help Screen \|turn off with ^X^H prev. screen ^X, next screen ^X. \i +\i \i Hit TAB at file name prompts to generate menu of file names \|\i \i +\i \i Or use up/down keys to access history of previously entered names \|\i \i +\i \i Special file names: \|\i \i +\i \i !command Pipe in/out of a shell command \|\i \i +\i \i >>filename Append to a file \|\i \i +\i \i - Read/Write to/from standard I/O \|\i \i +\i \i filename,START,SIZE Read/Write a part of a file/device \|\i \i +\i \i Give START/SIZE in decimal (255), octal (0377) or hex (0xFF) \|\i \i +} + +{Joe +\i Help Screen \|turn off with ^X^H prev. screen ^X, next screen ^X. \i +\i \i Send bug reports to: http://sourceforge.net/projects/joe-editor \|\i \i +\i \i \|\i \i +\i \i default joerc file is here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc \|\i \i +\i \i default syntax and i18n files are here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/joe \|\i \i +\i \i additional documentation can be found here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/doc/joe \|\i \i +} + +{CharTable +\i Help Screen \|turn off with ^X^H prev. screen ^X, \i +\i \i\| Dec \u 0123 4567 8901 2345 0123 4567 8901 2345 \u Dec \|\i \i +\i \i\| | | \|\i \i +\i \i\| 0 | \u@ABC\u \uDEFG\u \uHIJK\u \uLMNO\u \i\u@ABC\u\i \i\uDEFG\u\i \i\uHIJK\u\i \i\uLMNO\u\i | 128 \|\i \i +\i \i\| 16 | \uPQRS\u \uTUVW\u \uXYZ[\u \u\\]^_\u \i\uPQRS\u\i \i\uTUVW\u\i \i\uXYZ[\u\i \i\u\\]^_\u\i | 144 \|\i \i +\i \i\| 32 | !"# $%&' ()*+ ,-./ ═║╒ё ╓╔╕╖ ╗╘╙╚ ╛╜╝╞ | 160 \|\i \i +\i \i\| 48 | 0123 4567 89:; <=>? ╟╠╡Ё ╢╣╤╥ ╦╧╨╩ ╪╫╬© | 176 \|\i \i +\i \i\| 64 | @ABC DEFG HIJK LMNO юабц дефг хийк лмно | 192 \|\i \i +\i \i\| 80 | PQRS TUVW XYZ[ \\]^_ пярс тужв ьызш эщчъ | 208 \|\i \i +\i \i\| 96 | `abc defg hijk lmno ЮАБЦ ДЕФГ ХИЙК ЛМНО | 224 \|\i \i +\i \i\| 112 | pqrs tuvw xyz{ |}~ ПЯРС ТУЖВ ЬЫЗШ ЭЩЧЪ | 240 \|\i \i +} + + FOURTH SECTION: Key bindings: + + Section names you must provide: + + :main For editing window + :prompt For prompt lines + :query For single-character query lines + :querya Singe-character query for quote + :querysr Search & Replace single-character query + :shell For shell windows + :vtshell For terminal emulator windows + + Other sections may be given as well for organization purposes or for + use with the '-keymap' option. + + Use: + :inherit name To copy the named section into the current one + :delete key To delete a key sequence from the current section + + Keys: + + Use ^@ through ^_, ^# and ^? for Ctrl chars + Use SP for space + Use a TO b to generate a range of characters + Use MDOWN, MDRAG, MUP, M2DOWN, M2DRAG, M2UP, M3DOWN, M3DRAG, M3UP for mouse + Use MWDOWN, MWUP for wheel mouse motion + + You can also use termcap string capability names. For example: + + .ku Up + .kd Down + .kl Left + .kr Right + .kh Home + .kH End + .kI Insert + .kD Delete + .kP PgUp + .kN PgDn + .k1 - .k9 F1 - F9 + .k0 F0 or F10... you decide. + .k; F10 + + Macros: + + Simple macros can be made by comma seperating 2 or more command names. For + example: + + bof,bol ^T Z Goto beginning of last line + + Also quoted matter is typed in literally: + + bol,">",dnarw .k1 Quote news article line + + Macros may cross lines if they end with , + + +:windows Bindings common to all windows +type U+0 TO U+10FFFF +abort ^G Abort window +abort ^X ^C +abort ^C +tw0 ^X 0 Delete window: can make orphan buffers +tw1 ^X 1 Delete other windows: can make orphan buffers +uarg ^U Repeat prefix +uarg ^[ - +uarg ^[ 0 TO 9 +help ^X ^H + help .k1 +help ^[ O P +help ^[ [ 1 1 ~ +hnext ^X . +hprev ^X , +math ^[ m Calculator +math ^[ M +nextw ^X o Other window +nextw ^X O Other window +pgdn .kN Screen down +pgdn ^V +pgdn ^[ [ 6 ~ + pgdn ^# S +pgup .kP Screen up +pgup ^[ v +pgup ^[ V +pgup ^[ [ 5 ~ + pgup ^# T +play,"0" ^X e Execute keyboard macro +play,"0" ^X E Execute keyboard macro +prevw ^X p Previous window (uemacs) +prevw ^X P Previous window (uemacs) +query ^X q Query insert +query ^X Q Query insert +record,"0" ^X ( Record macro +retype ^L Refresh screen +rtn ^M Return +shell ^Z Suspend +shell ^[ s Suspend (uemacs) +shell ^[ S Suspend (uemacs) +stop ^X ) Stop recording macro + Mouse handling +defmdown MDOWN Move the cursor to the mouse location +defmup MUP +defmdrag MDRAG Select a region of characters +defm2down M2DOWN Select the word at the mouse location +defm2up M2UP +defm2drag M2DRAG Select a region of words +defm3down M3DOWN Select the line at the mouse location +defm3up M3UP +defm3drag M3DRAG Select a region of lines +defmiddleup MIDDLEUP +defmiddledown MIDDLEDOWN Insert text + +xtmouse ^[ [ M Introduces an xterm mouse event +extmouse ^[ [ < Introduces an extended xterm mouse event + +:main Text editing window +:inherit windows + + ESC-x compile + +:def compile mwind!,mfit!,querysave,query,scratch,"* Build Log *",rtn,bof,markb,eof," ",markk,blkdel,build + + Grep + +:def grep_find mwind!,mfit!,scratch,"* Grep Log *",rtn,bof,markb,eof," ",markk,blkdel,grep + + Man page + +:def man scratch,"* Man Page *",rtn,bof,markb,eof," ",markk,blkdel," ",ltarw,run,"man -P cat -S 2:3 " + + Shell windows + We load the already existing Startup Log first so that Shell does not inherit the current directory. + +:def shell1 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 1 *",rtn,vtbknd!,eof +:def shell2 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 2 *",rtn,vtbknd!,eof +:def shell3 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 3 *",rtn,vtbknd!,eof +:def shell4 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 4 *",rtn,vtbknd!,eof + + Macros allowed in shell window commands +:def shell_clear psh,bof,markb,eof,markk,blkdel +:def shell_parse parserr +:def shell_gparse gparse +:def shell_release release +:def shell_math maths +:def shell_typemath txt,math,"ins",rtn,rtn,txt,"\r",rtn +:def shell_rtn rtn +:def shell_edit edit +:def shell_dellin dellin +:def shell_cd cd +:def shell_pop popabort +:def shell_markb markb +:def shell_markk markk + + Split window version + :def shell1 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 1 *",rtn,vtbknd!,eof + :def shell2 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 2 *",rtn,vtbknd!,eof + :def shell3 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 3 *",rtn,vtbknd!,eof + :def shell4 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 4 *",rtn,vtbknd!,eof + +:def ensure_other if,"no_windows<2",then,splitw,endif + + Ispell +:def ispellfile filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype +:def ispellword psh,nextword,markk,prevword,markb,filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;tr -d $SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;cat $SPLTMP;/bin/rm $SPLTMP",rtn,retype +:def aspellword psh,nextword,markk,prevword,markb,filt,"SPLTMP=ispell.tmp;cat >$SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;tr -d <$SPLTMP '\\012';/bin/rm $SPLTMP",rtn,retype,nextword + +aspellword ^[ $ + +ctrl ^Q Quote Ctrl chars + ctrl ` Quote Ctrl chars + +paste ^[ ] 5 2 ; Base64 paste (obsolete) +brpaste ^[ [ 2 0 0 ~ Bracketed paste +brpaste_done ^[ [ 2 0 1 ~ Bracketed paste done + +insc ^[ [ 2 ~ +insc ^[ [ L SCO + +delch ^[ [ 3 ~ + +pgup ^[ [ I SCO + +pgdn ^[ [ G SCO + +home ^[ [ 1 ~ Putty, Linux, Cygwin +home ^[ [ H Xterm, Konsole, SCO +home ^[ O H gnome-terminal +home ^[ [ 7 ~ RxVT + home ^# SP A Amiga + +eol ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eol ^[ [ F Xterm, Konsole, SCO +eol ^[ O F gnome-terminal +eol ^[ [ 8 ~ RxVT + eol ^# SP @ Amiga + + Editor Macros (for EMACS) + + Better off not having this: JOE automatically figure out the fill + prefix. If you really want to set the left margin, use ^[ ^[ L. + mode,"lmargin",rtn,"col",rtn ^X . Left fill prefix (left margin) + + Select entire file +:def markall eof,drop,msg,"Mark set",rtn,bof + + Convert word to upper case +:def upcaseword psh,nextword-,markk,prevword-,markb,upper,nextword- + + Convert word to lower case +:def dncaseword psh,nextword-,markk,prevword-,markb,lower,nextword- + + Capitalize word +:def capword psh,if,"arg>=0",then, + nextword,markk,prevword,markb,lower,rtarw,markk,upper,nextword, +else, + prevword,markb,nextword,markk,lower,prevword,rtarw,markk,upper,ltarw, +endif + + Transpose characters +:def transpc psh,if,"arg>=0",then, + ltarw,markb,rtarw,markk,rtarw, + blkmove,rtarw, +else, + markk,ltarw,markb,ltarw,blkmove, + rtarw, +endif + + Transpose lines +:def transpl psh,if,"arg>=0",then, + uparw,bol,markb,dnarw,markk,dnarw, + blkmove,dnarw, +else, + bol,markk,uparw,markb,uparw,blkmove, + dnarw, +endif + + Transpose words +:def transpw psh,if,"arg>=0",then, + prevword,nextword,nextword,markk, + prevword,markb,setmark,":",prevword, + nextword,blkmove,markk,prevword, + markb,gomark,":",blkmove,nextword, +else, + prevword,nextword,markk, + prevword,markb,setmark,":",prevword, + nextword,blkmove,markk,prevword, + markb,gomark,":",blkmove,prevword,nextword, +endif + + Mark paragraph +:def markp eop-,bop-,markb,eop- + + Cut to character +:def cutc psh,drop,fwrdc-,query,markk,blkdel + + Append to file +:def appendtofile psh,markk,if,"markv",then,blksave,bol,">>",eol,query,else,save,bol,deleol,">>",query,endif + + Recenter +:def recenter retype,arg,"top+height/2-line",rtn,upslide + + Move to center line +:def midline arg,"top+height/2-line",rtn,dnarw + + Count lines in region +:def linesregn psh,markk,swap,math,"z=line",rtn,swap,math,"line-z",rtn,msg,math,"ans",rtn," lines in region",rtn + + Next error, force windows on screen +:def nxterrforce mwind,mfit,prevw,nxterr + + Prev error, force windows on screen +:def prverrforce mwind,mfit,prevw,prverr + + Go to next page or eof +:def nextpage ffirst," ",rtn,if,"!joe(\"bn\",rtn)",then,bof,msg,"Beginning of buffer",rtn,endif + + Go to previous page or bof +:def prevpage ffirst," ",rtn,if,"!joe(\"n\",rtn)",then,eof,msg,"End of buffer",rtn,endif + + Indent region +:def indentregion if,"markv",then,rindent-!,else,markk,rindent-!,endif + + Tags search other window +:def tagsother psh,nextword,prevword,markb,nextword,markk,copy, +ensure_other,prevw,tag," ",bol,deleol,yank,yankpop,query!,nextw + +markall ^X H +markall ^X h + +upcaseword ^[ u +upcaseword ^[ U + +dncaseword ^[ l +dncaseword ^[ L + +capword ^[ c +capword ^[ C + +psh,markk,lower ^X ^L Downcase region + +psh,markk,upper ^X ^U Upcase region + +transpc ^T Transpose chars + +transpl ^X ^T Transpose lines + +transpw ^[ t Transpose words +transpw ^[ T Transpose words + +markp ^[ h Mark paragraph +markp ^[ H Mark paragraph + +nextword-,prevword-,markb,nextword- ^[ @ Mark word + +"()",ltarw ^[ ( Insert () + + bol,insc,delw ^[ ^ Delete indentation +bol,insc,ltarw!,delw,if,"col != 1",then,insc,endif ^[ ^ Delete indentation + +psh,markk,copy,msg,"Region saved",rtn ^[ w Yank copy +psh,markk,copy,msg,"Region saved",rtn ^[ W Yank copy + +mode,"rmargin",rtn,"col",rtn, +msg,"Fill-column set",rtn ^X f Set right margin + +mode,"rmargin",rtn,"col",rtn, +msg,"Fill-column set",rtn ^X F Set right margin + +bol,rtn,backw,rtn,rtn,uparw,delw ^X ^O Delete blank lines + +" ",backw," ",insc,delw ^[ SP Just one space + +" ",backw,insc,delw ^[ \ Delete horizontal space + +stop,msg,"Abort",beep,rtn ^G Abort message + +stop,msg,"Abort",beep,rtn ^[ ^G Abort message + +stop,msg,"Abort",beep,rtn ^X ^G Abort message + +psh,markk,blkdel ^W Cut + +savenow ^X ^S Save file + +querysave ^X s + +querysave ^X S + +drop,msg,"Mark set",rtn ^@ Drop anchor + +ensure_other,nextw,pgdn-!,prevw ^[ ^V Scroll other window down + +ensure_other,nextw,pgup-!,prevw ^[ ^Z Scroll other window up + + bol,nedge,pedge ^[ m Gnu-emacs goto indentation + bol,nedge,pedge ^[ M Gnu-emacs goto indentation + (prefer ESC m to be math) + +ensure_other,nextw,nbuf-!,prevw ^X 4 b Switch buffers other window + +ensure_other,nextw,edit,query,prevw ^X 4 f Find file other window + +ensure_other,nextw,edit,query,prevw ^X 4 ^F + +tagsother ^X 4 . Tags search other windows + + +querysave,query,killjoe ^X ^C Query to save files, then exit + +lose,query ^X k Kill buffer in window + +lose,query ^X K Kill buffer in window + + lose,query,edit ^X ^V Edit a file: no orphaned buffers +reload ^X ^V Reload current file + +cutc ^[ z Cut to character +cutc ^[ Z Cut to character + +appendtofile ^X a +appendtofile ^X A + +recenter ^L Recenter + +midline ^[ r Move to center line +midline ^[ R + +linesregn ^[ = Count lines region + +mode,"rdonly",rtn ^X ^Q Toggle read-only + +compile ^X c Compile +compile ^X C Compile + +nxterrforce ^X n Next error +nxterrforce ^X N +nxterrforce ^X ` +prverrforce ^X p Previous error +prverrforce ^X P + +backs ^? Backspace +backs ^H +backw ^[ ^? Backspace word +backw ^[ ^H +bknd ^X ' Shell window (joe) +bof ^[ < Goto beginning of file +nextpage ^X [ Go to next page or eof + bof ^X [ +home .kh Goto beginning of line +home ^A +home ^[ [ H +home ^[ [ 1 ~ +bop ^[ p (uemacs) +bop ^[ P (uemacs) +bop ^[ { +bufed ^X ^B +bknd ^[ ' Shell window +crawlr ^X > Scroll to the right +crawll ^X < Scroll to the left +delch .kD Delete character +delch ^D +deleol ^K Delete to end of line +delw ^[ d Delete word +delw ^[ D Delete word +dnarw .kd Go down +dnarw ^N +dnarw ^[ O B +dnarw ^[ [ B + dnarw ^# B +dnslide ^X ^N Slide down (uemacs) +dnslide,dnslide,dnslide,dnslide MWDOWN +edit ^X ^F Edit a file: creates orphaned buffers + edit ^X d Should be dired, but maybe user wants to edit? +eof ^[ > Go to end of file + +prevpage ^X ] Go to next page or eof + + eof ^X ] +eol .kH Go to end of line +eol .@7 +eol ^E +eol ^[ [ F +eol ^[ [ 4 ~ +eop ^[ n (uemacs) +eop ^[ N (uemacs) +eop ^[ } +execmd ^[ x +execmd ^[ X +insc ^C (uemacs) + ffirst ^S Search forward +isrch ^S +ffirst ^\ +psh,markk,filt,query ^[ | Filter block +format ^[ q Format paragraph +format ^[ Q Format paragraph +gomark ^X / Goto bookmark +groww ^X ^ Enlarge window +groww ^X z (uemacs) +groww ^X Z (uemacs) +insf ^X i Insert a file +insf ^X I Insert a file +yapp ^[ ^W Append next kill +line ^[ g Goto line (uemacs) +line ^[ G Goto line (uemacs) +ltarw .kl Go left +ltarw ^B +ltarw ^[ O D +ltarw ^[ [ D +pbuf ^X .kl Go left +pbuf ^X ^[ O D +pbuf ^X ^[ [ D + ltarw ^# D + mode ^[ ^[ Change modes +menu,"root",rtn ^[ ^[ +nbuf ^X b Next buffer in current window (but it should prompt) +nbuf ^X B Next buffer in current window (but it should prompt) +nbuf ^X x (uemacs) +nbuf ^X X (uemacs) +nbuf ^X .kr +nbuf ^X ^[ O C +nbuf ^X ^[ [ C + nextpos ^K = Goto next position in position history +nextword ^[ f Goto next word +nextword ^[ F Goto next word +notmod ^[ ~ Not modified +open ^O Split line +open ^[ ^O + pbuf ^X b Previous buffer in current window + prevpos ^K - Goto previous position in position history +prevword ^[ b Previous word +prevword ^[ B Previous word +qrepl ^[ % Query replace + qrepl ^[ r Query replace (uemacs) +qrepl ^[ ^R Query replace (uemacs) +redo ^^ Redo changes + rfirst ^R Search backwards +rsrch ^R Incremental search backwards + +indentregion ^X ^I +indentregion ^[ ^\ + markk,rindent ^[ ^\ +rtarw .kr Go right +rtarw ^F +rtarw ^[ O C +rtarw ^[ [ C + rtarw ^# C +run ^[ ! +save ^X ^W Write file +setmark ^X j Set bookmark +setmark ^X J Set bookmark +shrinkw ^X ^Z (uemacs) +splitw ^X 2 Split window +stat ^X l Gnu-Emacs Show status +stat ^X L Gnu-Emacs Show status +stat ^X ? JED +stat ^X = Gnu-Emacs +swap ^X ^X Swap mark and cursor +tag ^[ . Tag search +tagjump ^[ , Jump to next match +tomatch ^X g Goto matching parenthasis (joe) +tomatch ^X G Goto matching parenthasis (joe) +tomatch ^[ ^F (uemacs) +txt ^X t Prompt for text to insert +txt ^X T Prompt for text to insert +undo ^_ Undo changes +undo ^X u +undo ^X U +uparw .ku Go up +uparw ^P +uparw ^[ O A +uparw ^[ [ A + uparw ^# A +upslide ^X ^P Slide up (uemacs) +upslide,upslide,upslide,upslide MWUP +yank ^Y Yank deleted text +yankpop ^[ y Yank-pop +yankpop ^[ Y Yank-pop +shell1 ^[ [ 1 1 ~ +shell1 ^[ O P +shell1 ^[ [ [ A +shell1 .k1 +shell2 ^[ [ 1 2 ~ +shell2 ^[ O Q +shell2 ^[ [ [ B +shell2 .k2 +shell3 ^[ [ 1 3 ~ +shell3 ^[ O R +shell3 ^[ [ [ C +shell3 .k3 +shell4 ^[ [ 1 4 ~ +shell4 ^[ O S +shell4 ^[ [ [ D +shell4 .k4 + +:prompt Prompt windows +:inherit main +abort ^G +abort ^C +complete ^I +dnarw,eol .kd Go down +dnarw,eol ^N +dnarw,eol ^[ O B +dnarw,eol ^[ [ B + dnarw,eol ^# B +uparw,eol .ku Go up + uparw,eol ^# A +uparw,eol ^P +uparw,eol ^[ O A +uparw,eol ^[ [ A + +:menu Selection menus +:inherit windows + +pgupmenu ^[ [ I + +pgdnmenu ^[ [ G + +bolmenu ^[ [ 1 ~ Putty, Linux, Cygwin +bolmenu ^[ [ H Xterm, Konsole +bolmenu ^[ O H gnome-terminal +bolmenu ^[ [ 7 ~ RxVT + bolmenu ^# SP A Amiga + +eolmenu ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eolmenu ^[ [ F Xterm, Konsole +eolmenu ^[ O F gnome-terminal +eolmenu ^[ [ 8 ~ RxVT + eolmenu ^# SP @ Amiga + +abort ^[ ^[ +backsmenu ^? +backsmenu ^H +bofmenu ^K U +bofmenu ^K ^U +bofmenu ^K u +bolmenu .kh +bolmenu ^A +dnarwmenu .kd +dnarwmenu ^N +dnarwmenu ^[ [ B + dnarwmenu ^# B +dnarwmenu ^[ O B +eofmenu ^K V +eofmenu ^K ^V +eofmenu ^K v +eolmenu .kH +eolmenu ^E +ltarwmenu .kl +ltarwmenu ^B +ltarwmenu ^[ [ D +ltarwmenu ^[ O D + ltarwmenu ^# D +pgdnmenu .kN Screen down +pgdnmenu ^V +pgdnmenu ^[ [ 6 ~ + pgdnmenu ^# S +pgupmenu .kP Screen up +pgupmenu ^[ v +pgupmenu ^[ V +pgupmenu ^[ [ 5 ~ + pgupmenu ^# T +rtarwmenu .kr +rtarwmenu ^F +rtarwmenu ^[ [ C + rtarwmenu ^# C +rtarwmenu ^[ O C +rtn SP +rtn ^I +rtn ^X H +rtn ^X h +rtn ^X ^H +tabmenu ^I +uparwmenu .ku +uparwmenu ^P +uparwmenu ^[ [ A + uparwmenu ^# A +uparwmenu ^[ O A +defm2down M2DOWN Hits return key + +:querysr Search & replace query window +type U+0 TO U+10FFFF + +:query Single-key query window +:inherit windows + +:querya Single-key query window for quoting +type U+0 TO U+10FFFF + +:shell Input to shell windows +:inherit main +"" ^C Abort +"" ^D Eof +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace + +:vtshell Input to ANSI shell windows +:inherit main +""  [ A +"" .ku +""  [ B +"" .kd +""  [ C +"" .kr +""  [ D +"" .kl +"" ^A BOL for bash +"" ^C Abort +"" ^D Eof +"" ^E EOL for bash +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace diff --git a/joe/etc/joe/joerc b/joe/etc/joe/joerc new file mode 100644 index 0000000..d096fb5 --- /dev/null +++ b/joe/etc/joe/joerc @@ -0,0 +1,1308 @@ + Initialization file for JOE + Standard Joe + + JOE looks for this file in: + 1 - $HOME/.joerc + 2 - /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc + + This file can include other files by placing the following include command + in the first column: + + :include filename + + FIRST SECTION: Default global options (these options can also be specified + on the command line. Also the NOXON, LINES, COLUMNS, DOPADDING and BAUD + options can be specified in environment variables): + + Put each option you want set in the first column: + + -option Sets the option + --option Clears the option + + -help_is_utf8 Set if help text is in UTF-8 format. Leave clear if it's a raw 8-bit format. + + -mid Cursor is recentered when scrolling is necessary + -left nn Amount to jump left when scrolling is necessary (-1 for 1/4 width) + -right nn Amount to jump right when scrolling is necessary (-1 for 1/4 width) + + -marking Text between ^KB and cursor is highlighted (use with -lightoff) + + -asis Characters 128 - 255 shown as-is + + -force Force final newline when files are saved + + -nolocks If you don't want file locks to be used + + -nomodcheck Disable periodic checking of disk file newer than buffer + (this checking happens on save even with this option). + + -nocurdir Do not prompt with current directory + + -nobackups If you don't want backup files to be created + + -nodeadjoe If you don't want DEADJOE files to be created + + -break_hardlinks + Delete file before writing, to break hard links + (but don't break symbolic links). + + -break_links + Delete file before writing, to break hard links + and symbolic links. + + + -lightoff Turn off highlighting after block copy or move + + -exask ^KX always confirms file name + + -beep Beep on errors and when cursor goes past extremes + + -nosta Disable top-most status line + +-keepup %k and %c status line escape sequences updated frequently + + -pg nnn No. lines to keep for PgUp/PgDn + + -undo_keep nnn Number of undo records to keep. 0 for infinite. + + -csmode ^KF after a pervious search does a ^L instead + + -backpath path + Directory to store backup files (one space between + 'backpath' and the 'path', no trailing spaces or comments + after the path). + + -floatmouse Clicking past end of line moves the cursor past the end + + -rtbutton Use the right mouse button for action, instead of the left + + -nonotice Disable copyright notice + + -noexmsg Disable exiting message ("File not changed so no update needed") + +-noxon Attempt to turn off ^S/^Q processing + + -orphan Put extra files given on command line in orphaned buffers + instead of in windows + + -dopadding Output pad characters (for when there is no tty handshaking) + + -lines nnn Set no. screen lines + + -baud nnn Set baud rate for terminal optimizations + + -columns nnn Set no. screen columns + + -helpon Start with help on + + -skiptop nnn Don't use top nnn lines of the screen + +-notite Don't send terminal initialization and termination strings: + prevents restoration of screen on exit. + + -nolinefeeds Prevent sending linefeeds to preserve screen history in terminal + emulator's scroll-back buffer. + + -usetabs Use tabs to help optimize screen update. + +-assume_color Assume terminal has ANSI color support even if termcap/terminfo entry + says that it doesn't. This only applies if the terminal otherwise + looks like an ANSI terminal (support bold and capability starts with + ESC [). + +-assume_256color + Assume terminal has xterm 256 color support (ESC [ 38 ; 5 ; NNN m and + ESC [ 48 ; 5 ; NNN m). + +-guess_non_utf8 Allow guess of non-UTF-8 file encoding in a UTF-8 locale. + + -guess_utf8 Allow guess of UTF-8 file encoding in non-UTF-8 locale. + +-guess_utf16 Allow guess of UTF-16 encoding + +-guess_crlf Automatically detect MS-DOS files and set -crlf appropriately + +-guess_indent Guess indent character (tab or space). + +-menu_above Position menu/list above prompt when enabled. Otherwise position + below prompt. + +-transpose Transpose rows with columns in all menus. + + -menu_explorer Stay in menu system when a directory is selected (otherwise + directory is added to path and menu is closed). + + -menu_jump Jump into file selection menu when tab is hit (otherwise, menu + comes up, but cursor stays in file name prompt). + + -notagsmenu Disable tags file search menu + + -icase Search is case insensitive by default. + + -wrap Search wraps + + -autoswap Swap markb with markk when necessary + +-joe_state Use ~/.joe_state file + + -mouse Enable xterm mouse support. When enabled, left-click will + position the cursor and left-click-drag will select blocks + For normal xterm cut and paste, hold the shift key down. + + -joexterm If you are using XTerm version 212 or higher, and if it was + configured with --enable-paste64, set this flag: it allows + mouse cut & paste to work properly (text selected with the + mouse can be pasted into other application, and middle + button clicks paste into JOE). + +-brpaste When JOE starts, send command to the terminal emulator that + enables "bracketed paste mode" (but only if the terminal + seems to have the ANSI command set). In this mode, text + pasted into the window is bracketed with ESC [ 2 0 0 ~ and + ESC [ 2 0 1 ~. + +-pastehack If keyboard input comes in as one block assume it's a mouse + paste and disable autoindent and wordwrap. + + -square Rectangular block mode + + -colors scheme + Set the default color scheme + +-restore Restore previous cursor position when files are opened + +-search_prompting + Search prompts with previous search request. + + -regex Search uses standard regular expression format (otherwise it uses + JOE format where all special characters have to be escaped). + + Status line definition strings. -lmsg defines the left-justified string and + -rmsg defines the right-justified string. The first character of -rmsg is + the background fill character. The following escape sequences can be used + in these strings: + + %t 12 hour time + %u 24 hour time + %T O for overtype mode, I for insert mode + %W W if wordwrap is enabled + %I A if autoindent is enabled + %X Rectangle mode indicator + %n File name + %m '(Modified)' if file has been changed + %* '*' if file has been changed + %R Read-only indicator + %r Row (line) number + %c Column number + %o Byte offset into file + %O Byte offset into file in hex + %a Ascii value of character under cursor + %A Ascii value of character under cursor in hex + %w Width of character under cursor + %p Percent of file cursor is at + %l No. lines in file + %k Entered prefix keys + %S '*SHELL*' if there is a shell running in window + %M Macro recording message + %y Syntax + %e Encoding of file + %b Encoding of terminal + %x Context (first non-indented line going backwards) + %dd day + %dm month + %dY year + %Ename% value of environment variable + %Zname% value of option (ON or OFF for boolean options) + (hit TAB at mode command prompt for full list) + + These formatting escape sequences may also be given: + + \i Inverse + \u Underline + \b Bold + \d Dim + \f Blink + \l Italic + +-lmsg \i%k%T%W%I%X %n %m%y%R %M %x +-rmsg %S Row %4r Col %3c +-smsg ** Line %r Col %c Offset %o(0x%O) %e %a(0x%A) Width %w ** +-zmsg ** Line %r Col %c Offset %o(0x%O) ** +-xmsg \i Joe's Own Editor %v (%b) ** Type \bCtrl-K Q\b to exit or \bCtrl-K H\b for help **\i + + Key sequence hints which are displayed in various prompts. +-aborthint ^C +-helphint ^K H + + SECOND SECTION: File name dependant local option settings: + + Name a file type definition section with: + + [python] (but put opening bracket in first column) + + Each line with '*' in the first column provides a file name matching + regular expression (in shell glob format). If more than one regular + expression matches the file name, then the last matching one is chosen. + + A file contents regular expression may also be specified on a separate line + with '+regex'. If this regular expresssion is given, then both the file name + regex and the file contents regex must match for the options to apply. + + Here are the modes which can be set: + + -cpara >#!;*/% + Characters which can indent paragraphs. + + -cnotpara . + Characters which begin non-paragraph lines. + + -encoding name + Set file coding (for example: utf-8, iso-8859-15) + + -syntax name + Specify syntax (syntax file called + 'name.jsf' will be loaded) + + -hex Hex editor mode + + -highlight Enable highlighting + + -smarthome Home key first moves cursor to beginning of line, + then if hit again, to first non-blank character. + + -indentfirst Smart home goes to first non-blank character first, + instead of going the beginning of line first. + + -smartbacks Backspace key deletes 'istep' number of + 'indentc's if cursor is at first non-space + character. + + -tab nnn Tab width + + -indentc nnn Indentation character (32 for space, 9 for tab) + + -istep nnn Number of indentation columns + + -spaces TAB inserts spaces instead of tabs. + + -purify Fix indentation if necessary for rindent, lindent and backs + (for example if indentation uses a mix of tabs and spaces, + and indentc is space, indentation will be converted to all + spaces). + + -crlf File uses CR-LF at ends of lines + + -wordwrap Wordwrap + + -nobackup If you don't want backup file to be created + + -autoindent Auto indent + + -overwrite Overtype mode + + -picture Picture mode (right arrow can go past end of lines) + + -lmargin nnn Left margin + + -rmargin nnn Right margin + + -flowed Put one space after intermediate paragraph lines + for support of flowed text. + + + -french One space after '.', '?' and '!' for wordwrap + and paragraph reformat instead of two. Joe + does not change the spacing you give, but + sometimes it must put spacing in itself. This + selects how much is inserted. + + -linums Enable line numbers on each line + + -hiline Highlight current line + + -rdonly File is read-only + + -keymap name + Keymap to use if not 'main' + + -lmsg Status line definition strings- + -rmsg see previous section for more info. + + -mfirst macro + Macro to execute on first modification + -mnew macro + Macro to execute when new files are loaded + -mold macro + Macro to execute when existing files are loaded + -msnew macro + Macro to execute when new files are saved + -msold macro + Macro to execute when existing files are saved + + Macros for the above options are in the same format as in the key + binding section below- but without the key name strings. + + These define the language syntax for ^G (goto matching delimiter): + + -highlighter_context Use the highlighter context for ^G + + -single_quoted Text between ' ' should be ignored (this is + not good for regular text since ' is + normally used alone as an apostrophe) + + -no_double_quoted Text between " " should not be ignored (useful + for TeX). + + -c_comment Text between /* */ should be ignored + + -cpp_comment Text after // should be ignored + + -pound_comment Text after # should be ignored + + -vhdl_comment Text after -- should be ignored + + -semi_comment Text after ; should be ignored + + -text_delimiters begin=end:if=elif=else=endif + + Define word delimiters + + Default local options +-highlight +-istep 4 + + Perforce macro: use this macro (put in first column) to have joe "p4 edit" + a file you're about to change. + + -mfirst if,"rdonly && joe(sys,\"p4 edit \",name,rtn)",then,mode,"o",msg,"executed \"p4 edit ",name,"\"",rtn,endif + + -mfirst if,"rdonly && joe(sys,\"p4 edit \",name,rtn)",then,reload,msg,"executed \"p4 edit ",name,"\"",rtn,endif + + File type table is now in a separate file. You can copy this file to ~/.joe and customize it. + +:include ftyperc + + SECOND and 1/2 SECTION: Option menu layout + + :defmenu name [macro] + Defines a menu. + The macro here is executed when the user hits backspace. + + macro string comment + A menu entry. Macro is any JOE macro- see "Macros:" + below. String is the label to be used for the macro + in the menu. It is in the same format as the -lmsg + and -rmsg options above. + + Two whitespace characters in a row begins a comment. + Use '% ' for a leading space in the string. + +:defmenu root +mode,"overwrite",rtn T Overtype %Zoverwrite% +mode,"hex",rtn ' Hex edit mode +mode,"autoindent",rtn I Autoindent %Zautoindent% +mode,"wordwrap",rtn W Word wrap %Zwordwrap% +mode,"tab",rtn D Tab width %Ztab% +mode,"lmargin",rtn L Left margin %Zlmargin% +mode,"rmargin",rtn R Right margin %Zrmargin% +mode,"square",rtn X Column mode %Zsquare% +mode,"indentc",rtn % % Indent char %Zindentc% +mode,"istep",rtn % % Indent step %Zistep% +menu,"indent",rtn = Indent select +mode,"highlight",rtn H Highlighting %Zhighlight% +mode,"crlf",rtn Z CR-LF/MS-DOS %Zcrlf% +mode,"linums",rtn N Line numbers %Zlinums% +mode,"hiline",rtn U Highlight line %Zhiline% +mode,"beep",rtn B Beep %Zbeep% +mode,"rdonly",rtn O Read only %Zrdonly% +mode,"syntax",rtn Y Syntax +mode,"colors",rtn S Color scheme +mode,"encoding",rtn E Encoding +mode,"asis",rtn % % Meta chars as-is +mode,"language",rtn V Language +mode,"picture",rtn P picture %Zpicture% +mode,"type",rtn F File type [%Ztype%] +mode,"title",rtn C Context %Ztitle% +menu,"more-options",rtn % % More options... + +:defmenu more-options menu,"root",rtn +menu,"^G",rtn % % ^G options +menu,"search",rtn % % search options +menu,"paragraph",rtn % % paragraph options +menu,"file",rtn % % file options +menu,"menu",rtn % % menu options +menu,"global",rtn % % global options +menu,"cursor",rtn % % cursor options +menu,"marking",rtn % % marking options +menu,"tab",rtn % % tab/indent options + +:defmenu indent menu,"root",rtn +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 1, Indent character = 32",rtn 1 Space +mode,"istep",rtn,"2",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 2, Indent character = 32",rtn 2 Spaces +mode,"istep",rtn,"3",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 3, Indent character = 32",rtn 3 Spaces +mode,"istep",rtn,"4",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 4, Indent character = 32",rtn 4 Spaces +mode,"istep",rtn,"5",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 5, Indent character = 32",rtn 5 Spaces +mode,"istep",rtn,"8",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 8, Indent character = 32",rtn 8 Spaces +mode,"istep",rtn,"10",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 10, Indent character = 32",rtn 0 Ten +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"9",rtn,msg,"Indent step = 1, Indent character = 9",rtn T Tab + +:defmenu menu menu,"more-options",rtn +mode,"menu_explorer",rtn % % Menu explorer %Zmenu_explorer% +mode,"menu_above",rtn % % Menu position %Zmenu_above% +mode,"menu_jump",rtn % % Jump into menu %Zmenu_jump% +mode,"transpose",rtn % % Transpose menus %Ztranspose% + +:defmenu ^G menu,"more-options",rtn +mode,"highlighter_context",rtn % % ^G uses highlighter context %Zhighlighter_context% +mode,"single_quoted",rtn % % ^G ignores '...' %Zsingle_quoted% +mode,"no_double_quoted",rtn % % ^G no ignore "..." %Zno_double_quoted% +mode,"c_comment",rtn % % ^G ignores /*...*/ %Zc_comment% +mode,"cpp_comment",rtn % % ^G ignores //... %Zcpp_comment% +mode,"pound_comment",rtn % % ^G ignores #... %Zpound_comment% +mode,"vhdl_comment",rtn % % ^G ignores --... %Zvhdl_comment% +mode,"semi_comment",rtn % % ^G ignores ;... %Zsemi_comment% +mode,"tex_comment",rtn % % ^G ignores %%... %Ztex_comment% +mode,"text_delimiters",rtn % % Text delimiters %Ztext_delimiters% + +:defmenu search menu,"more-options",rtn +mode,"icase",rtn % % Case insensitivity %Zicase% +mode,"wrap",rtn % % Search wraps %Zwrap% +mode,"search_prompting",rtn % % Search prompting %Zsearch_prompting% +mode,"csmode",rtn % % Continued search %Zcsmode% + +:defmenu paragraph menu,"more-options",rtn +mode,"french",rtn % % French spacing %Zfrench% +mode,"flowed",rtn % % Flowed text %Zflowed% +mode,"cpara",rtn % % Paragraph indent chars %Zcpara% +mode,"cnotpara",rtn % % Not-paragraph chars %Zcnotpara% + +:defmenu file menu,"more-options",rtn +mode,"restore",rtn % % Restore cursor %Zrestore% +mode,"guess_crlf",rtn % % Auto detect CR-LF %Zguess_crlf% +mode,"guess_indent",rtn % % Guess indent %Zguess_indent% +mode,"guess_non_utf8",rtn % % Guess non-UTF-8 %Zguess_non_utf8% +mode,"guess_utf8",rtn % % Guess UTF-8 %Zguess_utf8% +mode,"guess_utf16",rtn % % Guess UTF-16 %Zguess_utf16% +mode,"force",rtn % % Force last NL %Zforce% +mode,"nobackup",rtn % % No backup %Znobackup% + +:defmenu global menu,"more-options",rtn +mode,"nolocks",rtn % % Disable locks %Znolocks% +mode,"nobackups",rtn % % Disable backups %Znobackups% +mode,"nodeadjoe",rtn % % Disable DEADJOE %Znodeadjoe% +mode,"nomodcheck",rtn % % Disable mtime check %Znomodcheck% +mode,"nocurdir",rtn % % Disable current dir %Znocurdir% +mode,"exask",rtn % % Exit ask %Zexask% +mode,"nosta",rtn % % Disable status line %Znosta% +mode,"keepup",rtn % % Fast status line %Zkeepup% +mode,"break_hardlinks",rtn % % Break hard links %Zbreak_hardlinks% +mode,"break_links",rtn % % Break links %Zbreak_links% +mode,"joe_state",rtn % % Joe_state file %Zjoe_state% +mode,"undo_keep",rtn % % No. undo records %Zundo_keep% +mode,"backpath",rtn % % Path to backup files %Zbackpath% + +:defmenu cursor menu,"more-options",rtn +mode,"pg",rtn % % No. PgUp/PgDn lines %Zpg% +mode,"mid",rtn C Center on scroll %Zmid% +mode,"left",rtn L Columns to scroll left %Zleft% +mode,"right",rtn R Columns to scroll right %Zright% +mode,"floatmouse",rtn % % Click past end %Zfloatmouse% +mode,"rtbutton",rtn % % Right button %Zrtbutton% + +:defmenu marking menu,"more-options",rtn +mode,"autoswap",rtn % % Autoswap mode %Zautoswap% +mode,"marking",rtn % % Marking %Zmarking% +mode,"lightoff",rtn % % Auto unmask %Zlightoff% + +:defmenu tab menu,"more-options",rtn +mode,"smarthome",rtn % % Smart home key %Zsmarthome% +mode,"smartbacks",rtn % % Smart backspace %Zsmartbacks% +mode,"indentfirst",rtn % % To indent first %Zindentfirst% +mode,"purify",rtn % % Clean up indents %Zpurify% +mode,"spaces",rtn % % No tabs %Zspaces% + + THIRD SECTION: Named help screens: + + Use \i to turn on/off inverse video + Use \u to turn on/off underline + Use \b to turn on/off bold + Use \d to turn on/off dim + Use \f to turn on/off flash + Use \l to turn on/off italic + + Use \| to insert a spring: all springs in a given line are set to the same + width such that the entire line exactly fits in the width of the screen (if + it's not an exact multiple so that there are N spaces remaining, the + rightmost N springs each get one extra space). Hint: if you want vertical + alignment, each line should have the same number of springs. + + Use the '-help_is_utf8' global option to allow UTF-8 sequences in the help + text. Otherwise, the locale 8-bit character set is assumed. + +{Basic + \|\uREGION\u \|\uGO TO\u \|\uGO TO\u \|\uDELETE\u \|\uEXIT\u \|\uSEARCH\u \| + \|\b^Arrow\b Select \|\b^Z\b Prev. word \|\b^U/^V\b PgUp/PgDn \|\b^D\b Char. \|\b^KX\b Save \|\b^KF\b Find \| + \|\b^KB\b Begin \|\b^X\b Next word \|\uMISC\u \|\b^Y\b Line \|\b^C\b Abort \|\b^L\b Next \| + \|\b^KK\b End \|\b^KU\b Top of file \|\b^KJ\b Paragraph \|\b^W\b >Word \|\b^KQ\b All \|\uHELP\u \| + \|\b^KC\b Copy \|\b^KV\b End of file \|\b^KA\b Center line \|\b^O\b Word< \|\uFILE\u \|\bEsc .\b Next\| + \|\b^KM\b Move \|\b^A\b Beg. of line \|\b^K Space\b Status \|\b^J\b >Line \|\b^KE\b Edit \|\bEsc ,\b Prev\| + \|\b^KW\b File \|\b^E\b End of line \|\uSPELL\u \|\b^[O\b Line< \|\b^KR\b Insert \|\b^KH\b Off \| + \|\b^KY\b Delete \|\b^KL\b To line no. \|\bEsc N\b Word \|\b^_\b Undo \|\b^KD\b Save \|\b^T\b Menu \| + \|\b^K/\b Filter \|\b^G\b Matching ( \|\bEsc L\b File \|\b^^\b Redo \|\b^K`\b Revert \|\b\b \| +} + +{Advanced + \|\uMACROS\u \|\uSCROLL\u \|\uWINDOW\u \|\uGO TO\u \|\uI-SEARCH\u \| + \|\b^K[ 0-9\b Record \|\bEsc W\b Up \|\b^KO\b Open \b^C\b Close \|\bEsc B\b / \bK\b \|\b^R\b Backwards \| + \|\b^K]\b Stop \|\bEsc Z\b Down \|\b^KG\b Grow \b^KT\b Shrink \|to \b^KB\b/\b^KK \b\|\b^S\b Forwards \| + \|\bEsc I\b Text \|\bEsc <\b Left \|\b^KN\b Next \b^KP\b Prev. \|\b^P\b Up \|\uBOOKMARKS\u \| + \|\b^K?\b Pause \|\bEsc >\b Right \|\b^KI\b Show one / All \|\b^N\b Down \|\bEsc 0-9\b Goto \| + \| for prompt \|\uINSERT\u \|\uSHELL\u \|\b^B\b Left \|\bEsc Esc\b Set \| + \|\b^K 0-9\b Play \|\b^]\b Line \b^Q\b Ctrl \|\bF1-F4\b Term emulator \|\b^F\b Right \|\b^K-\b Auto prev\| + \|\b^K\\\b Repeat \|\b^@\b Space \b^\\\b Meta \|\b^K'\b In buffer \| \|\b^K=\b Auto next\| + \|\bEsc D\b Dump \|\bEsc Y\b Paste \|\b^KZ\b Suspend \bEsc !\b Append \| \| \| +} + +{Programs + \|\uCOMMANDS\u \|\uCOMPILING\u \|\uQUICK\u \| + \|\bEsc X\b Command prompt\|\bEsc C\b Save modified compile\|\b^G\b Find word under cursor \| + \|\bEsc M\b Calculator \|\bEsc G\b Grep \|\b^K;\b Tags file search \| + \|\bshowlog\b Startup log \|\bEsc =\b To next error \|\bEsc Enter\b Complete word \| + \|\bupper\b Change case \|\bEsc -\b To prev. error \|\uBUFFER\u \| + \|\blower\b Change case \|\bEsc Space\b Jump to error \|\bEsc U\b Next \| + \|\bcd\b Change dir \|\uINDENT\u \|\bEsc V\b Previous \| + \|\bkeymap\b Change map \|\b^K,\b Less \|\bEsc X bufed\b Switch \| + \| \|\b^K.\b More \| \| +} + + Missing: Esc ~ not mod + Esc e parse errors in buffer + Esc ^Y yank pop + +{Search + Search sequences: \| + \b\\^ \\$\b matches beg./end of line \b\\.\b match any single char \| + \b\\< \\>\b matches beg./end of word \b\\!\b match char or expression \| + \b\\( \\)\b grouping \b\\|\b match left or right \| + \b\\[a-z]\b matches one of a set \b\\y \\Y\b short for (.*) / (!*) \| + \b\\{1,3}\b match 1 - 3 occurrences \b\\?\b match 0 or 1 occurrence \| + \b\\+\b match 1 or more occurrences \b\\*\b match 0 or more occurrences \| + \| + \b^C\b to abort \bEsc .\b to list of escape sequences \| +} + +{Escape sequences + Escape sequences: \| + \b\\x{10fff}\b Unicode code point \b\\p{Ll}\b Unicode category \| + \b\\i\b / \b\\I\b Identifier start \b\\t\b tab \b\\e\b escape \| + \b\\c\b / \b\\C\b Identifier continue \b\\n\b newline \b\\r\b carriage return \| + \b\\d\b / \b\\D\b Digit / Not a digit \b\\b\b backspace \b\\xFF\b hex character \| + \b\\w\b / \b\\W\b Word / Not a word \b\\a\b alert \b\\377\b octal character \| + \b\\s\b / \b\\S\b Space / Not a space \b\\f\b formfeed \b\\\\\b backslash \| + \| + \| +} + +{Replace + Replace sequences: \| + \b\\&\b replaced with entire match \b\\1\b - \b9\b replaced with Nth group \| + \b\\u \\l\b convert next to upper/lower \b\\U \\L\b case convert until \b\\E\b \| + \| + \| + \| + \| + \| + \b^C\b to abort \bEsc ,\b to list of escape sequences \| +} + +{SearchOptions + Search options: \| + \br\b Replace \bk\b Restrict search to highlighted block \| + \bi\b Ignore case \bb\b Search backwards instead of forwards \| + \ba\b Search across all loaded files \| + \be\b Search across all files in Grep or Compile error list \| + \bw\b / \bn\b Allow / prevent wrap to start of file \| + \bx\b / \by\b Search text is standard format / JOE format regular expression \| + \bnnn\b Perform exactly nnn replacements \| + \b^C\b to abort +} + +{Math + \uMATH COMMANDS\u \uCONSTANTS\u \| + \bhex oct bin\b display mode \b0xff\b hex entry \| + \beng dec\b engineering / normal \b0o77\b octal entry \| + \bins\b type result into file \b0b11\b binary entry \| + \beval\b evaluate block \b3e-4\b floating point entry \| + 2+3\b:\bins multiple commands \uVARIABLES\u \| + \uOPERATORS\u \bans\b Previous result \| + \b! ^ * / % + -\b \ba=10\b Assign a variable \| + \b< <= > >= == != && || ? :\b \bEsc .\b for list of functions \| +} + +{Functions + \uFUNCTIONS\u \uCONSTANTS\u \| + \bsin cos tab asin acos atan\b \be pi\b \| + \bsinh cosh tanh asinh acosh atanh\b \| + \bsqrt cbrt exp ln log\b \| + \bint floor ceil abs\b \| + \berf erfc j0 j1 y0 y1\b \| + \bjoe(..macro..)\b - runs an editor macro \| + \| + \bEsc .\b for statistics \| +} + +{Statistics + \uMATH COMMANDS\u \| + Statistics on region of numbers Linear regression on region of x y pairs \| + \bsum\b Sum \blr(x)\b Estimate y given x y=m*x+b \| + \bcnt\b Count \brlr(y)\b Estimate x given y \| + \bavg\b Mean \bLr rLr\b Logarithmic regression y=m*ln(x)+b \| + Standard deviation: \blR rlR\b Exponential regression y=e^(m*x)+b \| + \bdev\b all data present \bLR rLR\b Power regression y=b*x^m \| + \bsamp\b sample of data present Side effects: \bb\b, \bm\b: regression coef. \| + \br\b: correlation coef., \bcov\b: covariance \| +} + +{Names + Hit TAB to complete names. Use up / down arrow keys to traverse history. \| + Special file names: \| + \b!\bcommand Pipe in/out of a shell command \| + \b>>\bfilename Append to a file \| + \b-\b Read/Write to/from standard I/O \| + filename\b,START,SIZE\b Read/Write a part of a file/device \| + Give START/SIZE in decimal (255), octal (0377) or hex (0xFF) \| + \b\\,\b Use backslash to quote special characters \| + \b^C\b to abort +} + +{CharTable + \| Dec \u 0123 4567 8901 2345 0123 4567 8901 2345 \u Dec \| + \| 0 | \u@ABC\u \uDEFG\u \uHIJK\u \uLMNO\u \i\u@ABC\u\i \i\uDEFG\u\i \i\uHIJK\u\i \i\uLMNO\u\i | 128 \| + \| 16 | \uPQRS\u \uTUVW\u \uXYZ[\u \u\\]^_\u \i\uPQRS\u\i \i\uTUVW\u\i \i\uXYZ[\u\i \i\u\\]^_\u\i | 144 \| + \| 32 | !"# $%&' ()*+ ,-./ ═║╒ё ╓╔╕╖ ╗╘╙╚ ╛X╝╞ | 160 \| + \| 48 | 0123 4567 89:; <=>? ╟╠╡Ё ╢╣╤╥ ╦╧╨╩ ╪╫╬© | 176 \| + \| 64 | @ABC DEFG HIJK LMNO юабц дефг хийк лмно | 192 \| + \| 80 | PQRS TUVW XYZ[ \\]^_ пярс тужв ьызш эщчъ | 208 \| + \| 96 | `abc defg hijk lmno ЮАБЦ ДЕФГ ХИЙК ЛМНО | 224 \| + \| 112 | pqrs tuvw xyz{ |}~ ПЯРС ТУЖВ ЬЫЗШ ЭЩЧЪ | 240 \| +} + +{Joe + Send bug reports to: http://sourceforge.net/projects/joe-editor \| + \| + default joerc file is here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc \| + default syntax and i18n files are here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/joe \| + additional documentation can be found here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/doc/joe \| + \| + \| + \| + \| +} + + FOURTH SECTION: Key bindings: + + Section names you must provide: + + :main For editing window + :prompt For prompt lines + :query For single-character query lines + :querya Singe-character query for quote + :querysr Search & Replace single-character query + :shell For shell windows + :vtshell For terminal emulator windows + + Other sections may be given as well for organization purposes or for + use with the '-keymap' option. + + Use: + :inherit name To copy the named section into the current one + :delete key To delete a key sequence from the current section + + Keys: + + Use U+12345 for specific unicode character + Use ^@ through ^_ and ^? for Ctrl chars + Use SP for space + Use a TO b to generate a range of characters + Use MDOWN, MDRAG, MUP, M2DOWN, M2DRAG, M2UP, M3DOWN, M3DRAG, M3UP for mouse + Use MWDOWN, MWUP for wheel mouse motion + Use ^# for 0x9B (for Amiga). But warning: this breaks UTF-8 keyboards. + + You can also use termcap string capability names. For example: + + .ku Up + .kd Down + .kl Left + .kr Right + .kh Home + .kH End + .kI Insert + .kD Delete + .kP PgUp + .kN PgDn + .k1 - .k9 F1 - F9 + .k0 F0 or F10 + .k; F10 + + Macros: + + Simple macros can be made by comma seperating 2 or more command names. For + example: + + eof,bol ^T Z Goto beginning of last line + + Also quoted matter is typed in literally: + + bol,">",dnarw .k1 Quote news article line + + Macros may cross lines if they end with , + + Commands or named macros may be created with :def. For example, you can + use: + + :def foo eof,bol + + To define a command foo which will goto the beginning of the last line. + + Recenter +:def recenter retype,arg,"top+height/2-line",rtn,upslide + +:windows Bindings common to all windows +type U+0 TO U+10FFFF +abort ^C Abort window + abort ^K Q + abort ^K ^Q + abort ^K q +querysave,query,killjoe ^K Q Query to save files, then exit +querysave,query,killjoe ^K ^Q +querysave,query,killjoe ^K q +arg ^K \ Repeat next command +explode ^K I Show all windows or show only one window +explode ^K ^I +explode ^K i +help ^K H Help menu +help ^K ^H +help ^K h +hnext ^[ . Next help window +hprev ^[ , Previous help window +math ^[ m Calculator +math ^[ M Calculator + math ^[ ^M Calculator +msg ^[ h Display a message +msg ^[ H Display a message +msg ^[ ^H Display a message +nextw ^K N Goto next window +nextw ^K ^N +nextw ^K n +pgdn .kN Screen down +pgdn ^V +pgdn ^[ [ 6 ~ + pgdn ^# S +pgup .kP Screen up +pgup ^U +pgup ^[ [ 5 ~ + pgup ^# T +play ^K 0 TO 9 Execute macro +prevw ^K P Goto previous window +prevw ^K ^P +prevw ^K p +query ^K ? Macro query insert +record ^K [ Record a macro + retype ^R Refresh screen + recenter ^R Recenter and refresh screen +rtn ^M Return +shell ^K Z Shell escape +shell ^K ^Z +shell ^K z +stop ^K ] Stop recording + Mouse handling +defmdown MDOWN Move the cursor to the mouse location +defmup MUP +defmdrag MDRAG Select a region of characters +defm2down M2DOWN Select the word at the mouse location +defm2up M2UP +defm2drag M2DRAG Select a region of words +defm3down M3DOWN Select the line at the mouse location +defm3up M3UP +defm3drag M3DRAG Select a region of lines +defmiddleup MIDDLEUP +defmiddledown MIDDLEDOWN Insert text + +xtmouse ^[ [ M Introduces an xterm mouse event +extmouse ^[ [ < Introduces an extended xterm mouse event + + Sample if/then/else macro + if,"char==65",then,"it's an A",else,"it's not an a",endif ^[ q + +:main Text editing window +:inherit windows + + Spell-check macros + + Ispell +:def ispellfile filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype +:def ispellword psh,nextword,markk,prevword,markb,filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;tr -d $SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;cat $SPLTMP;/bin/rm $SPLTMP",rtn,retype +:def aspellword psh,nextword,markk,prevword,markb,filt,"SPLTMP=ispell.tmp;cat >$SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;tr -d <$SPLTMP '\\012';/bin/rm $SPLTMP",rtn,retype,nextword + + +aspellfile ^[ l +aspellword ^[ n + + Compile + +:def compile mwind!,mfit!,querysave,query,scratch,"* Build Log *",rtn,bof,markb,eof," ",markk,blkdel,build + + Grep + +:def grep_find mwind!,mfit!,scratch,"* Grep Log *",rtn,bof,markb,eof," ",markk,blkdel,grep + + Man page + +:def man scratch,"* Man Page *",rtn,bof,markb,eof," ",markk,blkdel," ",ltarw,run,"man -P cat -S 2:3 " + + Shell windows + We load the already existing Startup Log first so that Shell does not inherit the current directory. + +:def shell1 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 1 *",rtn,vtbknd!,eof +:def shell2 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 2 *",rtn,vtbknd!,eof +:def shell3 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 3 *",rtn,vtbknd!,eof +:def shell4 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 4 *",rtn,vtbknd!,eof + + Macros allowed in shell window commands +:def shell_clear psh,bof,markb,eof,markk,blkdel +:def shell_parse parserr +:def shell_gparse gparse +:def shell_release release +:def shell_math maths +:def shell_abort abort +:def shell_typemath txt,maths,"ins",rtn,rtn,txt,"\r",rtn,txt,quote,"d",rtn +:def shell_rtn rtn +:def shell_edit edit +:def shell_dellin dellin +:def shell_cd cd +:def shell_pop popabort +:def shell_markb markb +:def shell_markk markk + + Split window version + :def shell1 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 1 *",rtn,vtbknd!,eof + :def shell2 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 2 *",rtn,vtbknd!,eof + :def shell3 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 3 *",rtn,vtbknd!,eof + :def shell4 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 4 *",rtn,vtbknd!,eof + + + Here we guess some common key sequences which either do not have termcap + sequences or which are frequently wrong. Note that if the termcap entry is + correct, it will override these later on. + +paste ^[ ] 5 2 ; Base64 paste (obsolete) +brpaste ^[ [ 2 0 0 ~ Bracketed paste +brpaste_done ^[ [ 2 0 1 ~ Bracketed paste done + +insc ^[ [ 2 ~ +insc ^[ [ L SCO + +delch ^[ [ 3 ~ + +pgup ^[ [ I SCO + +pgdn ^[ [ G SCO + +home ^[ [ 1 ~ Putty, Linux, Cygwin +home ^[ [ H Xterm, Konsole, SCO +home ^[ O H gnome-terminal +home ^[ [ 7 ~ RxVT + home ^# SP A Amiga + +eol ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eol ^[ [ F Xterm, Konsole, SCO +eol ^[ O F gnome-terminal +eol ^[ [ 8 ~ RxVT + eol ^# SP @ Amiga + +rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ [ 1 ; 5 C Mark right Xterm +rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ [ 5 C Mark right Gnome-terminal + (Almost all termcap entries have ^[ O C as an arrow key). + rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ O C Mark right Putty Ctrl-rtarw +rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ O c Mark right RxVT Ctrl-rtarw + +ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ [ 1 ; 5 D Mark left +ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ [ 5 D Mark left + ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ O D Mark left Putty Ctrl-ltarw +ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ O d Mark left RxVT Ctrl-ltarw + +uparw,dnarw,begin_marking,uparw,toggle_marking ^[ [ 1 ; 5 A Mark up +uparw,dnarw,begin_marking,uparw,toggle_marking ^[ [ 5 A Mark up + uparw,dnarw,begin_marking,uparw,toggle_marking ^[ O A Mark up Putty Ctrl-uparw +uparw,dnarw,begin_marking,uparw,toggle_marking ^[ O a Mark up RxVT Ctrl-uparw + +dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ [ 1 ; 5 B Mark down +dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ [ 5 B Mark down + dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ O B Mark down Putty Ctrl-dnarw +dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ O b Mark down RxVT Ctrl-dnarw + +blkdel,nmark ^[ [ 3 ; 5 - Gnome-terminal Ctrl-Del +blkdel,nmark ^[ [ 3 ; 5 ~ Xterm Ctrl-Del + +yank ^[ [ 2 ; 5 - Gnome-terminal Ctrl-Ins +yank ^[ [ 2 ; 5 ~ Xterm Ctrl-Ins + + Extra functions not really part of JOE user interface: + +delbol ^[ o Delete to beginning of line +delbol ^[ ^O Delete to beginning of line +dnslide ^[ z Scroll down one line +dnslide ^[ Z Scroll down one line +dnslide ^[ ^Z Scroll down one line +dnslide,dnslide,dnslide,dnslide MWDOWN +compile ^[ c Compile +compile ^[ C +compile ^[ ^C Compile +grep_find ^[ g Grep +grep_find ^[ G Grep +grep_find ^[ ^G Grep +execmd ^[ x Prompt for command to execute +execmd ^[ X Prompt for command to execute +execmd ^[ ^X Prompt for command to execute +finish ^[ ^I Complete word in document +finish ^[ ^M Complete word: used to be math +mwind!,mfit,jump,bol ^[ SP +isrch ^[ s Forward incremental search +isrch ^[ S Forward incremental search +isrch ^[ ^S Forward incremental search +isrch ^S +notmod ^[ ~ Not modified +mwind,mfit,prevw,nxterr ^[ = To next error +parserr ^[ e Parse errors in current buffer +parserr ^[ E Parse errors in current buffer +parserr ^[ ^E Parse errors in current buffer +mwind,mfit,prevw,prverr ^[ - To previous error +rsrch ^[ r Backward incremental search +rsrch ^[ R Backward incremental search +rsrch ^[ ^R Backward incremental search +retype,rsrch ^R +run ^[ ! Run a program in a window +tomarkb ^[ b Go to beginning of marked block +tomarkb ^[ ^B Go to beginning of marked block +tomarkk ^[ k Go to end of marked block +tomarkk ^[ ^K Go to end of marked block +tomarkk ^[ K Go to end of marked block +txt ^[ i Prompt for text and insert it +txt ^[ I Prompt for text and insert it +upslide ^[ w Scroll up one line +upslide ^[ ^W Scroll up one line +upslide ^[ W Scroll up one line +upslide,upslide,upslide,upslide MWUP +yank ^[ y Undelete text +yankpop ^[ ^Y Undelete text +yank ^[ Y Undelete text + + toggle_marking ^@ Ctrl-space block selection method +insc ^@ Ctrl-space used to insert a space + + bufed ^[ d Menu of buffers +nbuf ^[ v Next buffer +nbuf ^[ V Next buffer +nbuf ^[ ^V Next buffer +pbuf ^[ u Prev buffer +pbuf ^[ U Prev buffer +pbuf ^[ ^U Prev buffer + query ^[ q Quoted insert + byte ^[ n Goto byte + col ^[ c Goto column + abortbuf ^[ k Kill current buffer- don't mess with windows + ask ^[ a Ask to save current buffer + bop ^[ p Backwards paragraph + bos ^[ x Bottom of screen + copy ^[ ^W Copy block into yank + dupw ^[ \ Split window + eop ^[ n Forwards paragraph + format ^[ j Format paragraph ignore block + markl ^[ l Mark line + nmark ^[ @ Turn off ^KB ^KK + pop ^[ > Pop ^KB ^KK + psh ^[ < Push ^KB ^KK + swap ^[ x Swap ^KB and cursor + tomarkbk ^[ g Switch between beginning and end of marked + tos ^[ e Top of screen + tw0 ^[ 0 Kill current window (orphans buffer) + tw1 ^[ 1 Kill all other windows (orphans buffers) + uarg ^[ u Universal argument + yank ^[ ^Y Undelete previous text + yapp ^[ w Append next delete to previous yank + + Standard JOE user interface + +quote8 ^\ Enter Meta chars + quote ` Enter Ctrl chars +quote ^[ ' Enter Ctrl chars +quote ^Q + +backs ^? Backspace +backs ^H +backw ^O Backspace word +bknd ^K ' Shell window +blkcpy ^K C Copy marked block +blkcpy ^K ^C +blkcpy ^K c +blkdel ^K Y Delete marked block +blkdel ^K ^Y +blkdel ^K y +blkmove ^K M Move marked block +blkmove ^K ^M +blkmove ^K m +blksave ^K W Save marked block +blksave ^K ^W +blksave ^K w +bof ^K U Goto beginning of file +bof ^K ^U +bof ^K u + bol .kh Goto beginning of line + bol ^A + bol ^# SP A +home .kh +home ^A +center ^K A Center line +center ^K ^A +center ^K a +crawll ^K < Pan left +crawll ^[ < Pan left +crawlr ^K > Pan right +crawlr ^[ > Pan right +delch .kD Delete character +delch ^D +deleol ^J Delete to end of line +dellin ^Y Delete entire line +delw ^W Delete word to right +dnarw .kd Go down +dnarw ^N +dnarw ^[ O B +dnarw ^[ [ B + dnarw ^# B +edit ^K E Edit a file +edit ^K ^E +edit ^K e +eof ^K V Go to end of file +eof ^K ^V +eof ^K v +eol .kH Go to end of line +eol .@7 +eol ^E +exsave ^K X Save and exit +exsave ^K ^X +exsave ^K x +ffirst ^K F Find first +ffirst ^K ^F +ffirst ^K f +filt ^K / Filter block + finish ^K ^M Complete text under cursor +fnext ^L Find next +fmtblk ^K J Format paragraphs in block +fmtblk ^K ^J +fmtblk ^K j +gomark ^[ 0 TO 9 Goto bookmark +groww ^K G Grow window +groww ^K ^G +groww ^K g +insc .kI Insert a space + insc ^@ +insf ^K R Insert a file +insf ^K ^R +insf ^K r +lindent ^K , Indent to left +line ^K L Goto line no. +line ^K ^L +line ^K l +ltarw .kl Go left +ltarw ^B +ltarw ^[ O D +ltarw ^[ [ D + ltarw ^# D +macros ^[ d Dump keyboard macros +macros ^[ ^D +markb ^K B Set beginning of marked block +markb ^K ^B +markb ^K b +markk ^K K Set end of marked block +markk ^K ^K +markk ^K k + mode ^T Options menu +menu,"root",rtn ^T +nextpos ^K = Goto next position in position history +nextword ^X Goto next word +open ^] Split line +prevpos ^K - Previous position in history +prevword ^Z Previous word +reload ^K ` Revert file +redo ^^ Redo changes +rindent ^K . Indent to right +rtarw .kr Go right +rtarw ^F +rtarw ^[ O C +rtarw ^[ [ C + rtarw ^# C +run ^K ! Run a shell command +save ^K D Save file +save ^K S +save ^K ^D +save ^K ^S +save ^K d +save ^K s +setmark ^[ ^[ Set bookmark +shrinkw ^K T Shrink window +shrinkw ^K ^T +shrinkw ^K t +splitw ^K O Split window +splitw ^K ^O +splitw ^K o +stat ^K SP Show status +stat ^K ^@ Show status +tag ^K ; Tags file search +tomatch ^G Goto matching parenthasis +undo ^_ Undo changes +uparw .ku Go up + uparw ^# A +uparw ^P +uparw ^[ O A +uparw ^[ [ A +shell1 ^[ [ 1 1 ~ +shell1 ^[ O P +shell1 ^[ [ [ A +shell1 .k1 +shell2 ^[ [ 1 2 ~ +shell2 ^[ O Q +shell2 ^[ [ [ B +shell2 .k2 +shell3 ^[ [ 1 3 ~ +shell3 ^[ O R +shell3 ^[ [ [ C +shell3 .k3 +shell4 ^[ [ 1 4 ~ +shell4 ^[ O S +shell4 ^[ [ [ D +shell4 .k4 + +:prompt Prompt windows +:inherit main +if,"byte>size",then,complete,complete,else,delch,endif ^D +complete ^I +dnarw,eol .kd Go down +dnarw,eol ^N +dnarw,eol ^[ O B +dnarw,eol ^[ [ B + dnarw,eol ^# B +uparw,eol .ku Go up + uparw,eol ^# A +uparw,eol ^P +uparw,eol ^[ O A +uparw,eol ^[ [ A + +:menu Selection menus +:inherit windows + +pgupmenu ^[ [ I + +pgdnmenu ^[ [ G + +bolmenu ^[ [ 1 ~ Putty, Linux, Cygwin +bolmenu ^[ [ H Xterm, Konsole +bolmenu ^[ O H gnome-terminal +bolmenu ^[ [ 7 ~ RxVT + bolmenu ^# SP A Amiga + +eolmenu ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eolmenu ^[ [ F Xterm, Konsole +eolmenu ^[ O F gnome-terminal +eolmenu ^[ [ 8 ~ RxVT + eolmenu ^# SP @ Amiga + +abort ^[ ^[ Why? +backsmenu ^? +backsmenu ^H +bofmenu ^K U +bofmenu ^K ^U +bofmenu ^K u +bolmenu .kh +bolmenu ^A +dnarwmenu .kd +dnarwmenu ^N +dnarwmenu ^[ [ B +dnarwmenu ^[ O B + dnarwmenu ^# B +dnarwmenu MWDOWN +eofmenu ^K V +eofmenu ^K ^V +eofmenu ^K v +eolmenu .kH +eolmenu ^E +ltarwmenu .kl +ltarwmenu ^B +ltarwmenu ^[ [ D +ltarwmenu ^[ O D + ltarwmenu ^# D +pgdnmenu .kN Screen down +pgdnmenu ^V +pgdnmenu ^[ [ 6 ~ + pgdnmenu ^# S +pgupmenu .kP Screen up +pgupmenu ^U +pgupmenu ^[ [ 5 ~ + pgupmenu ^# T +rtarwmenu .kr +rtarwmenu ^F +rtarwmenu ^[ [ C + rtarwmenu ^# C +rtarwmenu ^[ O C +rtn SP +rtn ^I +rtn ^K H +rtn ^K h +rtn ^K ^H +tabmenu ^I +uparwmenu .ku +uparwmenu ^P +uparwmenu ^[ [ A +uparwmenu ^[ O A + uparwmenu ^# A +uparwmenu MWUP +defm2down M2DOWN Hits return key + +:query Single-key query window +:inherit windows + +:querya Single-key query window for quoting +type U+0 TO U+10FFFF + +:querysr Search & replace query window +type U+0 TO U+10FFFF + +:shell Input to shell windows +:inherit main +"" ^C Abort +"" ^D Eof +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace + +:vtshell Input to ANSI shell windows +:inherit main +""  [ A +"" .ku +""  [ B +"" .kd +""  [ C +"" .kr +""  [ D +"" .kl +"" ^A BOL for bash +"" ^C Abort +"" ^D Eof +"" ^E EOL for bash +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace diff --git a/joe/etc/joe/joerc.zh_TW b/joe/etc/joe/joerc.zh_TW new file mode 100644 index 0000000..bcdc0f8 --- /dev/null +++ b/joe/etc/joe/joerc.zh_TW @@ -0,0 +1,1254 @@ + Initialization file for JOE + Standard Joe + + JOE looks for this file in: + 1 - $HOME/.joerc + 2 - /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc + + This file can include other files by placing the following include command + in the first column: + + :include filename + + FIRST SECTION: Default global options (these options can also be specified + on the command line. Also the NOXON, LINES, COLUMNS, DOPADDING and BAUD + options can be specified in environment variables): + + Put each option you want set in the first column: + + -option Sets the option + --option Clears the option + +-help_is_utf8 Set if help text is in UTF-8 format. Leave clear if it's a raw 8-bit format. + + -mid Cursor is recentered when scrolling is necessary + -left nn Amount to jump left when scrolling is necessary (-1 for 1/4 width) + -right nn Amount to jump right when scrolling is necessary (-1 for 1/4 width) + + -marking Text between ^KB and cursor is highlighted (use with -lightoff) + + -asis Characters 128 - 255 shown as-is + + -force Force final newline when files are saved + + -nolocks If you don't want file locks to be used + + -nomodcheck Disable periodic checking of disk file newer than buffer + (this checking happens on save even with this option). + + -nocurdir Do not prompt with current directory + + -nobackups If you don't want backup files to be created + + -nodeadjoe If you don't want DEADJOE files to be created + + -break_hardlinks + Delete file before writing, to break hard links + (but don't break symbolic links). + + -break_links + Delete file before writing, to break hard links + and symbolic links. + + + -lightoff Turn off highlighting after block copy or move + + -exask ^KX always confirms file name + + -beep Beep on errors and when cursor goes past extremes + + -nosta Disable top-most status line + + -keepup %k and %c status line escape sequences updated frequently + + -pg nnn No. lines to keep for PgUp/PgDn + + -undo_keep nnn Number of undo records to keep. 0 for infinite. + + -csmode ^KF after a pervious search does a ^L instead + + -backpath path + Directory to store backup files (one space between + 'backpath' and the 'path', no trailing spaces or comments + after the path). + + -floatmouse Clicking past end of line moves the cursor past the end + + -rtbutton Use the right mouse button for action, instead of the left + + -nonotice Disable copyright notice + + -noexmsg Disable exiting message ("File not changed so no update needed") + + -noxon Attempt to turn off ^S/^Q processing + + -orphan Put extra files given on command line in orphaned buffers + instead of in windows + + -dopadding Output pad characters (for when there is no tty handshaking) + + -lines nnn Set no. screen lines + + -baud nnn Set baud rate for terminal optimizations + + -columns nnn Set no. screen columns + + -helpon Start with help on + + -skiptop nnn Don't use top nnn lines of the screen + +-notite Don't send terminal initialization and termination strings: + prevents restoration of screen on exit. + + -nolinefeeds Prevent sending linefeeds to preserve screen history in terminal + emulator's scroll-back buffer. + + -usetabs Use tabs to help optimize screen update. + +-assume_color Assume terminal has ANSI color support even if termcap/terminfo entry + says that it doesn't. This only applies if the terminal otherwise + looks like an ANSI terminal (support bold and capability starts with + ESC [). + +-assume_256color + Assume terminal has xterm 256 color support (ESC [ 38 ; 5 ; NNN m and + ESC [ 48 ; 5 ; NNN m). + +-guess_non_utf8 Allow guess of non-UTF-8 file encoding in a UTF-8 locale. + + -guess_utf8 Allow guess of UTF-8 file encoding in non-UTF-8 locale. + +-guess_utf16 Allow guess of UTF-16 encoding + +-guess_crlf Automatically detect MS-DOS files and set -crlf appropriately + +-guess_indent Guess indent character (tab or space). + +-menu_above Position menu/list above prompt when enabled. Otherwise position + below prompt. + +-transpose Transpose rows with columns in all menus. + + -menu_explorer Stay in menu system when a directory is selected (otherwise + directory is added to path and menu is closed). + + -menu_jump Jump into file selection menu when tab is hit (otherwise, menu + comes up, but cursor stays in file name prompt). + + -notagsmenu Disable tags file search menu + + -icase Search is case insensitive by default. + + -wrap Search wraps + + -autoswap Swap markb with markk when necessary + +-joe_state Use ~/.joe_state file + + -mouse Enable xterm mouse support. When enabled, left-click will + position the cursor and left-click-drag will select blocks + For normal xterm cut and paste, hold the shift key down. + + -joexterm If you are using XTerm version 212 or higher, and if it was + configured with --enable-paste64, set this flag: it allows + mouse cut & paste to work properly (text selected with the + mouse can be pasted into other application, and middle + button clicks paste into JOE). + +-brpaste When JOE starts, send command to the terminal emulator that + enables "bracketed paste mode" (but only if the terminal + seems to have the ANSI command set). In this mode, text + pasted into the window is bracketed with ESC [ 2 0 0 ~ and + ESC [ 2 0 1 ~. + +-pastehack If keyboard input comes in as one block assume it's a mouse + paste and disable autoindent and wordwrap. + + -square Rectangular block mode + + -colors scheme + Set the default color scheme + +-restore Restore previous cursor position when files are opened + +-search_prompting + Search prompts with previous search request. + + -regex Search uses standard regular expression format (otherwise it uses + JOE format where all special characters have to be escaped). + + Status line definition strings. -lmsg defines the left-justified string and + -rmsg defines the right-justified string. The first character of -rmsg is + the background fill character. The following escape sequences can be used + in these strings: + + %t 12 hour time + %u 24 hour time + %T O for overtype mode, I for insert mode + %W W if wordwrap is enabled + %I A if autoindent is enabled + %X Rectangle mode indicator + %n File name + %m '(Modified)' if file has been changed + %* '*' if file has been changed + %R Read-only indicator + %r Row (line) number + %c Column number + %o Byte offset into file + %O Byte offset into file in hex + %a Ascii value of character under cursor + %A Ascii value of character under cursor in hex + %w Width of character under cursor + %p Percent of file cursor is at + %l No. lines in file + %k Entered prefix keys + %S '*SHELL*' if there is a shell running in window + %M Macro recording message + %y Syntax + %e Encoding + %x Context (first non-indented line going backwards) + %dd day + %dm month + %dY year + %Ename% value of environment variable + %Tname% value of option (ON or OFF for boolean options) + + These formatting escape sequences may also be given: + + \i Inverse + \u Underline + \b Bold + \d Dim + \f Blink + \l Italic + +-lmsg \i%k%T%W%I%X %n %m%y%R %M %x +-rmsg %S Е┬≈ %4r Х║▄ %3c %t Ctrl-K H Д╫©Г■╗Х╙╙Ф≤▌ +-smsg ** Line %r Col %c Offset %o(0x%O) %e %a(0x%A) Width %w ** +-zmsg ** Line %r Col %c Offset %o(0x%O) ** +-xmsg \i Joe's Own Editor %v (%b) ** Type \bCtrl-K Q\b to exit or \bCtrl-K H\b for help **\i + + Key sequence hints which are displayed in various prompts. +-aborthint ^C +-helphint ^K H + + SECOND SECTION: File name dependant local option settings: + + Each line with '*' in the first column indicates the modes which should be + set for files whose name matches the regular expression. If more than one + regular expression matches the file name, then the last matching one is + chosen. + + A file contents regular expression may also be specified on a separate line + with '+regex'. If this regular expresssion is given, then both the file name + regex and the file contents regex must match for the options to apply. + + Here are the modes which can be set: + + -cpara >#!;*/% + Characters which can indent paragraphs. + + -cnotpara . + Characters which begin non-paragraph lines. + + -encoding name + Set file coding (for example: utf-8, iso-8859-15) + + -syntax name + Specify syntax (syntax file called + 'name.jsf' will be loaded) + + -hex Hex editor mode + + -highlight Enable highlighting + + -smarthome Home key first moves cursor to beginning of line, + then if hit again, to first non-blank character. + + -indentfirst Smart home goes to first non-blank character first, + instead of going the beginning of line first. + + -smartbacks Backspace key deletes 'istep' number of + 'indentc's if cursor is at first non-space + character. + + -tab nnn Tab width + + -indentc nnn Indentation character (32 for space, 9 for tab) + + -istep nnn Number of indentation columns + + -spaces TAB inserts spaces instead of tabs. + + -purify Fix indentation if necessary for rindent, lindent and backs + (for example if indentation uses a mix of tabs and spaces, + and indentc is space, indentation will be converted to all + spaces). + + -crlf File uses CR-LF at ends of lines + + -wordwrap Wordwrap + + -nobackup If you don't want backup file to be created + + -autoindent Auto indent + + -overwrite Overtype mode + + -picture Picture mode (right arrow can go past end of lines) + + -lmargin nnn Left margin + + -rmargin nnn Right margin + + -flowed Put one space after intermediate paragraph lines + for support of flowed text. + + + -french One space after '.', '?' and '!' for wordwrap + and paragraph reformat instead of two. Joe + does not change the spacing you give, but + sometimes it must put spacing in itself. This + selects how much is inserted. + + -linums Enable line numbers on each line + + -hiline Highlight current line + + -rdonly File is read-only + + -keymap name + Keymap to use if not 'main' + + -lmsg Status line definition strings- + -rmsg see previous section for more info. + + -mfirst macro + Macro to execute on first modification + -mnew macro + Macro to execute when new files are loaded + -mold macro + Macro to execute when existing files are loaded + -msnew macro + Macro to execute when new files are saved + -msold macro + Macro to execute when existing files are saved + + Macros for the above options are in the same format as in the key + binding section below- but without the key name strings. + + These define the language syntax for ^G (goto matching delimiter): + + -highlighter_context Use the highlighter context for ^G + + -single_quoted Text between ' ' should be ignored (this is + not good for regular text since ' is + normally used alone as an apostrophe) + + -no_double_quoted Text between " " should not be ignored (useful + for TeX). + + -c_comment Text between /* */ should be ignored + + -cpp_comment Text after // should be ignored + + -pound_comment Text after # should be ignored + + -vhdl_comment Text after -- should be ignored + + -semi_comment Text after ; should be ignored + + -text_delimiters begin=end:if=elif=else=endif + + Define word delimiters + + Default local options +-highlight +-istep 4 + + Perforce macro: use this macro (put in first column) to have joe "p4 edit" + a file you're about to change. + + -mfirst if,"rdonly && joe(sys,\"p4 edit \",name,rtn)",then,mode,"o",msg,"executed \"p4 edit ",name,"\"",rtn,endif + + -mfirst if,"rdonly && joe(sys,\"p4 edit \",name,rtn)",then,reload,msg,"executed \"p4 edit ",name,"\"",rtn,endif + + File type table is now in a separate file. You can copy this file to ~/.joe and customize it. + +:include ftyperc + + SECOND and 1/2 SECTION: Option menu layout + + :defmenu name [macro] + Defines a menu. + The macro here is executed when the user hits backspace. + + macro string comment + A menu entry. Macro is any JOE macro- see "Macros:" + below. String is the label to be used for the macro + in the menu. It is in the same format as the -lmsg + and -rmsg options above. + + Two whitespace characters in a row begins a comment. + Use '% ' for a leading space in the string. + +:defmenu root +mode,"overwrite",rtn T Overtype %Zoverwrite% +mode,"hex",rtn ' Hex edit mode +mode,"autoindent",rtn I Autoindent %Zautoindent% +mode,"wordwrap",rtn W Word wrap %Zwordwrap% +mode,"tab",rtn D Tab width %Ztab% +mode,"lmargin",rtn L Left margin %Zlmargin% +mode,"rmargin",rtn R Right margin %Zrmargin% +mode,"square",rtn X Column mode %Zsquare% +mode,"indentc",rtn % % Indent char %Zindentc% +mode,"istep",rtn % % Indent step %Zistep% +menu,"indent",rtn = Indent select +mode,"highlight",rtn H Highlighting %Zhighlight% +mode,"crlf",rtn Z CR-LF/MS-DOS %Zcrlf% +mode,"linums",rtn N Line numbers %Zlinums% +mode,"beep",rtn B Beep %Zbeep% +mode,"rdonly",rtn O Read only %Zrdonly% +mode,"syntax",rtn Y Syntax +mode,"encoding",rtn E Encoding +mode,"asis",rtn % % Meta chars as-is +mode,"language",rtn V Language +mode,"picture",rtn P picture %Zpicture% +mode,"type",rtn F File type [%Ztype%] +mode,"title",rtn C Context %Ztitle% +menu,"more-options",rtn % % More options... + +:defmenu more-options menu,"root",rtn +menu,"^G",rtn % % ^G options +menu,"search",rtn % % search options +menu,"paragraph",rtn % % paragraph options +menu,"file",rtn % % file options +menu,"menu",rtn % % menu options +menu,"global",rtn % % global options +menu,"cursor",rtn % % cursor options +menu,"marking",rtn % % marking options +menu,"tab",rtn % % tab/indent options + +:defmenu indent menu,"root",rtn +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 1, Indent character = 32",rtn 1 Space +mode,"istep",rtn,"2",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 2, Indent character = 32",rtn 2 Spaces +mode,"istep",rtn,"3",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 3, Indent character = 32",rtn 3 Spaces +mode,"istep",rtn,"4",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 4, Indent character = 32",rtn 4 Spaces +mode,"istep",rtn,"5",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 5, Indent character = 32",rtn 5 Spaces +mode,"istep",rtn,"8",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 8, Indent character = 32",rtn 8 Spaces +mode,"istep",rtn,"10",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 10, Indent character = 32",rtn 0 Ten +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"9",rtn,msg,"Indent step = 1, Indent character = 9",rtn T Tab + +:defmenu menu menu,"more-options",rtn +mode,"menu_explorer",rtn % % Menu explorer %Zmenu_explorer% +mode,"menu_above",rtn % % Menu position %Zmenu_above% +mode,"menu_jump",rtn % % Jump into menu %Zmenu_jump% +mode,"transpose",rtn % % Transpose menus %Ztranspose% + +:defmenu ^G menu,"more-options",rtn +mode,"highlighter_context",rtn % % ^G uses highlighter context %Zhighlighter_context% +mode,"single_quoted",rtn % % ^G ignores '...' %Zsingle_quoted% +mode,"no_double_quoted",rtn % % ^G no ignore "..." %Zno_double_quoted% +mode,"c_comment",rtn % % ^G ignores /*...*/ %Zc_comment% +mode,"cpp_comment",rtn % % ^G ignores //... %Zcpp_comment% +mode,"pound_comment",rtn % % ^G ignores #... %Zpound_comment% +mode,"vhdl_comment",rtn % % ^G ignores --... %Zvhdl_comment% +mode,"semi_comment",rtn % % ^G ignores ;... %Zsemi_comment% +mode,"tex_comment",rtn % % ^G ignores %%... %Ztex_comment% +mode,"text_delimiters",rtn % % Text delimiters %Ztext_delimiters% + +:defmenu search menu,"more-options",rtn +mode,"icase",rtn % % Case insensitivity %Zicase% +mode,"wrap",rtn % % Search wraps %Zwrap% +mode,"search_prompting",rtn % % Search prompting %Zsearch_prompting% +mode,"csmode",rtn % % Continued search %Zcsmode% + +:defmenu paragraph menu,"more-options",rtn +mode,"french",rtn % % French spacing %Zfrench% +mode,"flowed",rtn % % Flowed text %Zflowed% +mode,"cpara",rtn % % Paragraph indent chars %Zcpara% +mode,"cnotpara",rtn % % Not-paragraph chars %Zcnotpara% + +:defmenu file menu,"more-options",rtn +mode,"restore",rtn % % Restore cursor %Zrestore% +mode,"guess_crlf",rtn % % Auto detect CR-LF %Zguess_crlf% +mode,"guess_indent",rtn % % Guess indent %Zguess_indent% +mode,"guess_non_utf8",rtn % % Guess non-UTF-8 %Zguess_non_utf8% +mode,"guess_utf8",rtn % % Guess UTF-8 %Zguess_utf8% +mode,"guess_utf16",rtn % % Guess UTF-16 %Zguess_utf16% +mode,"force",rtn % % Force last NL %Zforce% +mode,"nobackup",rtn % % No backup %Znobackup% + +:defmenu global menu,"more-options",rtn +mode,"nolocks",rtn % % Disable locks %Znolocks% +mode,"nobackups",rtn % % Disable backups %Znobackups% +mode,"nodeadjoe",rtn % % Disable DEADJOE %Znodeadjoe% +mode,"nomodcheck",rtn % % Disable mtime check %Znomodcheck% +mode,"nocurdir",rtn % % Disable current dir %Znocurdir% +mode,"exask",rtn % % Exit ask %Zexask% +mode,"nosta",rtn % % Disable status line %Znosta% +mode,"keepup",rtn % % Fast status line %Zkeepup% +mode,"break_hardlinks",rtn % % Break hard links %Zbreak_hardlinks% +mode,"break_links",rtn % % Break links %Zbreak_links% +mode,"joe_state",rtn % % Joe_state file %Zjoe_state% +mode,"undo_keep",rtn % % No. undo records %Zundo_keep% +mode,"backpath",rtn % % Path to backup files %Zbackpath% + +:defmenu cursor menu,"more-options",rtn +mode,"pg",rtn % % No. PgUp/PgDn lines %Zpg% +mode,"mid",rtn C Center on scroll %Zmid% +mode,"left",rtn L Columns to scroll left %Zleft% +mode,"right",rtn R Columns to scroll right %Zright% +mode,"floatmouse",rtn % % Click past end %Zfloatmouse% +mode,"rtbutton",rtn % % Right button %Zrtbutton% + +:defmenu marking menu,"more-options",rtn +mode,"autoswap",rtn % % Autoswap mode %Zautoswap% +mode,"marking",rtn % % Marking %Zmarking% +mode,"lightoff",rtn % % Auto unmask %Zlightoff% + +:defmenu tab menu,"more-options",rtn +mode,"smarthome",rtn % % Smart home key %Zsmarthome% +mode,"smartbacks",rtn % % Smart backspace %Zsmartbacks% +mode,"indentfirst",rtn % % To indent first %Zindentfirst% +mode,"purify",rtn % % Clean up indents %Zpurify% +mode,"spaces",rtn % % No tabs %Zspaces% + + THIRD SECTION: Named help screens: + + Use \i to turn on/off inverse video + Use \u to turn on/off underline + Use \b to turn on/off bold + Use \d to turn on/off dim + Use \f to turn on/off flash + Use \l to turn on/off italic + + Use \| to insert a spring: all springs in a given line are set to the same + width such that the entire line exactly fits in the width of the screen (if + it's not an exact multiple so that there are N spaces remaining, the + rightmost N springs each get one extra space). Hint: if you want vertical + alignment, each line should have the same number of springs. + + Use the '-help_is_utf8' global option to allow UTF-8 sequences in the help + text. Otherwise, the locale 8-bit character set is assumed. + +{Basic +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ ESC . И√▀Е∙÷Ф⌡╢Е╓ Х╪■Е┼╘Х╕√Г╙≈ (^[.) \i +\i \i\|\uФ╦╦Ф╗≥\u \|\uХ╥ЁХ┤Ё\u \|\uЕ█─Е║┼\u \|\uЕ┬╙И≥╓\u \|\uИ⌡°И═┘\u \|\uИ⌡╒И√▀\u \|\i \i +\i \i\|^B Е╬─Е╥╕ ^F Е╬─Е▐Ё \|^U Д╦┼Д╦─Г∙╚И²╒ \|^KB И√▀И═╜ \|^D Е╜≈Е┘┐ \|^KJ И┤█Ф√╟Ф▌▓Е┬≈ \|^KX Е└╡Е╜≤ \|\i \i +\i \i\|^P Е╬─Д╦┼ ^N Е╬─Д╦▀ \|^V Д╦▀Д╦─Г∙╚И²╒ \|^KK Г╣░Е╟╬ \|^Y Ф∙╢Е┬≈ \|^KA Г╫╝Д╦╜ \|^C Ф■╬Фё└ \|\i \i +\i \i\|^Z Е┴█Д╦─Е─▀Е╜≈ \|^A Е┬≈И╕√ \|^KM Г╖╩Е▀∙ \|^W >Е√╝Е╜≈ \|^T Х╗╜Е╝ И│╦И═┘ \|^KZ SHELL \|\i \i +\i \i\|^X Е╬▄Д╦─Е─▀Е╜≈ \|^E Е┬≈Е╟╬ \|^KC Х╓┤Хё╫ \|^O Е√╝Е╜≈< \|^R Х·╒Е╧∙Ф⌡╢Ф√╟ \|\uФ╙■Ф║┬\u \|\i \i +\i \i\|\uФ░°Е╟▀\u \|^KU Ф╙■И╕√ \|^KW Ф╙■Ф║┬ \|^J >Е┬≈Е╟╬ \|\uФ▀╪Е╜≈\u \|^KE Г╥╗Х╪╞ \|\i \i +\i \i\|^KF Е╟▀Ф┴╬Е╜≈Д╦╡ \|^KV Ф╙■Е╟╬ \|^KY Е┬╙И≥╓ \|^_ Е╬╘Е▌÷ \|^[N Е√╝Е╜≈ \|^KR Ф▐▓Е┘╔ \|\i \i +\i \i\|^L Д╦▀Д╦─Е╜≈Д╦╡ \|^KL Г╛╛Е╧╬Е┬≈ \|^K/ И│▌Ф©╬ \|^^ Е├█Е│  \|^[L Ф╙■Ф║┬ \|^KD Е╜≤Ф╙■ \|\i \i +} + +{Windows +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, Е╬▄Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[. \i +\i \i\|^KO Е┬├Е┴╡Х╕√Г╙≈Г┌╨Д╨▄ \|F1 - F4 Pop-up shell window \|\i \i +\i \i\|^KG Ф■╬Е╓╖Ф╦╦Ф╗≥Ф┴─Е°╗Х╕√Г╙≈ \|^KT Г╦╝Е╟▐Ф╦╦Ф╗≥Ф┴─Е°╗Х╕√Г╙≈ \|\i \i +\i \i\|^KN Х╥ЁЕ╬─Д╦▀Д╦─Е─▀Х╕√Г╙≈ \|^KP Х╥ЁЕ╬─Д╦┼Д╦─Е─▀Х╕√Г╙≈ \|\i \i +\i \i\|^[V Е┬┤Ф▐⌡Е┬╟Д╦▀Д╦─Е─▀Г╥╘Х║²Е█─ \|^[U Е┬┤Ф▐⌡Е┬╟Д╦┼Д╦─Е─▀Г╥╘Х║²Е█─ \|\i \i +\i \i\|^C Ф╤┬И≥╓Ф╦╦Ф╗≥Ф┴─Е°╗Х╕√Г╙≈ \|^KI И║╞Г╓╨Ф┴─Ф°┴Х╕√Г╙≈ / И║╞Г╓╨Ф╦╦Ф╗≥Ф┴─Е°╗Х╕√Г╙≈ \|\i \i +} + +{Advanced +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, Е╬▄Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[. \i +\i \i\|\uЕ╥╗И⌡├\u \|\uИ⌡°И═┘\u \|\uФ█╡Х╩╦\u \|\uSHELL\u \|\uЕ┴█Е╬─\u \|\uЕ█ЁФ≥┌Ф░°Е╟▀\u \|\i \i +\i \i\|^K[ 0-9 Х╗≤И▄└ \|^K Г╘╨Ф═╪Г▀─Ф┘▀ \|^[W Е╬─Д╦┼ \|^K' Х╕√Г╙≈Ф╗║Е╪▐ \|^[B Е┬╟ ^KB Х≥∙ \|^[R Е╬─Е╬▄ \|\i \i +\i \i\|^K] Е│°Ф╜╒ \|^K\\ И┤█Х╕├Е▒╫Д╩╓ \|^[Z Е╬─Д╦▀ \|^[! Е▒╫Д╩╓Ф╗║Е╪▐ \|^[K Е┬╟ ^KK Х≥∙ \|^[S Е╬─Е┴█ \|\i \i +\i \i\|^K 0-9 Е÷╥Х║▄ \|\uФ▐▓Е┘╔\u \|^K< Е╬─Е╥╕ \|\uЕ╪∙Г■╗\u \|\uЕ┬╙И≥╓\u \|\uФ⌡╦Г╠╓\u \|\i \i +\i \i\|^K? Ф÷╔Х╘╒ \|^] Е┬├Е┴╡Д╦─Е┬≈ \|^K> Е╬─Е▐Ё \|^[' Ctrl- \|^[Y Д╦▀Ф▀┴Д╦─Е┬≈ \|^[ 0-9 Х╥ЁХ┤Ё \|\i \i +\i \i\|^[D Е┌╬Е█╟ \|^SPACE Ф▐▓Е┘╔Г╘╨Ф═╪ \| \|^\\ Meta- \|^[O Е┬≈И╕√< \|^[^[ Х╗╜Е╝  \|\i \i +} + +{Programs +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, Е╬▄Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[. \i +\i \i\|\uЕ┴█Е╬─\u \|\uГ╦╝Ф▌▓\u \|\uГ╥╗Х╜╞\u \uЕ©╚Ф█╥\u \|\i \i +\i \i\|^G Ф┬░Е╟█Ф░°Е╟▀ ( [ { \|^K, Ф╦⌡Е╟▒ \|^[C Г╥╗Х╜╞ & Х╖ёФ·░ ^G Е╟▀Ф┴╬Ф╦╦Ф╗≥Д╦▀Ф√╧Е√╝Е╜≈ \|\i \i +\i \i\|^K- Е┴█Д╦─Д╫█Г╫╝ \|^K. Е╒·Е┼═ \|^[G Ф╞■Е╟█ & Х╖ёФ·░ ^[ENTER Е╝▄Ф∙╢Е√╝Е╜≈ \|\i \i +\i \i\|^K= Е╬▄Д╦─Д╫█Г╫╝ \|\uFILE\u \|^[= Е┬╟Д╦▀Д╦─Е─▀И▄╞Х╙╓ ^[Y Х╡╪Д╦┼Е╥╡Е┬╙Ф√┤Е╜≈ \|\i \i +\i \i\|^K; Ф╗≥Г╠╓Ф╙■Ф░°Е╟▀ \|^K ` \|^[- Е┬╟Д╦┼Д╦─Е─▀И▄╞Х╙╓ ^[^Y Е╬╙Г▓╟Е╥╡Е┬╙Ф√┤Е╜≈ \|\i \i +\i \i\| \| revert \|^[ SP Х╥ЁХ┤ЁИ▄╞Х╙╓ \|\i \i +} + +{Search +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, Е╬▄Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[. \i +\i \iГ┴╧Ф╝┼Ф░°Е╟▀Ф╒²Д╩╤О╪  \|\i \i +\i \i \\^ \\$ Д╫█Ф√╪Е┬≈И╕√/Е╟╬Г └Г╛╕Е░┬Е╜≈Д╦╡ \\. match any single char \|\i \i +\i \i \\< \\> Д╫█Ф√╪Е╜≈И╕√/Е╟╬Г └Г╛╕Е░┬Е╜≈Д╦╡ \\! match char or expression \|\i \i +\i \i \\( \\) grouping \\| match left or right \|\i \i +\i \i \\[a-z] Г╛╕Е░┬Ф┴─Ф▄┤Е╝ И⌡├Е░┬Д╦╜Г └Д╩╩Д╦─Е╜≈Д╦╡ \|\i \i +\i \i \\{1,3} match 1 - 3 occurrences \\? match 0 or 1 occurrence \|\i \i +\i \i \\+ match 1 or more occurrences \\* match 0 or more occurrences \|\i \i +\i \iГ┴╧Ф╝┼Е▐√Д╩ёФ╒²Д╩╤: \|\i \i +\i \i \\& Г⌡╢Ф▌╔Д╩╔Г╛╕Е░┬Е╜≈Е┘┐Е▐√Д╩ёФ┴╬Е┬╟Г └Е╜≈Д╦╡ \\1 - 9 replaced with Nth group \|\i \i +\i \i \\u \\l convert next to upper/lower \\U \\L case convert until \\E \|\i \i +} + +{Escape sequences +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, Е╬▄Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[. \i +\i \iEscape sequences: \\x{10fff} Unicode code point \\p{Ll} Unicode category \|\i \i +\i \i \\i / \\I Identifier start \\t tab \\e escape \|\i \i +\i \i \\c / \\C Identifier continue \\n newline \\r carriage return \|\i \i +\i \i \\d / \\D Digit / Not a digit \\b backspace \\xFF hex character \|\i \i +\i \i \\w / \\W Word / Not a word \\a alert \\377 octal character \|\i \i +\i \i \\s / \\S Space / Not a space \\f formfeed \\\\ backslash \|\i \i +} + +{SearchOptions +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, Е╬▄Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[. \i +\i \iФ░°Е╟▀И│╦И═┘О╪  \|\i \i +\i \i r Г╫╝Ф▐⌡ k И≥░Е┬╤Ф√╪Е▐╞Х┐╫Г┌╨Г÷╘Е╫╒Г └Ф╗≥Х╗≤Е█─Е║┼Д╦╜Ф░°Е╟▀ \|\i \i +\i \i i Е©╫Г∙╔Е╓╖Е╟▐Е╞╚ b Е╬─Е╬▄Ф░°Е╟▀Х─▄И²·Е╬─Е┴█Ф░°Е╟▀ \|\i \i +\i \i a Ф░°Е╟▀Х╥╗Х╤┼Ф┴─Ф°┴Х╪┴Е┘╔Г └Ф╙■Ф║┬ \|\i \i +\i \i e Ф░°Е╟▀Х╥╗Х╤┼Ф┴─Ф°┴Е°╗Ф╞■Е╟█Ф┬√Г╥╗Х╜╞И▄╞Х╙╓Ф╦┘Е√╝Д╦╜Г └Ф╙■Ф║┬ \|\i \i +\i \i w Ф╜╓Ф╛║Ф░°Е╟▀Е⌡·Х╫┴Е┬╟Ф╙■Ф║┬И√▀И═╜ n Ф╜╓Ф╛║Ф░°Е╟▀Д╦█Х╕│Е⌡·Х╫┴Е┬╟Ф╙■Ф║┬И√▀И═╜ \|\i \i +\i \i x / y Search text is standard format / JOE format regular expression \|\i \i +\i \i nnn Е▐╙И─╡Х║▄ nnn Ф╛║Г╫╝Ф▐⌡Е▀∙Д╫° \|\i \i +} + +{Math +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, Е╬▄Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[. \i +\i \i \uФ▄┤Д╩╓\u (ESC m И─╡Е┘╔Ф∙╦Е╜╦Ф╗║Е╪▐) \uЕ┤╫Ф∙╦\u \|\i \i +\i \i hex Е█│Е┘╜И─╡Д╫█И║╞Г╓╨Ф╗║Е╪▐ sin cos tab asin acos atan \|\i \i +\i \i dec Е█│И─╡Д╫█Ф╗║Е╪▐ sinh cosh tanh asinh acosh atanh \|\i \i +\i \i ins Г╣░Ф·°Х╪╦Е┘╔Ф╙■Ф║┬ sqrt cbrt exp ln log \|\i \i +\i \i eval Е█─Е║┼Ф╠┌Е─╪ int floor ceil abs erg ergc \|\i \i +\i \i 0xff Х╪╦Е┘╔Е█│Е┘╜И─╡Д╫█Ф∙╦Е╜≈ joe(..macro..) - Е÷╥Х║▄Д╦─Е─▀Г╥╗Х╪╞Е≥╗Е╥╗И⌡├ \|\i \i +\i \i 3e-4 Е█│И─╡Д╫█Ф╣╝И╩·Ф∙╦Е╜≈ \uЕ█─Е║┼\u \|\i \i +\i \i a=10 Ф▄┤Е╝ Д╦─Е─▀Х╝┼Ф∙╦ sum cnt Г╦╫Е▓▄Ц─│Х╗┬Ф∙╦ \|\i \i +\i \i 2+3:ins Е╓ И┤█Ф▄┤Д╩╓ avg dev Е╧ЁЕ²┤Ц─│Ф╗≥Ф╨√Е╥╝ \|\i \i +\i \i e pi Е╦╦Ф∙╦ \uИ│▀Г╝≈Г╛╕Х≥÷\u \|\i \i +\i \i ans Е┴█Д╦─Е─▀Г╣░Ф·° ! ^ * / % + - < <= > >= == != && || ? :\|\i \i +} + +{Names +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, Е╬▄Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[. \i +\i \i Е°╗Х╪╦Е┘╔Ф╙■Ф║┬Е░█Г╗╠Г └Ф▐░Г╓╨Х╕√Г╙≈Д╦╜О╪▄Ф▄┴Д╦▀ TAB И█╣Е▐╞Д╩╔Г■╒Г■÷Д╦─Е─▀Ф┌╗Г⌡╝Е┴█Ф┴─Е°╗Г⌡╝И▄└Д╦▀Г └ \|\i \i +\i \i Ф┴─Ф°┴Ф╙■Ф║┬Е░█Е╜≈Г └Е┬≈Х║╗О╪▄Ф┬√Ф≤╞Д╫©Г■╗Д╦┼Д╦▀И█╣Д╬├Д╫©Г■╗Д╩╔Е┴█Г■╗И│▌Г └Ф╙■Ф║┬Е░█Г╗╠Ц─┌ \|\i \i +\i \i Г┴╧Ф╝┼Ф╙■Ф║┬Е░█Г╗╠О╪  \|\i \i +\i \i !command Г╝║Г╥ Е╪∙Е┘╔Д╦─Е─▀ shell Е╨∙Д╦▀Г └Е▒╫Д╩╓ \|\i \i +\i \i >>filename И≥└Е┼═Е┬╟Е▐╕Д╦─Ф╙■Ф║┬ \|\i \i +\i \i - Е╬·Ф╗≥Ф╨√Г └ I/O Х╗╜Е┌≥Д╦╜Х╝─Е┘╔/Е╞╚Е┤╨ \|\i \i +\i \i filename,START,SIZE Е╬·Д╦─Е─▀Ф╙■Ф║┬/Х╗╜Е┌≥Д╦╜Х╝─Е┘╔/Е╞╚Е┤╨И┐╗Д╩╫ХЁ┤Ф√≥ \|\i \i +\i \i Д╩╔Е█│И─╡Д╫█(255)Ц─│Е┘╚И─╡Д╫█(0377)Ф┬√Е█│Е┘╜И─╡Д╫█(0xFF)Г╣╕Е╝ Ф╙■Ф║┬И√▀Е╖▀Г └Д╫█Г╫╝/Ф╙■Ф║┬Е╓╖Е╟▐ \|\i \i +} + +{Joe +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, Е╬▄Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[. \i +\i \i И▄╞Х╙╓Е═╠Е▒┼Х╚▀Е┌ЁИ─│Х┤ЁО╪  http://sourceforge.net/projects/joe-editor \|\i \i +\i \i \|\i \i +\i \i И═░Х╗╜ joerc Ф╙■Ф║┬Д╫█Ф√╪ /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc \|\i \i +\i \i И║█Е╓√Г └Ф√┤Д╩╤Е▐╞Е°╗ /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/doc/joe Д╦╜Ф┴╬Е┬╟ \|\i \i +} + +{CharTable +\i Х╪■Е┼╘Х╕√Г╙≈ \|^KH И≈°И√┴Х╪■Е┼╘Х╕√Г╙≈ Е┴█Д╦─Х╪■Е┼╘Х╕√Г╙≈ ^[, \i +\i \i\| Е█│И─╡ \u 0123 4567 8901 2345 0123 4567 8901 2345 \u Е█│И─╡\|\i \i +\i \i\| | | \|\i \i +\i \i\| 0 | \u@ABC\u \uDEFG\u \uHIJK\u \uLMNO\u \i\u@ABC\u\i \i\uDEFG\u\i \i\uHIJK\u\i \i\uLMNO\u\i | 128 \|\i \i +\i \i\| 16 | \uPQRS\u \uTUVW\u \uXYZ[\u \u\\]^_\u \i\uPQRS\u\i \i\uTUVW\u\i \i\uXYZ[\u\i \i\u\\]^_\u\i | 144 \|\i \i +\i \i\| 32 | !"# $%&' ()*+ ,-./ б═б║бё д╔ф╖ х╘й╚ л╜н╞ | 160 \|\i \i +\i \i\| 48 | 0123 4567 89:; <=>? п╠рЁ т╣ж╥ ь╧з╩ э╫ч© | 176 \|\i \i +\i \i\| 64 | @ABC DEFG HIJK LMNO ц─ц│ц┌ц┐ ц└ц┘ц├ц┤ ц┬ц┴ц┼ц▀ ц▄ц█ц▌ц▐ | 192 \|\i \i +\i \i\| 80 | PQRS TUVW XYZ[ \\]^_ ц░ц▒ц▓ц⌠ ц■ц∙ц√ц≈ ц≤ц≥ц ц⌡ ц°ц²ц·ц÷ | 208 \|\i \i +\i \i\| 96 | `abc defg hijk lmno ц═ц║ц╒цё ц╓ц╔ц╕ц╖ ц╗ц╘ц╙ц╚ ц╛ц╜ц╝ц╞ | 224 \|\i \i +\i \i\| 112 | pqrs tuvw xyz{ |}~ ц╟ц╠ц╡цЁ ц╢ц╣ц╤ц╥ ц╦ц╧ц╨ц╩ ц╪ц╫ц╬ц© | 240 \|\i \i +} + + FOURTH SECTION: Key bindings: + + Section names you must provide: + + :main For editing window + :prompt For prompt lines + :query For single-character query lines + :querya Singe-character query for quote + :querysr Search & Replace single-character query + :shell For shell windows + :vtshell For terminal emulator windows + + Other sections may be given as well for organization purposes or for + use with the '-keymap' option. + + Use: + :inherit name To copy the named section into the current one + :delete key To delete a key sequence from the current section + + Keys: + + Use U+12345 for specific unicode character + Use ^@ through ^_ and ^? for Ctrl chars + Use SP for space + Use a TO b to generate a range of characters + Use MDOWN, MDRAG, MUP, M2DOWN, M2DRAG, M2UP, M3DOWN, M3DRAG, M3UP for mouse + Use MWDOWN, MWUP for wheel mouse motion + Use ^# for 0x9B (for Amiga). But warning: this breaks UTF-8 keyboards. + + You can also use termcap string capability names. For example: + + .ku Up + .kd Down + .kl Left + .kr Right + .kh Home + .kH End + .kI Insert + .kD Delete + .kP PgUp + .kN PgDn + .k1 - .k9 F1 - F9 + .k0 F0 or F10 + .k; F10 + + Macros: + + Simple macros can be made by comma seperating 2 or more command names. For + example: + + eof,bol ^T Z Goto beginning of last line + + Also quoted matter is typed in literally: + + bol,">",dnarw .k1 Quote news article line + + Macros may cross lines if they end with , + + Commands or named macros may be created with :def. For example, you can + use: + + :def foo eof,bol + + To define a command foo which will goto the beginning of the last line. + +:windows Bindings common to all windows +type U+0 TO U+10FFFF +abort ^C Abort window +abort ^K Q +abort ^K ^Q +abort ^K q +arg ^K \ Repeat next command +explode ^K I Show all windows or show only one window +explode ^K ^I +explode ^K i +help ^K H Help menu +help ^K ^H +help ^K h +hnext ^[ . Next help window +hprev ^[ , Previous help window +math ^[ m Calculator +math ^[ M Calculator + math ^[ ^M Calculator +msg ^[ h Display a message +msg ^[ H Display a message +msg ^[ ^H Display a message +nextw ^K N Goto next window +nextw ^K ^N +nextw ^K n +pgdn .kN Screen down +pgdn ^V +pgdn ^[ [ 6 ~ + pgdn ^# S +pgup .kP Screen up +pgup ^U +pgup ^[ [ 5 ~ + pgup ^# T +play ^K 0 TO 9 Execute macro +prevw ^K P Goto previous window +prevw ^K ^P +prevw ^K p +query ^K ? Macro query insert +record ^K [ Record a macro +retype ^R Refresh screen +rtn ^M Return +shell ^K Z Shell escape +shell ^K ^Z +shell ^K z +stop ^K ] Stop recording + Mouse handling +defmdown MDOWN Move the cursor to the mouse location +defmup MUP +defmdrag MDRAG Select a region of characters +defm2down M2DOWN Select the word at the mouse location +defm2up M2UP +defm2drag M2DRAG Select a region of words +defm3down M3DOWN Select the line at the mouse location +defm3up M3UP +defm3drag M3DRAG Select a region of lines +defmiddleup MIDDLEUP +defmiddledown MIDDLEDOWN Insert text + +xtmouse ^[ [ M Introduces an xterm mouse event +extmouse ^[ [ < Introduces an extended xterm mouse event + + Sample if/then/else macro + if,"char==65",then,"it's an A",else,"it's not an a",endif ^[ q + +:main Text editing window +:inherit windows + + Spell-check macros + + Ispell +:def ispellfile filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype +:def ispellword psh,nextword,markk,prevword,markb,filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;tr -d $SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;cat $SPLTMP;/bin/rm $SPLTMP",rtn,retype +:def aspellword psh,nextword,markk,prevword,markb,filt,"SPLTMP=ispell.tmp;cat >$SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;tr -d <$SPLTMP '\\012';/bin/rm $SPLTMP",rtn,retype,nextword + + +aspellfile ^[ l +aspellword ^[ n + + Compile + +:def compile mwind!,mfit!,querysave,query,scratch,"* Build Log *",rtn,bof,markb,eof," ",markk,blkdel,build + + Grep + +:def grep_find mwind!,mfit!,scratch,"* Grep Log *",rtn,bof,markb,eof," ",markk,blkdel,grep + + Man page + +:def man scratch,"* Man Page *",rtn,bof,markb,eof," ",markk,blkdel," ",ltarw,run,"man -P cat -S 2:3 " + + Shell windows + We load the already existing Startup Log first so that Shell does not inherit the current directory. + +:def shell1 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 1 *",rtn,vtbknd!,eof +:def shell2 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 2 *",rtn,vtbknd!,eof +:def shell3 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 3 *",rtn,vtbknd!,eof +:def shell4 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 4 *",rtn,vtbknd!,eof + + Macros allowed in shell window commands +:def shell_clear psh,bof,markb,eof,markk,blkdel +:def shell_parse parserr +:def shell_gparse gparse +:def shell_release release +:def shell_math maths +:def shell_typemath txt,math,"ins",rtn,rtn,txt,"\r",rtn +:def shell_rtn rtn +:def shell_edit edit +:def shell_dellin dellin +:def shell_cd cd +:def shell_pop popabort +:def shell_markb markb +:def shell_markk markk + + Split window version + :def shell1 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 1 *",rtn,vtbknd!,eof + :def shell2 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 2 *",rtn,vtbknd!,eof + :def shell3 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 3 *",rtn,vtbknd!,eof + :def shell4 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 4 *",rtn,vtbknd!,eof + + Here we guess some common key sequences which either do not have termcap + sequences or which are frequently wrong. Note that if the termcap entry is + correct, it will override these later on. + +paste ^[ ] 5 2 ; Base64 paste (obsolete) +brpaste ^[ [ 2 0 0 ~ Bracketed paste +brpaste_done ^[ [ 2 0 1 ~ Bracketed paste done + +insc ^[ [ 2 ~ +insc ^[ [ L SCO + +delch ^[ [ 3 ~ + +pgup ^[ [ I SCO + +pgdn ^[ [ G SCO + +home ^[ [ 1 ~ Putty, Linux, Cygwin +home ^[ [ H Xterm, Konsole, SCO +home ^[ O H gnome-terminal +home ^[ [ 7 ~ RxVT + home ^# SP A Amiga + +eol ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eol ^[ [ F Xterm, Konsole, SCO +eol ^[ O F gnome-terminal +eol ^[ [ 8 ~ RxVT + eol ^# SP @ Amiga + +rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ [ 1 ; 5 C Mark right Xterm +rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ [ 5 C Mark right Gnome-terminal + (Almost all termcap entries have ^[ O C as an arrow key). + rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ O C Mark right Putty Ctrl-rtarw +rtarw,ltarw,begin_marking,rtarw,toggle_marking ^[ O c Mark right RxVT Ctrl-rtarw + +ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ [ 1 ; 5 D Mark left +ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ [ 5 D Mark left + ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ O D Mark left Putty Ctrl-ltarw +ltarw,rtarw,begin_marking,ltarw,toggle_marking ^[ O d Mark left RxVT Ctrl-ltarw + +uparw,dnarw,begin_marking,uparw,toggle_marking ^[ [ 1 ; 5 A Mark up +uparw,dnarw,begin_marking,uparw,toggle_marking ^[ [ 5 A Mark up + uparw,dnarw,begin_marking,uparw,toggle_marking ^[ O A Mark up Putty Ctrl-uparw +uparw,dnarw,begin_marking,uparw,toggle_marking ^[ O a Mark up RxVT Ctrl-uparw + +dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ [ 1 ; 5 B Mark down +dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ [ 5 B Mark down + dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ O B Mark down Putty Ctrl-dnarw +dnarw,uparw,begin_marking,dnarw,toggle_marking ^[ O b Mark down RxVT Ctrl-dnarw + +blkdel,nmark ^[ [ 3 ; 5 - Gnome-terminal Ctrl-Del +blkdel,nmark ^[ [ 3 ; 5 ~ Xterm Ctrl-Del + +yank ^[ [ 2 ; 5 - Gnome-terminal Ctrl-Ins +yank ^[ [ 2 ; 5 ~ Xterm Ctrl-Ins + + Extra functions not really part of JOE user interface: + +delbol ^[ o Delete to beginning of line +delbol ^[ ^O Delete to beginning of line +dnslide ^[ z Scroll down one line +dnslide ^[ Z Scroll down one line +dnslide ^[ ^Z Scroll down one line +dnslide,dnslide,dnslide,dnslide MWDOWN +compile ^[ c Compile +compile ^[ C +compile ^[ ^C Compile +grep_find ^[ g Grep +grep_find ^[ G Grep +grep_find ^[ ^G Grep +execmd ^[ x Prompt for command to execute +execmd ^[ X Prompt for command to execute +execmd ^[ ^X Prompt for command to execute +finish ^[ ^I Complete word in document +finish ^[ ^M Complete word: used to be math +mwind!,mfit,jump,bol ^[ SP +isrch ^[ s Forward incremental search +isrch ^[ S Forward incremental search +isrch ^[ ^S Forward incremental search +notmod ^[ ~ Not modified +mwind,mfit,prevw,nxterr ^[ = To next error +parserr ^[ e Parse errors in current buffer +parserr ^[ E Parse errors in current buffer +parserr ^[ ^E Parse errors in current buffer +mwind,mfit,prevw,prverr ^[ - To previous error +rsrch ^[ r Backward incremental search +rsrch ^[ R Backward incremental search +rsrch ^[ ^R Backward incremental search +run ^[ ! Run a program in a window +tomarkb ^[ b Go to beginning of marked block +tomarkb ^[ ^B Go to beginning of marked block +tomarkk ^[ k Go to end of marked block +tomarkk ^[ ^K Go to end of marked block +tomarkk ^[ K Go to end of marked block +txt ^[ i Prompt for text and insert it +txt ^[ I Prompt for text and insert it +upslide ^[ w Scroll up one line +upslide ^[ ^W Scroll up one line +upslide ^[ W Scroll up one line +upslide,upslide,upslide,upslide MWUP +yank ^[ y Undelete text +yankpop ^[ ^Y Undelete text +yank ^[ Y Undelete text + + toggle_marking ^@ Ctrl-space block selection method +insc ^@ Ctrl-space used to insert a space + + bufed ^[ d Menu of buffers +nbuf ^[ v Next buffer +nbuf ^[ V Next buffer +nbuf ^[ ^V Next buffer +pbuf ^[ u Prev buffer +pbuf ^[ U Prev buffer +pbuf ^[ ^U Prev buffer + query ^[ q Quoted insert + byte ^[ n Goto byte + col ^[ c Goto column + abortbuf ^[ k Kill current buffer- don't mess with windows + ask ^[ a Ask to save current buffer + bop ^[ p Backwards paragraph + bos ^[ x Bottom of screen + copy ^[ ^W Copy block into yank + dupw ^[ \ Split window + eop ^[ n Forwards paragraph + format ^[ j Format paragraph ignore block + markl ^[ l Mark line + nmark ^[ @ Turn off ^KB ^KK + pop ^[ > Pop ^KB ^KK + psh ^[ < Push ^KB ^KK + swap ^[ x Swap ^KB and cursor + tomarkbk ^[ g Switch between beginning and end of marked + tos ^[ e Top of screen + tw0 ^[ 0 Kill current window (orphans buffer) + tw1 ^[ 1 Kill all other windows (orphans buffers) + uarg ^[ u Universal argument + yank ^[ ^Y Undelete previous text + yapp ^[ w Append next delete to previous yank + + Standard JOE user interface + +quote8 ^\ Enter Meta chars + quote ` Enter Ctrl chars +quote ^[ ' Enter Ctrl chars +quote ^Q + +backs ^? Backspace +backs ^H +backw ^O Backspace word +bknd ^K ' Shell window +blkcpy ^K C Copy marked block +blkcpy ^K ^C +blkcpy ^K c +blkdel ^K Y Delete marked block +blkdel ^K ^Y +blkdel ^K y +blkmove ^K M Move marked block +blkmove ^K ^M +blkmove ^K m +blksave ^K W Save marked block +blksave ^K ^W +blksave ^K w +bof ^K U Goto beginning of file +bof ^K ^U +bof ^K u + bol .kh Goto beginning of line + bol ^A + bol ^# SP A +home .kh +home ^A +center ^K A Center line +center ^K ^A +center ^K a +crawll ^K < Pan left +crawlr ^K > Pan right +delch .kD Delete character +delch ^D +deleol ^J Delete to end of line +dellin ^Y Delete entire line +delw ^W Delete word to right +dnarw .kd Go down +dnarw ^N +dnarw ^[ O B +dnarw ^[ [ B + dnarw ^# B +edit ^K E Edit a file +edit ^K ^E +edit ^K e +eof ^K V Go to end of file +eof ^K ^V +eof ^K v +eol .kH Go to end of line +eol .@7 +eol ^E +exsave ^K X Save and exit +exsave ^K ^X +exsave ^K x +ffirst ^K F Find first +ffirst ^K ^F +ffirst ^K f +filt ^K / Filter block + finish ^K ^M Complete text under cursor +fnext ^L Find next +fmtblk ^K J Format paragraphs in block +fmtblk ^K ^J +fmtblk ^K j +gomark ^[ 0 TO 9 Goto bookmark +groww ^K G Grow window +groww ^K ^G +groww ^K g +insc .kI Insert a space + insc ^@ +insf ^K R Insert a file +insf ^K ^R +insf ^K r +lindent ^K , Indent to left +line ^K L Goto line no. +line ^K ^L +line ^K l +ltarw .kl Go left +ltarw ^B +ltarw ^[ O D +ltarw ^[ [ D + ltarw ^# D +macros ^[ d Dump keyboard macros +macros ^[ ^D +markb ^K B Set beginning of marked block +markb ^K ^B +markb ^K b +markk ^K K Set end of marked block +markk ^K ^K +markk ^K k + mode ^T Options menu +menu,"root",rtn ^T +nextpos ^K = Goto next position in position history +nextword ^X Goto next word +open ^] Split line +prevpos ^K - Previous position in history +prevword ^Z Previous word +reload ^K ` Revert file +redo ^^ Redo changes +rindent ^K . Indent to right +rtarw .kr Go right +rtarw ^F +rtarw ^[ O C +rtarw ^[ [ C + rtarw ^# C +run ^K ! Run a shell command +save ^K D Save file +save ^K S +save ^K ^D +save ^K ^S +save ^K d +save ^K s +setmark ^[ ^[ Set bookmark +shrinkw ^K T Shrink window +shrinkw ^K ^T +shrinkw ^K t +splitw ^K O Split window +splitw ^K ^O +splitw ^K o +stat ^K SP Show status +stat ^K ^@ Show status +tag ^K ; Tags file search +tomatch ^G Goto matching parenthasis +undo ^_ Undo changes +uparw .ku Go up + uparw ^# A +uparw ^P +uparw ^[ O A +uparw ^[ [ A +shell1 ^[ [ 1 1 ~ +shell1 ^[ O P +shell1 ^[ [ [ A +shell1 .k1 +shell2 ^[ [ 1 2 ~ +shell2 ^[ O Q +shell2 ^[ [ [ B +shell2 .k2 +shell3 ^[ [ 1 3 ~ +shell3 ^[ O R +shell3 ^[ [ [ C +shell3 .k3 +shell4 ^[ [ 1 4 ~ +shell4 ^[ O S +shell4 ^[ [ [ D +shell4 .k4 + +:prompt Prompt windows +:inherit main +if,"byte>size",then,complete,complete,else,delch,endif ^D +complete ^I +dnarw,eol .kd Go down +dnarw,eol ^N +dnarw,eol ^[ O B +dnarw,eol ^[ [ B + dnarw,eol ^# B +uparw,eol .ku Go up + uparw,eol ^# A +uparw,eol ^P +uparw,eol ^[ O A +uparw,eol ^[ [ A + +:menu Selection menus +:inherit windows + +pgupmenu ^[ [ I + +pgdnmenu ^[ [ G + +bolmenu ^[ [ 1 ~ Putty, Linux, Cygwin +bolmenu ^[ [ H Xterm, Konsole +bolmenu ^[ O H gnome-terminal +bolmenu ^[ [ 7 ~ RxVT + bolmenu ^# SP A Amiga + +eolmenu ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eolmenu ^[ [ F Xterm, Konsole +eolmenu ^[ O F gnome-terminal +eolmenu ^[ [ 8 ~ RxVT + eolmenu ^# SP @ Amiga + +abort ^[ ^[ Why? +backsmenu ^? +backsmenu ^H +bofmenu ^K U +bofmenu ^K ^U +bofmenu ^K u +bolmenu .kh +bolmenu ^A +dnarwmenu .kd +dnarwmenu ^N +dnarwmenu ^[ [ B +dnarwmenu ^[ O B + dnarwmenu ^# B +dnarwmenu MWDOWN +eofmenu ^K V +eofmenu ^K ^V +eofmenu ^K v +eolmenu .kH +eolmenu ^E +ltarwmenu .kl +ltarwmenu ^B +ltarwmenu ^[ [ D +ltarwmenu ^[ O D + ltarwmenu ^# D +pgdnmenu .kN Screen down +pgdnmenu ^V +pgdnmenu ^[ [ 6 ~ + pgdnmenu ^# S +pgupmenu .kP Screen up +pgupmenu ^U +pgupmenu ^[ [ 5 ~ + pgupmenu ^# T +rtarwmenu .kr +rtarwmenu ^F +rtarwmenu ^[ [ C + rtarwmenu ^# C +rtarwmenu ^[ O C +rtn SP +rtn ^I +rtn ^K H +rtn ^K h +rtn ^K ^H +tabmenu ^I +uparwmenu .ku +uparwmenu ^P +uparwmenu ^[ [ A +uparwmenu ^[ O A + uparwmenu ^# A +uparwmenu MWUP +defm2down M2DOWN Hits return key + +:query Single-key query window +:inherit windows + +:querya Single-key query window for quoting +type U+0 TO U+10FFFF + +:querysr Search & replace query window +type U+0 TO U+10FFFF + +:shell Input to shell windows +:inherit main +"" ^C Abort +"" ^D Eof +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace + +:vtshell Input to ANSI shell windows +:inherit main +""  [ A +"" .ku +""  [ B +"" .kd +""  [ C +"" .kr +""  [ D +"" .kl +"" ^A BOL for bash +"" ^C Abort +"" ^D Eof +"" ^E EOL for bash +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace diff --git a/joe/etc/joe/jpicorc b/joe/etc/joe/jpicorc new file mode 100644 index 0000000..ce4828d --- /dev/null +++ b/joe/etc/joe/jpicorc @@ -0,0 +1,1074 @@ + + Initialization file for JOE + Super Pico + + JOE looks for this file in: + 1 - $HOME/.jpicorc + 2 - /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/jpicorc + + This file can include other files by placing the following include command + in the first column: + + :include filename + + FIRST SECTION: Default global options (these options can also be specified + on the command line. Also the NOXON, LINES, COLUMNS, DOPADDING and BAUD + options can be specified in environment variables): + + Put each option you want set in the first column: + + -option Sets the option + --option Clears the option + + -help_is_utf8 Set if help text is in UTF-8 format. Leave clear if it's a raw 8-bit format. + + -mid Cursor is recentered when scrolling is necessary + -left nn Amount to jump left when scrolling is necessary (-1 for 1/4 width) + -right nn Amount to jump right when scrolling is necessary (-1 for 1/4 width) + +-marking Text between ^KB and cursor is highlighted (use with -lightoff) + +-lightoff Turn off highlighting after block copy or move + + -asis Characters 128 - 255 shown as-is + +-force Force final newline when files are saved + + -nolocks If you don't want file locks to be used + + -nomodcheck Disable periodic checking of disk file newer than buffer + (this checking happens on save even with this option). + + -nocurdir Do not prompt with current directory + + -nobackups If you don't want backup files to be created + + -nodeadjoe If you don't want DEADJOE files to be created + + -break_hardlinks + Delete file before writing, to break hard links + (but don't break symbolic links). + + -break_links + Delete file before writing, to break hard links + and symbolic links. + +-exask ^KX always confirms file name + +-beep Beep on errors and when cursor goes past extremes + + -nosta Disable top-most status line + + -keepup %k and %c status line escape sequences updated frequently + + -pg nnn No. lines to keep for PgUp/PgDn + + -undo_keep nnn Number of undo records to keep. 0 for infinite. + + -csmode ^KF after a pervious search does a ^L instead + + -backpath path + Directory to store backup files (one space between 'backpath' and + the 'path', no trailing spaces or comments after the path). + + -floatmouse Clicking past end of line moves the cursor past the end + + -rtbutton Use the right mouse button for action, instead of the left + + -nonotice Disable copyright notice + + -noexmsg Disable exiting message ("File not changed so no updated needed") + + -noxon Attempt to turn off ^S/^Q processing + + -orphan Put extra files given on command line in orphaned buffers + instead of in windows + + -dopadding Output pad characters (for when there is no tty handshaking) + + -lines nnn Set no. screen lines + + -baud nnn Set baud rate for terminal optimizations + + -columns nnn Set no. screen columns + +-helpon Start with help on + + -skiptop nnn Don't use top nnn lines of the screen + +-notite Don't send terminal initialization and termination strings: prevents + restoration of screen on exit. + + -nolinefeeds Prevent sending linefeeds to preserve screen history in terminal + emulator's scroll-back buffer. + + -usetabs Use tabs to help optimize screen update. + +-assume_color Assume terminal has ANSI color support even if termcap/terminfo entry + says that it doesn't. This only applies if the terminal otherwise + looks like an ANSI terminal (support bold and capability starts with + ESC [). + +-assume_256color + Assume terminal has xterm 256 color support (ESC [ 38 ; 5 ; NNN m and + ESC [ 48 ; 5 ; NNN m). + +-guess_non_utf8 Allow guess of non-UTF-8 file encoding in a UTF-8 locale. + + -guess_utf8 Allow guess of UTF-8 file encoding in non-UTF-8 locale. + +-guess_utf16 Allow guess of UTF-16 encoding + +-guess_crlf Automatically detect MS-DOS files and set -crlf appropriately + +-guess_indent Guess indent character (tab or space). + +-menu_above Position menu/list above prompt when enabled. Otherwise position + below prompt. + +-transpose Transpose rows with columns in all menus. + + -menu_explorer Stay in menu system when a directory is selected (otherwise + directory is added to path and menu is closed). + + -menu_jump Jump into file selection menu when tab is hit (otherwise, menu + comes up, but cursor stays in file name prompt). + + -icase Search is case insensitive by default. + + -wrap Search wraps + +-autoswap Swap markb with markk when necessary + +-joe_state Use ~/.joe_state file + + -mouse Enable mouse support + + -joexterm If you are using Joe's modified Xterm, which makes -mouse + mode work better (cut & paste work transparently). + +-brpaste When JOE starts, send command to the terminal emulator that + enables "bracketed paste mode" (but only if the terminal + seems to have the ANSI command set). In this mode, text + pasted into the window is bracketed with ESC [ 2 0 0 ~ and + ESC [ 2 0 1 ~. + +-pastehack If keyboard input comes in as one block assume it's a mouse + paste and disable autoindent and wordwrap. + + -square Rectangular block mode + + -colors scheme + Set the default color scheme + +-restore Restore previous cursor position when files are opened + +-search_prompting + Search prompts with previous search request. + + -regex Search uses standard regular expression format (otherwise it uses + JOE format where all special characters have to be escaped). + + Status line definition strings. -lmsg defines the left-justified string and + -rmsg defines the right-justified string. The first character of -rmsg is + the background fill character. The following escape sequences can be used + in these strings: + + %t 12 hour time + %u 24 hour time + %T O for overtype mode, I for insert mode + %W W if wordwrap is enabled + %I A if autoindent is enabled + %X Rectangle mode indicator + %n File name + %m '(Modified)' if file has been changed + %* '*' if file has been changed + %R Read-only indicator + %r Row (line) number + %c Column number + %o Byte offset into file + %O Byte offset into file in hex + %a Ascii value of character under cursor + %A Ascii value of character under cursor in hex + %w Width of character under cursor + %p Percent of file cursor is at + %l No. lines in file + %k Entered prefix keys + %S '*SHELL*' if there is a shell running in window + %M Macro recording message + %y Syntax + %e Encoding + %x Context (first non-indented line going backwards) + %dd day + %dm month + %dY year + %Ename% value of environment variable + %Tname% value of option (ON or OFF for boolean options) + + These formatting escape sequences may also be given: + + \i Inverse + \u Underline + \b Bold + \d Dim + \f Blink + \l Italic + +-lmsg \i%k%T%W%I%X %n %m%y%R %M +-rmsg %S Row %4r Col %3c %t Ctrl-G for help +-smsg ** Line %r Col %c Offset %o(0x%O) %e %a(0x%A) Width %w ** +-zmsg ** Line %r Col %c Offset %o(0x%O) ** +-xmsg \i Joe's Own Editor %v (%b)\i + + Key sequence hints which are displayed in various prompts. +-aborthint ^C +-helphint ^G + + + SECOND SECTION: File name dependant local option settings: + + Each line with '*' in the first column indicates the modes which should be + set for files which match the regular expression. If more than one regular + expression matches the file name, then the last matching one is chosen. + + Here are the modes which can be set: + + -cpara >#!;*/% + Characters which can indent paragraphs. + + -cnotpara . + Characters which begin non-paragraph lines. + + + -encoding name + Set file coding (for example: utf-8, iso-8859-15) + + -syntax name + Specify syntax (syntax file called + 'name.jsf' will be loaded) + + -hex Hex editor mode + + -highlight Enable highlighting + + -smarthome Home key first moves cursor to beginning of line, + then if hit again, to first non-blank character. + + -indentfirst Smart home goes to first non-blank character first, + instead of going the beginning of line first. + + -smartbacks Backspace key deletes 'istep' number of + 'indentc's if cursor is at first non-space + character. + + -tab nnn Tab width + + -indentc nnn Indentation character (32 for space, 9 for tab) + + -istep nnn Number of indentation columns + + -spaces TAB inserts spaces instead of tabs. + + -purify Fix indentation if necessary for rindent, lindent and backs + (for example if indentation uses a mix of tabs and spaces, + and indentc is space, indentation will be converted to all + spaces). + + -crlf File uses CR-LF at ends of lines + + -wordwrap Wordwrap + + -nobackup If you don't want backup file to be created + + -autoindent Auto indent + + -overwrite Overtype mode + + -picture Picture mode (right arrow can go past end of lines) + + -lmargin nnn Left margin + + -rmargin nnn Right margin + + -flowed Put one space after intermediate paragraph lines + for support of flowed text. + + + -french One space after '.', '?' and '!' for wordwrap + and paragraph reformat instead of two. Joe + does not change the spacing you give, but + sometimes it must put spacing in itself. This + selects how much is inserted. + + -linums Enable line numbers on each line + + -hiline Highlight current line + + -rdonly File is read-only + + -keymap name + Keymap to use if not 'main' + + -lmsg Status line definition strings- + -rmsg see previous section for more info. + + -mfirst macro + Macro to execute on first modification + -mnew macro + Macro to execute when new files are loaded + -mold macro + Macro to execute when existing files are loaded + -msnew macro + Macro to execute when new files are saved + -msold macro + Macro to execute when existing files are saved + + Macros for the above options are in the same format as in the key + binding section below- but without the key name strings. + + These define the language syntax for ^G (goto matching delimiter): + + -highlighter_context Use the highlighter context for ^G + + -single_quoted Text between ' ' should be ignored (this is + not good for regular text since ' is + normally used alone as an apostrophe) + + -c_comment Text between /* */ should be ignored + + -cpp_comment Text after // should be ignored + + -pound_comment Text after # should be ignored + + -vhdl_comment Text after -- should be ignored + + -semi_comment Text after ; should be ignored + + -text_delimiters begin=end:if=elif=else=endif + + Define word delimiters + + Default local options +-highlight +-istep 4 + + Use this macro (put in first column) to have joe "p4 edit" a file you're about to change. + + -mfirst if,"rdonly && joe(sys,\"p4 edit \",name,rtn)",then,mode,"o",msg,"executed \"p4 edit ",name,"\"",rtn,endif + + File type table is now in a separate file. You can copy this file to ~/.joe and customize it. + +:include ftyperc + + SECOND and 1/2 SECTION: Option menu layout + + :defmenu name [macro] + Defines a menu. + The macro here is executed when the user hits backspace. + + macro string comment + A menu entry. Macro is any JOE macro- see "Macros:" + below. String is the label to be used for the macro + in the menu. It is in the same format as the -lmsg + and -rmsg options above. + + Two whitespace characters in a row begins a comment. + Use '% ' for a leading space in the string. + +:defmenu root +mode,"overwrite",rtn T Overtype %Zoverwrite% +mode,"hex",rtn ' Hex edit mode +mode,"autoindent",rtn I Autoindent %Zautoindent% +mode,"wordwrap",rtn W Word wrap %Zwordwrap% +mode,"tab",rtn D Tab width %Ztab% +mode,"lmargin",rtn L Left margin %Zlmargin% +mode,"rmargin",rtn R Right margin %Zrmargin% +mode,"square",rtn X Column mode %Zsquare% +mode,"indentc",rtn % % Indent char %Zindentc% +mode,"istep",rtn % % Indent step %Zistep% +menu,"indent",rtn = Indent select +mode,"highlight",rtn H Highlighting %Zhighlight% +mode,"crlf",rtn Z CR-LF/MS-DOS %Zcrlf% +mode,"linums",rtn N Line numbers %Zlinums% +mode,"hiline",rtn U Highlight line %Zhiline% +mode,"beep",rtn B Beep %Zbeep% +mode,"rdonly",rtn O Read only %Zrdonly% +mode,"syntax",rtn Y Syntax +mode,"colors",rtn S Color scheme +mode,"encoding",rtn E Encoding +mode,"asis",rtn % % Meta chars as-is +mode,"language",rtn V Language +mode,"picture",rtn P picture %Zpicture% +mode,"type",rtn F File type [%Ztype%] +mode,"title",rtn C Context %Ztitle% +menu,"more-options",rtn % % More options... + +:defmenu more-options menu,"root",rtn +menu,"^G",rtn % % ^G options +menu,"search",rtn % % search options +menu,"paragraph",rtn % % paragraph options +menu,"file",rtn % % file options +menu,"menu",rtn % % menu options +menu,"global",rtn % % global options +menu,"cursor",rtn % % cursor options +menu,"marking",rtn % % marking options +menu,"tab",rtn % % tab/indent options + +:defmenu indent menu,"root",rtn +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 1, Indent character = 32",rtn 1 Space +mode,"istep",rtn,"2",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 2, Indent character = 32",rtn 2 Spaces +mode,"istep",rtn,"3",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 3, Indent character = 32",rtn 3 Spaces +mode,"istep",rtn,"4",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 4, Indent character = 32",rtn 4 Spaces +mode,"istep",rtn,"5",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 5, Indent character = 32",rtn 5 Spaces +mode,"istep",rtn,"8",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 8, Indent character = 32",rtn 8 Spaces +mode,"istep",rtn,"10",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 10, Indent character = 32",rtn 0 Ten +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"9",rtn,msg,"Indent step = 1, Indent character = 9",rtn T Tab + +:defmenu menu menu,"more-options",rtn +mode,"menu_explorer",rtn % % Menu explorer %Zmenu_explorer% +mode,"menu_above",rtn % % Menu position %Zmenu_above% +mode,"menu_jump",rtn % % Jump into menu %Zmenu_jump% +mode,"transpose",rtn % % Transpose menus %Ztranspose% + +:defmenu ^G menu,"more-options",rtn +mode,"highlighter_context",rtn % % ^G uses highlighter context %Zhighlighter_context% +mode,"single_quoted",rtn % % ^G ignores '...' %Zsingle_quoted% +mode,"no_double_quoted",rtn % % ^G no ignore "..." %Zno_double_quoted% +mode,"c_comment",rtn % % ^G ignores /*...*/ %Zc_comment% +mode,"cpp_comment",rtn % % ^G ignores //... %Zcpp_comment% +mode,"pound_comment",rtn % % ^G ignores #... %Zpound_comment% +mode,"vhdl_comment",rtn % % ^G ignores --... %Zvhdl_comment% +mode,"semi_comment",rtn % % ^G ignores ;... %Zsemi_comment% +mode,"tex_comment",rtn % % ^G ignores %%... %Ztex_comment% +mode,"text_delimiters",rtn % % Text delimiters %Ztext_delimiters% + +:defmenu search menu,"more-options",rtn +mode,"icase",rtn % % Case insensitivity %Zicase% +mode,"wrap",rtn % % Search wraps %Zwrap% +mode,"search_prompting",rtn % % Search prompting %Zsearch_prompting% +mode,"csmode",rtn % % Continued search %Zcsmode% + +:defmenu paragraph menu,"more-options",rtn +mode,"french",rtn % % French spacing %Zfrench% +mode,"flowed",rtn % % Flowed text %Zflowed% +mode,"cpara",rtn % % Paragraph indent chars %Zcpara% +mode,"cnotpara",rtn % % Not-paragraph chars %Zcnotpara% + +:defmenu file menu,"more-options",rtn +mode,"restore",rtn % % Restore cursor %Zrestore% +mode,"guess_crlf",rtn % % Auto detect CR-LF %Zguess_crlf% +mode,"guess_indent",rtn % % Guess indent %Zguess_indent% +mode,"guess_non_utf8",rtn % % Guess non-UTF-8 %Zguess_non_utf8% +mode,"guess_utf8",rtn % % Guess UTF-8 %Zguess_utf8% +mode,"guess_utf16",rtn % % Guess UTF-16 %Zguess_utf16% +mode,"force",rtn % % Force last NL %Zforce% +mode,"nobackup",rtn % % No backup %Znobackup% + +:defmenu global menu,"more-options",rtn +mode,"nolocks",rtn % % Disable locks %Znolocks% +mode,"nobackups",rtn % % Disable backups %Znobackups% +mode,"nodeadjoe",rtn % % Disable DEADJOE %Znodeadjoe% +mode,"nomodcheck",rtn % % Disable mtime check %Znomodcheck% +mode,"nocurdir",rtn % % Disable current dir %Znocurdir% +mode,"exask",rtn % % Exit ask %Zexask% +mode,"nosta",rtn % % Disable status line %Znosta% +mode,"keepup",rtn % % Fast status line %Zkeepup% +mode,"break_hardlinks",rtn % % Break hard links %Zbreak_hardlinks% +mode,"break_links",rtn % % Break links %Zbreak_links% +mode,"joe_state",rtn % % Joe_state file %Zjoe_state% +mode,"undo_keep",rtn % % No. undo records %Zundo_keep% +mode,"backpath",rtn % % Path to backup files %Zbackpath% + +:defmenu cursor menu,"more-options",rtn +mode,"pg",rtn % % No. PgUp/PgDn lines %Zpg% +mode,"mid",rtn C Center on scroll %Zmid% +mode,"left",rtn L Columns to scroll left %Zleft% +mode,"right",rtn R Columns to scroll right %Zright% +mode,"floatmouse",rtn % % Click past end %Zfloatmouse% +mode,"rtbutton",rtn % % Right button %Zrtbutton% + +:defmenu marking menu,"more-options",rtn +mode,"autoswap",rtn % % Autoswap mode %Zautoswap% +mode,"marking",rtn % % Marking %Zmarking% +mode,"lightoff",rtn % % Auto unmask %Zlightoff% + +:defmenu tab menu,"more-options",rtn +mode,"smarthome",rtn % % Smart home key %Zsmarthome% +mode,"smartbacks",rtn % % Smart backspace %Zsmartbacks% +mode,"indentfirst",rtn % % To indent first %Zindentfirst% +mode,"purify",rtn % % Clean up indents %Zpurify% +mode,"spaces",rtn % % No tabs %Zspaces% + + THIRD SECTION: Named help screens: + + Use \i to turn on/off inverse video + Use \u to turn on/off underline + Use \b to turn on/off bold + Use \d to turn on/off dim + Use \f to turn on/off flash + Use \l to turn on/off italic + +{Basic +\|\b^K\b cut line \| \b^W\b find first \|\b^J\b justify \| \b^X\b save or discard, exit \| +\|\b^U\b paste \| \b^W^W\b find next \|\b^T\b spell \|\bEsc .\b for more help \| +} + +{Basic1 +\i Help Screen \|turn off with ^G prev. screen ^[, next screen ^[. \i +\i \i\|\uCURSOR\u \|\uGO TO\u \|\uBLOCK\u \|\uDELETE\u \|\uMISC\u \|\uEXIT\u \|\i \i +\i \i\|^B left ^F right \|^W^Y top of file \|^^ mark \|^D char \|^J format \|^X save \|\i \i +\i \i\|^P up ^N down \|^W^V end of file \|^K cut \|^K line \|^T spell \|^C status\|\i \i +\i \i\|^Y prev. screen \|^A beg. of line \|^U paste \|^[K >line \|^[T file \|^[Z shell\|\i \i +\i \i\|^V next screen \|^E end of line \|^[U cycle \|^[H word< \|^L refresh \|\uFILE\u \|\i \i +\i \i\|^Z prev. word \|^W^T line No. \|^O save \|^[D >word \|^[^[ options \|^O save \|\i \i +\i \i\|^SPACE next word \|^W find ^W^W next\|^[/ filter \|^[- undo \|^[= redo \|^R insert\|\i \i +} + +{Advanced +\i Help Screen \|turn off with ^G prev. screen ^[, next screen ^[. \i +\i \i\|\uMACROS\u \|\uWINDOW\u \|\uWINDOW\u \|\uSHELL\u \|\uMISC\u \|\i \i +\i \i\|^[( 0-9 Record \|^[O Split \|^[G Grow \|^[! Command \|^[X Execute command \|\i \i +\i \i\|^[) Stop \|^[E Edit file \|^[J Shrink \|^[' Window \|^[M Math \|\i \i +\i \i\|^[ 0-9 Play \|^[P Goto prev. \|\uQUOTE\u \|\uI-SEARCH\u \|^[C Center line \|\i \i +\i \i\|^[? Query \|^[N Goto next \|` Ctrl- \|^[R Backwards \|^[] to matching ( [ {\|\i \i +\i \i\|^[\\ Repeat \|^[I Zoom in/out \|^\\ Meta- \|^[S Forwards \|^[< ^[> pan left/rght\|\i \i +} + +{Search +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch sequences: \|\i \i +\i \i \\^ \\$ matches beg./end of line \\. match any single char \|\i \i +\i \i \\< \\> matches beg./end of word \\! match char or expression \|\i \i +\i \i \\( \\) grouping \\| match left or right \|\i \i +\i \i \\[a-z] matches one of a set \|\i \i +\i \i \\{1,3} match 1 - 3 occurrences \\? match 0 or 1 occurrence \|\i \i +\i \i \\+ match 1 or more occurrences \\* match 0 or more occurrences \|\i \i +\i \iReplace sequences: \|\i \i +\i \i \\& replaced with entire match \\1 - 9 replaced with Nth group \|\i \i +\i \i \\u \\l convert next to upper/lower \\U \\L case convert until \\E \|\i \i +} + +{Escape sequences +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iEscape sequences: \\x{10fff} Unicode code point \\p{Ll} Unicode category \|\i \i +\i \i \\i / \\I Identifier start \\t tab \\e escape \|\i \i +\i \i \\c / \\C Identifier continue \\n newline \\r carriage return \|\i \i +\i \i \\d / \\D Digit / Not a digit \\b backspace \\xFF hex character \|\i \i +\i \i \\w / \\W Word / Not a word \\a alert \\377 octal character \|\i \i +\i \i \\s / \\S Space / Not a space \\f formfeed \\\\ backslash \|\i \i +} + +{SearchOptions +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch options: \|\i \i +\i \i r Replace k Restrict search to highlighted block \|\i \i +\i \i i Ignore case b Search backwards instead of forwards \|\i \i +\i \i a Search across all loaded files \|\i \i +\i \i e Search across all files in Grep or Compile error list \|\i \i +\i \i w / n Allow / prevent wrap to start of file \|\i \i +\i \i x / y Search text is standard format / JOE format regular expression \|\i \i +\i \i nnn Perform exactly nnn replacements \|\i \i +} + +{Math +\i Help Screen \|turn off with ^G prev. screen ^[, next screen ^[. \i +\i \i \uCOMMANDS\u (hit ESC m for math) \uFUNCTIONS\u \|\i \i +\i \i hex hex display mode sin cos tab asin acos atan \|\i \i +\i \i dec decimal mode sinh cosh tanh asinh acosh atanh \|\i \i +\i \i ins type result into file sqrt cbrt exp ln log \|\i \i +\i \i eval evaluate block int floor ceil abs erg ergc \|\i \i +\i \i 0xff enter number in hex joe(..macro..) - runs an editor macro \|\i \i +\i \i 3e-4 floating point decimal \uBLOCK\u \|\i \i +\i \i a=10 assign a variable sum cnt Sum, count \|\i \i +\i \i 2+3:ins multiple commands avg dev Average, std. deviation \|\i \i +\i \i e pi constants \uOPERATORS\u \|\i \i +\i \i ans previous result ! ^ * / % + - < <= > >= == != && || ? :\|\i \i +} + +{Names +\i Help Screen \|turn off with ^G prev. screen ^[, next screen ^[. \i +\i \i Hit TAB at file name prompts to generate menu of file names \|\i \i +\i \i Or use up/down keys to access history of previously entered names \|\i \i +\i \i Special file names: \|\i \i +\i \i !command Pipe in/out of a shell command \|\i \i +\i \i >>filename Append to a file \|\i \i +\i \i - Read/Write to/from standard I/O \|\i \i +\i \i filename,START,SIZE Read/Write a part of a file/device \|\i \i +\i \i Give START/SIZE in decimal (255), octal (0377) or hex (0xFF) \|\i \i +} + +{Joe +\i Help Screen \|turn off with ^G prev. screen ^[, next screen ^[. \i +\i \i Send bug reports to: http://sourceforge.net/projects/joe-editor \|\i \i +\i \i \|\i \i +\i \i default joerc file is here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc \|\i \i +\i \i default syntax and i18n files are here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/joe \|\i \i +\i \i additional documentation can be found here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/doc/joe \|\i \i +} + +{CharTable +\i Help Screen \|turn off with ^G prev. screen ^[, \i +\i \i\| Dec \u 0123 4567 8901 2345 0123 4567 8901 2345 \u Dec \|\i \i +\i \i\| | | \|\i \i +\i \i\| 0 | \u@ABC\u \uDEFG\u \uHIJK\u \uLMNO\u \i\u@ABC\u\i \i\uDEFG\u\i \i\uHIJK\u\i \i\uLMNO\u\i | 128 \|\i \i +\i \i\| 16 | \uPQRS\u \uTUVW\u \uXYZ[\u \u\\]^_\u \i\uPQRS\u\i \i\uTUVW\u\i \i\uXYZ[\u\i \i\u\\]^_\u\i | 144 \|\i \i +\i \i\| 32 | !"# $%&' ()*+ ,-./ ═║╒ё ╓╔╕╖ ╗╘╙╚ ╛╜╝╞ | 160 \|\i \i +\i \i\| 48 | 0123 4567 89:; <=>? ╟╠╡Ё ╢╣╤╥ ╦╧╨╩ ╪╫╬© | 176 \|\i \i +\i \i\| 64 | @ABC DEFG HIJK LMNO юабц дефг хийк лмно | 192 \|\i \i +\i \i\| 80 | PQRS TUVW XYZ[ \\]^_ пярс тужв ьызш эщчъ | 208 \|\i \i +\i \i\| 96 | `abc defg hijk lmno ЮАБЦ ДЕФГ ХИЙК ЛМНО | 224 \|\i \i +\i \i\| 112 | pqrs tuvw xyz{ |}~ ПЯРС ТУЖВ ЬЫЗШ ЭЩЧЪ | 240 \|\i \i +} + + FOURTH SECTION: Key bindings: + + Section names you must provide: + + :main For editing window + :prompt For prompt lines + :query For single-character query lines + :querya Singe-character query for quote + :querysr Search & Replace single-character query + :shell For shell windows + :vtshell For terminal emulator windows + + Other sections may be given as well for organization purposes or for + use with the '-keymap' option. + + Use: + :inherit name To copy the named section into the current one + :delete key To delete a key sequence from the current section + + Keys: + + Use ^@ through ^_, ^# and ^? for Ctrl chars + Use SP for space + Use a TO b to generate a range of characters + Use MDOWN, MDRAG, MUP, M2DOWN, M2DRAG, M2UP, M3DOWN, M3DRAG, M3UP for mouse + Use MWDOWN, MWUP for wheel mouse motion + + You can also use termcap string capability names. For example: + + .ku Up + .kd Down + .kl Left + .kr Right + .kh Home + .kH End + .kI Insert + .kD Delete + .kP PgUp + .kN PgDn + .k1 - .k9 F1 - F9 + .k0 F0 or F10 + .k; F10 + + Macros: + + Simple macros can be made by comma seperating 2 or more command names. For + example: + + eof,bol ^T Z Goto beginning of last line + + Also quoted matter is typed in literally: + + bol,">",dnarw .k1 Quote news article line + + Macros may cross lines if they end with , + + Commands or named macros may be created with :def. For example, you can + use: + + :def foo eof,bol + + To define a command foo which will goto the beginning of the last line. + +:windows Bindings common to all windows +type U+0 TO U+10FFFF +abort ^C Abort window +arg ^[ \ Repeat next command +explode ^[ I Show all windows or show only one window +explode ^[ ^I +explode ^[ i +help ^G Help menu +help .k1 +hnext ^[ . Next help window +hprev ^[ , Previous help window +math ^[ m Calculator +math ^[ M Calculator +math ^[ ^M Calculator +nextw ^[ N Goto next window +nextw ^[ ^N +nextw ^[ n +pgdn .kN Screen down +pgdn ^V +pgdn ^[ [ 6 ~ + pgdn ^# S +pgup .kP Screen up +pgup ^Y +pgup ^[ [ 5 ~ + pgup ^# T +play ^[ 0 TO 9 Execute macro +prevw ^[ P Goto previous window +prevw ^[ ^P +prevw ^[ p +query ^[ ? Macro query insert +record ^[ ( Record a macro +retype ^L Refresh screen +rtn ^M Return +shell ^[ z +shell ^[ Z +shell ^[ ^Z +stop ^[ ) Stop recording + Mouse handling +defmdown MDOWN Move the cursor to the mouse location +defmup MUP +defmdrag MDRAG Select a region of characters +defm2down M2DOWN Select the word at the mouse location +defm2up M2UP +defm2drag M2DRAG Select a region of words +defm3down M3DOWN Select the line at the mouse location +defm3up M3UP +defm3drag M3DRAG Select a region of lines +defmiddleup MIDDLEUP +defmiddledown MIDDLEDOWN Insert text + +xtmouse ^[ [ M Introduces an xterm mouse event +extmouse ^[ [ < Introduces an extended xterm mouse event + + +:main Text editing window +:inherit windows + + Spell-check macros + + Ispell +:def ispellfile filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype +:def ispellword psh,nextword,markk,prevword,markb,filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;tr -d $SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;cat $SPLTMP;/bin/rm $SPLTMP",rtn,retype +:def aspellword psh,nextword,markk,prevword,markb,filt,"SPLTMP=ispell.tmp;cat >$SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;tr -d <$SPLTMP '\\012';/bin/rm $SPLTMP",rtn,retype,nextword + +ispellword ^T +ispellfile ^[ T Spell check word +ispellfile ^[ t +ispellfile ^[ ^T + + Compile macro + +:def compile querysave,query,scratch,"* Build Log *",rtn,markb,eof," ",markk,blkdel,build + + Grep + +:def grep_find scratch,"* Grep Log *",rtn,bof,markb,eof," ",markk,blkdel,grep + + Man page + +:def man scratch,"* Man Page *",rtn,bof,markb,eof," ",markk,blkdel," ",ltarw,run,"man -P cat -S 2:3 " + + Shell windows + We load the already existing Startup Log first so that Shell does not inherit the current directory. + +:def shell1 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 1 *",rtn,vtbknd!,eof +:def shell2 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 2 *",rtn,vtbknd!,eof +:def shell3 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 3 *",rtn,vtbknd!,eof +:def shell4 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 4 *",rtn,vtbknd!,eof + + Macros allowed in shell window commands +:def shell_clear psh,bof,markb,eof,markk,blkdel +:def shell_parse parserr +:def shell_gparse gparse +:def shell_release release +:def shell_math maths +:def shell_typemath txt,math,"ins",rtn,rtn,txt,"\r",rtn +:def shell_rtn rtn +:def shell_edit edit +:def shell_dellin dellin +:def shell_cd cd +:def shell_pop popabort +:def shell_markb markb +:def shell_markk markk + + Split window version + :def shell1 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 1 *",rtn,vtbknd!,eof + :def shell2 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 2 *",rtn,vtbknd!,eof + :def shell3 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 3 *",rtn,vtbknd!,eof + :def shell4 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 4 *",rtn,vtbknd!,eof + +paste ^[ ] 5 2 ; Base64 paste (obsolete) +brpaste ^[ [ 2 0 0 ~ Bracketed paste +brpaste_done ^[ [ 2 0 1 ~ Bracketed paste done + +insc ^[ [ 2 ~ +insc ^[ [ L SCO + +delch ^[ [ 3 ~ + +pgup ^[ [ I SCO + +pgdn ^[ [ G SCO + +home ^[ [ 1 ~ Putty, Linux, Cygwin +home ^[ [ H Xterm, Konsole, SCO +home ^[ O H gnome-terminal +home ^[ [ 7 ~ RxVT + home ^# SP A Amiga + +eol ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eol ^[ [ F Xterm, Konsole, SCO +eol ^[ O F gnome-terminal +eol ^[ [ 8 ~ RxVT + eol ^# SP @ Amiga + + ask,query,lose,query,abortbuf ^X Exit after many questions +ask,query,exsave ^X Exit +backs ^? Backspace +backs ^H +backw ^[ H Backspace word +backw ^[ ^? +backw ^[ ^H +backw ^[ h +bknd ^[ ' Shell window +bof ^[ Y Goto beginning of file +bof ^[ ^Y +bof ^[ y +home .kh Goto beginning of line +home ^A +home ^[ [ H +home ^[ [ 1 ~ +center ^[ ^C Center line +center ^[ c +delch .kD Delete character +delch ^D +deleol ^[ K Delete to end of line +deleol ^[ ^K +deleol ^[ k +delw ^[ ^D Delete word +delw ^[ d +dnarw .kd Go down +dnarw ^N +dnarw ^[ O B +dnarw ^[ [ B + dnarw ^# B +dnslide,dnslide,dnslide,dnslide MWDOWN +drop,msg,"Mark set",rtn ^^ Drop anchor + toggle_marking ^^ Marking +edit ^[ E Edit a file +edit ^[ ^E +edit ^[ e +eof ^[ V Go to end of file +eof ^[ ^V +eof ^[ v +eol .kH Go to end of line +eol .@7 +eol ^E +eol ^[ [ F +eol ^[ [ 4 ~ +execmd ^[ X Prompt for command to execute +execmd ^[ ^X Prompt for command to execute +execmd ^[ x Prompt for command to execute +ffirst ^W Find first +fnext ^[ w +fnext ^[ W +filt ^[ / Filter block though file +psh,markk,fmtblk ^J Format paragraphs in block +groww ^[ G Grow window +groww ^[ ^G +groww ^[ g +insc .kI Insert a space +insf ^R Insert a file +isrch ^[ S Forward incremental search +isrch ^[ ^S Forward incremental search +isrch ^[ s Forward incremental search +line ^[ L Goto line no. +line ^[ ^L +line ^[ l +line ^_ +ltarw .kl Go left +ltarw ^B +ltarw ^[ O D +ltarw ^[ [ D + ltarw ^# D + mode ^[ ^[ Options menu +menu,"root",rtn ^[ ^[ +nextword ^@ Goto next word +open ^] Split line +prevword ^Z Previous word +picokill ^K Pico kill function +quote ` Enter Ctrl chars +quote8 ^\ Enter Meta chars +redo ^[ = Redo changes +rsrch ^[ R Backward incremental search +rsrch ^[ ^R Backward incremental search +rsrch ^[ r Backward incremental search +rtarw .kr Go right +rtarw ^F +rtarw ^[ O C +rtarw ^[ [ C + rtarw ^# C +run ^[ ! Run a program in a window +stat ^C Cursor position status +psh,markk,blksave,query ^O Save file +crawll ^[ < Pan left +crawlr ^[ > Pan right +shrinkw ^[ J Shrink window +shrinkw ^[ ^J +shrinkw ^[ j +splitw ^[ ^O Split window +splitw ^[ o +tag ^[ ; Tags file search +tomatch ^[ ] To matching delimiter +undo ^[ - Undo changes +uparw .ku Go up +uparw ^P +uparw ^[ O A +uparw ^[ [ A + uparw ^# A +upslide,upslide,upslide,upslide MWUP +yank ^U Paste +yankpop ^[ U Select yanked text +yankpop ^[ ^U +yankpop ^[ u +shell1 ^[ [ 1 1 ~ +shell1 ^[ O P +shell1 ^[ [ [ A +shell1 .k1 +shell2 ^[ [ 1 2 ~ +shell2 ^[ O Q +shell2 ^[ [ [ B +shell2 .k2 +shell3 ^[ [ 1 3 ~ +shell3 ^[ O R +shell3 ^[ [ [ C +shell3 .k3 +shell4 ^[ [ 1 4 ~ +shell4 ^[ O S +shell4 ^[ [ [ D +shell4 .k4 + +:prompt Prompt windows +:inherit main +abort ^C +complete ^I +cancel,bof ^Y +cancel,eof ^V +cancel,line ^T +cancel,fnext ^W + cancel,bop ^W +cancel,eop ^O +dnarw,eol .kd Go down +dnarw,eol ^N +dnarw,eol ^[ O B +dnarw,eol ^[ [ B + dnarw,eol ^# B +uparw,eol .ku Go up + uparw,eol ^# A +uparw,eol ^P +uparw,eol ^[ O A +uparw,eol ^[ [ A + +:menu Selection menus +:inherit windows + +pgupmenu ^[ [ I + +pgdnmenu ^[ [ G + +bolmenu ^[ [ 1 ~ Putty, Linux, Cygwin +bolmenu ^[ [ H Xterm, Konsole +bolmenu ^[ O H gnome-terminal +bolmenu ^[ [ 7 ~ RxVT + bolmenu ^# SP A Amiga + +eolmenu ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eolmenu ^[ [ F Xterm, Konsole +eolmenu ^[ O F gnome-terminal +eolmenu ^[ [ 8 ~ RxVT + eolmenu ^# SP @ Amiga + +abort ^[ ^[ +backsmenu ^? +backsmenu ^H +bofmenu ^K U +bofmenu ^K ^U +bofmenu ^K u +bolmenu .kh +bolmenu ^A +dnarwmenu .kd +dnarwmenu ^N +dnarwmenu ^[ [ B +dnarwmenu ^[ O B + dnarwmenu ^# B +eofmenu ^K V +eofmenu ^K ^V +eofmenu ^K v +eolmenu .kH +eolmenu ^E +ltarwmenu .kl +ltarwmenu ^B +ltarwmenu ^[ [ D + ltarwmenu ^# D +ltarwmenu ^[ O D +pgdnmenu .kN Screen down +pgdnmenu ^V +pgdnmenu ^[ [ 6 ~ + pgdnmenu ^# S +pgupmenu .kP Screen up +pgupmenu ^Y +pgupmenu ^[ [ 5 ~ + pgupmenu ^# T +rtarwmenu .kr +rtarwmenu ^F +rtarwmenu ^[ [ C + rtarwmenu ^# C +rtarwmenu ^[ O C +rtn SP +rtn ^I +rtn ^K H +rtn ^K h +rtn ^K ^H +tabmenu ^I +uparwmenu .ku +uparwmenu ^P +uparwmenu ^[ [ A + uparwmenu ^# A +uparwmenu ^[ O A +defm2down M2DOWN Hits return key + +:query Single-key query window +:inherit windows + +:querya Single-key query window for quoting +type U+0 TO U+10FFFF + +:querysr Search & replace query window +type U+0 TO U+10FFFF + +:shell Input to shell windows +:inherit main +"" ^C Abort +"" ^D Eof +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace + +:vtshell Input to ANSI shell windows +:inherit main +""  [ A +"" .ku +""  [ B +"" .kd +""  [ C +"" .kr +""  [ D +"" .kl +"" ^A BOL for bash +"" ^C Abort +"" ^D Eof +"" ^E EOL for bash +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace diff --git a/joe/etc/joe/jstarrc b/joe/etc/joe/jstarrc new file mode 100644 index 0000000..20f4427 --- /dev/null +++ b/joe/etc/joe/jstarrc @@ -0,0 +1,1160 @@ + + Initialization file for JOE + WordStar / Turbo-C Joe + + JOE looks for this file in: + 1 - $HOME/.jstarrc + 2 - /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/jstarrc + + This file can include other files by placing the following include command + in the first column: + + :include filename + + FIRST SECTION: Default global options (these options can also be specified + on the command line. Also the NOXON, LINES, COLUMNS, DOPADDING and BAUD + options can be specified in environment variables): + + -option Sets the option + --option Clears the option + + -help_is_utf8 Set if help text is in UTF-8 format. Leave clear if it's a raw 8-bit format. + + -mid Cursor is recentered when scrolling is necessary + -left nn Amount to jump left when scrolling is necessary (-1 for 1/4 width) + -right nn Amount to jump right when scrolling is necessary (-1 for 1/4 width) + -marking Text between ^KB and cursor is highlighted (use with -lightoff) + -asis Characters 128 - 255 shown as-is + -force Force final newline when files are saved + -nolocks If you don't want file locks to be used + -nomodcheck Disable periodic checking of disk file newer than buffer + (this checking happens on save even with this option). + -nocurdir Do not prompt with current directory + -nobackups If you don't want backup files to be created + -nodeadjoe If you don't want DEADJOE files to be created + -break_hardlinks + Delete file before writing, to break hard links + (but don't break symbolic links). + + -break_links + Delete file before writing, to break hard links + and symbolic links. + + -lightoff Turn off highlighting after block copy or move + -exask ^KX always confirms file name + -beep Beep on errors and when cursor goes past extremes + -nosta Disable top-most status line + -keepup %k and %c status line escape sequences updated frequently + -pg nnn No. lines to keep for PgUp/PgDn + -undo_keep nnn Number of undo records to keep. 0 for infinite. + + -csmode ^KF after a pervious search does a ^L instead + + -backpath path + Directory to store backup files (one space between 'backpath' and + the 'path', no trailing spaces or comments after the path). + + -floatmouse Clicking past end of line moves the cursor past the end + -rtbutton Use the right mouse button for action, instead of the left + -nonotice Disable copyright notice + -noexmsg Disable exiting message ("File not changed so no updated needed") + +-noxon Attempt to turn off ^S/^Q processing + -orphan Put extra files given on command line in orphaned buffers + instead of in windows + -dopadding Output pad characters (for when there is no tty handshaking) + -lines nnn Set no. screen lines + -baud nnn Set baud rate for terminal optimizations + -columns nnn Set no. screen columns + -helpon Start with help on + -skiptop nnn Don't use top nnn lines of the screen + +-notite Don't send terminal initialization and termination strings: prevents + restoration of screen on exit. + + -nolinefeeds Prevent sending linefeeds to preserve screen history in terminal + emulator's scroll-back buffer. + + -usetabs Use tabs to help optimize screen update. + +-assume_color Assume terminal has ANSI color support even if termcap/terminfo entry + says that it doesn't. This only applies if the terminal otherwise + looks like an ANSI terminal (support bold and capability starts with + ESC [). + +-assume_256color + Assume terminal has xterm 256 color support (ESC [ 38 ; 5 ; NNN m and + ESC [ 48 ; 5 ; NNN m). + +-guess_non_utf8 Allow guess of non-UTF-8 file encoding in a UTF-8 locale. + + -guess_utf8 Allow guess of UTF-8 file encoding in non-UTF-8 locale. + +-guess_utf16 Allow guess of UTF-16 encoding + +-guess_crlf Automatically detect MS-DOS files and set -crlf appropriately + +-guess_indent Guess indent character (tab or space). + +-menu_above Position menu/list above prompt when enabled. Otherwise position + below prompt. + +-transpose Transpose rows with columns in all menus. + + -menu_explorer Stay in menu system when a directory is selected (otherwise + directory is added to path and menu is closed). + + -menu_jump Jump into file selection menu when tab is hit (otherwise, menu + comes up, but cursor stays in file name prompt). + + + -icase Search is case insensitive by default. + + -wrap Search wraps + + -autoswap Swap markb with markk when necessary + +-joe_state Use ~/.joe_state file + + -mouse Enable mouse support + + -joexterm If you are using Joe's modified Xterm, which makes -mouse + mode work better (cut & paste work transparently). + +-brpaste When JOE starts, send command to the terminal emulator that + enables "bracketed paste mode" (but only if the terminal + seems to have the ANSI command set). In this mode, text + pasted into the window is bracketed with ESC [ 2 0 0 ~ and + ESC [ 2 0 1 ~. + +-pastehack If keyboard input comes in as one block assume it's a mouse + paste and disable autoindent and wordwrap. + + -square Rectangular block mode + + -colors scheme + Set the default color scheme + +-restore Restore previous cursor position when files are opened + + -search_prompting + Search prompts with previous search request. + + -regex Search uses standard regular expression format (otherwise it uses + JOE format where all special characters have to be escaped). + + Status line definition strings. -lmsg defines the left-justified string and + -rmsg defines the right-justified string. The first character of -rmsg is + the background fill character. The following escape sequences can be used + in these string: + + %t 12 hour time + %u 24 hour time + %T O for overtype mode, I for insert mode + %W W if wordwrap is enabled + %I A if autoindent is enabled + %X Rectangle mode indicator + %n File name + %m '(Modified)' if file has been changed + %* '*' if file has been changed + %R Read-only indicator + %r Row (line) number + %c Column number + %o Byte offset into file + %O Byte offset into file in hex + %a Ascii value of character under cursor + %A Ascii value of character under cursor in hex + %w Width of character under cursor + %p Percent of file cursor is at + %l No. lines in file + %k Entered prefix keys + %S '*SHELL*' if there is a shell running in window + %M Macro recording message + %y Syntax + %e Encoding + %x Context (first non-indented line going backwards) + %dd day + %dm month + %dY year + %Ename% value of environment variable + %Tname% value of option (ON or OFF for boolean options) + + The formatting escape sequences may also be given: + + \i Inverse + \u Underline + \b Bold + \d Dim + \f Blink + \l Italic + +-lmsg \i%k%T%W%I%X %n %m%y%R %M +-rmsg %S Row %4r Col %3c %t Ctrl-J for help +-smsg ** Line %r Col %c Offset %o(0x%O) %e %a(0x%A) Width %w ** +-zmsg ** Line %r Col %c Offset %o(0x%O) ** +-xmsg \i Joe's Own Editor %v (%b) ** Type \bCtrl-K Q\b to exit or \bCtrl-J\b for help **\i + + Key sequence hints which are displayed in various prompts. +-aborthint ^C +-helphint ^J + + + SECOND SECTION: File name dependant local option settings: + + Each line with '*' in the first column indicates the modes which should be + files which match the regular expression. If more than one regular + expression matches the file name, than the last matching one is chosen. + + Here is a list of modes which can be set: + + -cpara >#!;*/% + Characters which can indent paragraphs. + + -cnotpara . + Characters which begin non-paragraph lines. + + + -encoding name + Set file coding (for example: utf-8, iso-8859-15) + + -syntax name + Specify syntax (syntax file called + 'name.jsf' will be loaded) + + -hex Hex editor mode + + -highlight Enable highlighting + + -smarthome Home key first moves cursor to beginning of line, + then if hit again, to first non-blank character. + + -indentfirst Smart home goes to first non-blank character first, + instead of going the beginning of line first. + + -smartbacks Backspace key deletes 'istep' number of + 'indentc's if cursor is at first non-space + character. + + -tab nnn Tab width + + -indentc nnn Indentation character (32 for space, 9 for tab) + + -istep nnn Number of indentation columns + + -spaces TAB inserts spaces instead of tabs. + + -purify Fix indentation if necessary for rindent, lindent and backs + (for example if indentation uses a mix of tabs and spaces, + and indentc is space, indentation will be converted to all + spaces). + + -crlf File uses CR-LF at ends of lines + + -wordwrap Wordwrap + + -nobackup If you don't want backup file to be created + + -autoindent Auto indent + + -overwrite Overtype mode + + -picture Picture mode (right arrow can go past end of lines) + + -lmargin nnn Left margin + + -rmargin nnn Right margin + + -flowed Put one space after intermediate paragraph lines + for support of flowed text. + + + -french One space after '.', '?' and '!' for wordwrap + and paragraph reformat instead of two. Joe + does not change the spacing you give, but + sometimes it must put spacing in itself. This + selects how much is inserted. + + -linums Enable line numbers on each line + + -hiline Highlight current line + + -rdonly File is read-only + + -keymap name + Keymap to use if not 'main' + + -lmsg Status line definition strings- + -rmsg see previous section for more info. + + -mfirst macro + Macro to execute on first modification + -mnew macro + Macro to execute when new files are loaded + -mold macro + Macro to execute when existing files are loaded + -msnew macro + Macro to execute when new files are saved + -msold macro + Macro to execute when existing files are saved + + Macros for the above options are in the same format as in the key + binding section below- but without the key name strings. + + These define the language syntax for ^G (goto matching delimiter): + + -highlighter_context Use the highlighter context for ^G + + -single_quoted Text between ' ' should be ignored (this is + not good for regular text since ' is + normally used alone as an apostrophe) + + -c_comment Text between /* */ should be ignored + + -cpp_comment Text after // should be ignored + + -pound_comment Text after # should be ignored + + -vhdl_comment Text after -- should be ignored + + -semi_comment Text after ; should be ignored + + -text_delimiters begin=end:if=elif=else=endif + + Define word delimiters + + + Default local options +-highlight +-istep 4 + + Use this macro (put in first column) to have joe "p4 edit" a file you're about to change. + + -mfirst if,"rdonly && joe(sys,\"p4 edit \",name,rtn)",then,mode,"o",msg,"executed \"p4 edit ",name,"\"",rtn,endif + + File type table is now in a separate file. You can copy this file to ~/.joe and customize it. + +:include ftyperc + + SECOND and 1/2 SECTION: Option menu layout + + :defmenu name [macro] + Defines a menu. + The macro here is executed when the user hits backspace. + + macro string comment + A menu entry. Macro is any JOE macro- see "Macros:" + below. String is the label to be used for the macro + in the menu. It is in the same format as the -lmsg + and -rmsg options above. + + Two whitespace characters in a row begins a comment. + Use '% ' for a leading space in the string. + +:defmenu root +mode,"overwrite",rtn T Overtype %Zoverwrite% +mode,"hex",rtn ' Hex edit mode +mode,"autoindent",rtn I Autoindent %Zautoindent% +mode,"wordwrap",rtn W Word wrap %Zwordwrap% +mode,"tab",rtn D Tab width %Ztab% +mode,"lmargin",rtn L Left margin %Zlmargin% +mode,"rmargin",rtn R Right margin %Zrmargin% +mode,"square",rtn X Column mode %Zsquare% +mode,"indentc",rtn % % Indent char %Zindentc% +mode,"istep",rtn % % Indent step %Zistep% +menu,"indent",rtn = Indent select +mode,"highlight",rtn H Highlighting %Zhighlight% +mode,"crlf",rtn Z CR-LF/MS-DOS %Zcrlf% +mode,"linums",rtn N Line numbers %Zlinums% +mode,"hiline",rtn U Highlight line %Zhiline% +mode,"beep",rtn B Beep %Zbeep% +mode,"rdonly",rtn O Read only %Zrdonly% +mode,"syntax",rtn Y Syntax +mode,"colors",rtn S Color scheme +mode,"encoding",rtn E Encoding +mode,"asis",rtn % % Meta chars as-is +mode,"language",rtn V Language +mode,"picture",rtn P picture %Zpicture% +mode,"type",rtn F File type [%Ztype%] +mode,"title",rtn C Context %Ztitle% +menu,"more-options",rtn % % More options... + +:defmenu more-options menu,"root",rtn +menu,"^G",rtn % % ^G options +menu,"search",rtn % % search options +menu,"paragraph",rtn % % paragraph options +menu,"file",rtn % % file options +menu,"menu",rtn % % menu options +menu,"global",rtn % % global options +menu,"cursor",rtn % % cursor options +menu,"marking",rtn % % marking options +menu,"tab",rtn % % tab/indent options + +:defmenu indent menu,"root",rtn +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 1, Indent character = 32",rtn 1 Space +mode,"istep",rtn,"2",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 2, Indent character = 32",rtn 2 Spaces +mode,"istep",rtn,"3",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 3, Indent character = 32",rtn 3 Spaces +mode,"istep",rtn,"4",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 4, Indent character = 32",rtn 4 Spaces +mode,"istep",rtn,"5",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 5, Indent character = 32",rtn 5 Spaces +mode,"istep",rtn,"8",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 8, Indent character = 32",rtn 8 Spaces +mode,"istep",rtn,"10",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 10, Indent character = 32",rtn 0 Ten +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"9",rtn,msg,"Indent step = 1, Indent character = 9",rtn T Tab + +:defmenu menu menu,"more-options",rtn +mode,"menu_explorer",rtn % % Menu explorer %Zmenu_explorer% +mode,"menu_above",rtn % % Menu position %Zmenu_above% +mode,"menu_jump",rtn % % Jump into menu %Zmenu_jump% +mode,"transpose",rtn % % Transpose menus %Ztranspose% + +:defmenu ^G menu,"more-options",rtn +mode,"highlighter_context",rtn % % ^G uses highlighter context %Zhighlighter_context% +mode,"single_quoted",rtn % % ^G ignores '...' %Zsingle_quoted% +mode,"no_double_quoted",rtn % % ^G no ignore "..." %Zno_double_quoted% +mode,"c_comment",rtn % % ^G ignores /*...*/ %Zc_comment% +mode,"cpp_comment",rtn % % ^G ignores //... %Zcpp_comment% +mode,"pound_comment",rtn % % ^G ignores #... %Zpound_comment% +mode,"vhdl_comment",rtn % % ^G ignores --... %Zvhdl_comment% +mode,"semi_comment",rtn % % ^G ignores ;... %Zsemi_comment% +mode,"tex_comment",rtn % % ^G ignores %%... %Ztex_comment% +mode,"text_delimiters",rtn % % Text delimiters %Ztext_delimiters% + +:defmenu search menu,"more-options",rtn +mode,"icase",rtn % % Case insensitivity %Zicase% +mode,"wrap",rtn % % Search wraps %Zwrap% +mode,"search_prompting",rtn % % Search prompting %Zsearch_prompting% +mode,"csmode",rtn % % Continued search %Zcsmode% + +:defmenu paragraph menu,"more-options",rtn +mode,"french",rtn % % French spacing %Zfrench% +mode,"flowed",rtn % % Flowed text %Zflowed% +mode,"cpara",rtn % % Paragraph indent chars %Zcpara% +mode,"cnotpara",rtn % % Not-paragraph chars %Zcnotpara% + +:defmenu file menu,"more-options",rtn +mode,"restore",rtn % % Restore cursor %Zrestore% +mode,"guess_crlf",rtn % % Auto detect CR-LF %Zguess_crlf% +mode,"guess_indent",rtn % % Guess indent %Zguess_indent% +mode,"guess_non_utf8",rtn % % Guess non-UTF-8 %Zguess_non_utf8% +mode,"guess_utf8",rtn % % Guess UTF-8 %Zguess_utf8% +mode,"guess_utf16",rtn % % Guess UTF-16 %Zguess_utf16% +mode,"force",rtn % % Force last NL %Zforce% +mode,"nobackup",rtn % % No backup %Znobackup% + +:defmenu global menu,"more-options",rtn +mode,"nolocks",rtn % % Disable locks %Znolocks% +mode,"nobackups",rtn % % Disable backups %Znobackups% +mode,"nodeadjoe",rtn % % Disable DEADJOE %Znodeadjoe% +mode,"nomodcheck",rtn % % Disable mtime check %Znomodcheck% +mode,"nocurdir",rtn % % Disable current dir %Znocurdir% +mode,"exask",rtn % % Exit ask %Zexask% +mode,"nosta",rtn % % Disable status line %Znosta% +mode,"keepup",rtn % % Fast status line %Zkeepup% +mode,"break_hardlinks",rtn % % Break hard links %Zbreak_hardlinks% +mode,"break_links",rtn % % Break links %Zbreak_links% +mode,"joe_state",rtn % % Joe_state file %Zjoe_state% +mode,"undo_keep",rtn % % No. undo records %Zundo_keep% +mode,"backpath",rtn % % Path to backup files %Zbackpath% + +:defmenu cursor menu,"more-options",rtn +mode,"pg",rtn % % No. PgUp/PgDn lines %Zpg% +mode,"mid",rtn C Center on scroll %Zmid% +mode,"left",rtn L Columns to scroll left %Zleft% +mode,"right",rtn R Columns to scroll right %Zright% +mode,"floatmouse",rtn % % Click past end %Zfloatmouse% +mode,"rtbutton",rtn % % Right button %Zrtbutton% + +:defmenu marking menu,"more-options",rtn +mode,"autoswap",rtn % % Autoswap mode %Zautoswap% +mode,"marking",rtn % % Marking %Zmarking% +mode,"lightoff",rtn % % Auto unmask %Zlightoff% + +:defmenu tab menu,"more-options",rtn +mode,"smarthome",rtn % % Smart home key %Zsmarthome% +mode,"smartbacks",rtn % % Smart backspace %Zsmartbacks% +mode,"indentfirst",rtn % % To indent first %Zindentfirst% +mode,"purify",rtn % % Clean up indents %Zpurify% +mode,"spaces",rtn % % No tabs %Zspaces% + + THIRD SECTION: Named help screens: + + Use \i to turn on/off inverse video + Use \u to turn on/off underline + Use \b to turn on/off bold + Use \d to turn on/off dim + Use \f to turn on/off flash + Use \l to turn on/off italic + +{Basic +\i Help Screen \|turn off with ^J more help with ESC . (^[.) \i +\i \i\|\uCURSOR\u \|\uGO TO\u \|\uBLOCK\u \|\uDELETE\u \|\uMISC\u \|\uEXIT\u \|\i \i +\i \i\|^S left ^D right \|^R prev. screen \|^KB begin \|^G char \|^B reformat \|^KX save \|\i \i +\i \i\|^E up ^X down \|^C next screen \|^KK end \|^Y line \|^V overtype \|^KQ abort \|\i \i +\i \i\|^A previous word \|^QS beg. of line \|^KV move \|^T >word \|^] refresh \|^KZ shell \|\i \i +\i \i\|^F next word \|^QD end of line \|^KC copy \|^QY >line \|^O options \|\uFILE\u \|\i \i +\i \i\|\uSEARCH\u \|^QR top of file \|^KW file \|^U undo \|\uSPELL\u \|^KE edit \|\i \i +\i \i\|^QF find text \|^QC end of file \|^KY delete \|^^ redo \|^QN word \|^KR insert\|\i \i +\i \i\|^L find next \|^QI to line No. \|^K/ filter \| \|^QL file \|^KD save \|\i \i +} + +{Windows +\i Help Screen \|turn off with ^J prev. screen ^[, next screen ^[. \i +\i \i\|^KO Split the window in half \|F1 - F4 Pop-up shell window \|\i \i +\i \i\|^KG Make current window bigger \|^KT Make current window smaller \|\i \i +\i \i\|^KN Go to the window below \|^KP Go to the window above \|\i \i +\i \i\|^KQ Eliminate the current window \|^KI Show all windows / Show one window\|\i \i +} + +{Advanced +\i Help Screen \|turn off with ^J prev. screen ^[, next screen ^[. \i +\i \i\|\uMACROS\u \|\uMISC\u \|\uSCROLL\u \|\uSHELL\u \|\uGOTO\u \|\uI-SEARCH\u \|\i \i +\i \i\|^[( Record \|^Q? status \|^Q. Right \|^K' Window \|^QB to ^KB \|^[R Backwards \|\i \i +\i \i\|^[) Stop \|^QQ repeat \|^Q, Left \|^[! Command \|^QK to ^KK \|^[S Forwards \|\i \i +\i \i\|^[ 0-9 Play \|^QM Math \| \|\uQUOTE\u \|\uDELETE\u \|\uBOOKMARKS\u \|\i \i +\i \i\|^[? Query \|^KA Center line \| \|^P Ctrl- \|^[Y yank \|^K 0-9 Set \|\i \i +\i \i\|^[D Dump \|^[H Message \| \|^\\ Meta- \|^[O word< \|^Q 0-9 Goto \|\i \i +} + +{Programs +\i Help Screen \|turn off with ^J prev. screen ^[, next screen ^[. \i +\i \i\|\uGOTO\u \|\uINDENT\u \|\uCOMPILING\u \| \|\i \i +\i \i\|^Q[ Matching ( [ { \|^K. more \|^[C Compile and parse errors \| \|\i \i +\i \i\|^QP Previous place \|^K, less \|^[E Parse errors \| \|\i \i +\i \i\|^K= Next place \| \|^[= Goto next error \| \|\i \i +\i \i\|^K; Tags file srch \| \|^[- Goto previous error \| \|\i \i +} + +{Search +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch sequences: \|\i \i +\i \i \\^ \\$ matches beg./end of line \\. match any single char \|\i \i +\i \i \\< \\> matches beg./end of word \\! match char or expression \|\i \i +\i \i \\( \\) grouping \\| match left or right \|\i \i +\i \i \\[a-z] matches one of a set \|\i \i +\i \i \\{1,3} match 1 - 3 occurrences \\? match 0 or 1 occurrence \|\i \i +\i \i \\+ match 1 or more occurrences \\* match 0 or more occurrences \|\i \i +\i \iReplace sequences: \|\i \i +\i \i \\& replaced with entire match \\1 - 9 replaced with Nth group \|\i \i +\i \i \\u \\l convert next to upper/lower \\U \\L case convert until \\E \|\i \i +} + +{Escape sequences +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iEscape sequences: \\x{10fff} Unicode code point \\p{Ll} Unicode category \|\i \i +\i \i \\i / \\I Identifier start \\t tab \\e escape \|\i \i +\i \i \\c / \\C Identifier continue \\n newline \\r carriage return \|\i \i +\i \i \\d / \\D Digit / Not a digit \\b backspace \\xFF hex character \|\i \i +\i \i \\w / \\W Word / Not a word \\a alert \\377 octal character \|\i \i +\i \i \\s / \\S Space / Not a space \\f formfeed \\\\ backslash \|\i \i +} + +{SearchOptions +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch options: \|\i \i +\i \i r Replace k Restrict search to highlighted block \|\i \i +\i \i i Ignore case b Search backwards instead of forwards \|\i \i +\i \i a Search across all loaded files \|\i \i +\i \i e Search across all files in Grep or Compile error list \|\i \i +\i \i w / n Allow / prevent wrap to start of file \|\i \i +\i \i x / y Search text is standard format / JOE format regular expression \|\i \i +\i \i nnn Perform exactly nnn replacements \|\i \i +} + +{Math +\i Help Screen \|turn off with ^J prev. screen ^[, next screen ^[. \i +\i \i \uCOMMANDS\u (hit ^Q M for math) \uFUNCTIONS\u \|\i \i +\i \i hex hex display mode sin cos tab asin acos atan \|\i \i +\i \i dec decimal mode sinh cosh tanh asinh acosh atanh \|\i \i +\i \i ins type result into file sqrt cbrt exp ln log \|\i \i +\i \i eval evaluate block int floor ceil abs erg ergc \|\i \i +\i \i 0xff enter number in hex joe(..macro..) - runs an editor macro \|\i \i +\i \i 3e-4 floating point decimal \uBLOCK\u \|\i \i +\i \i a=10 assign a variable sum cnt Sum, count \|\i \i +\i \i 2+3:ins multiple commands avg dev Average, std. deviation \|\i \i +\i \i e pi constants \uOPERATORS\u \|\i \i +\i \i ans previous result ! ^ * / % + - < <= > >= == != && || ? :\|\i \i +} + +{Names +\i Help Screen \|turn off with ^J prev. screen ^[, next screen ^[. \i +\i \i Hit TAB at file name prompts to generate menu of file names \|\i \i +\i \i Or use up/down keys to access history of previously entered names \|\i \i +\i \i Special file names: \|\i \i +\i \i !command Pipe in/out of a shell command \|\i \i +\i \i >>filename Append to a file \|\i \i +\i \i - Read/Write to/from standard I/O \|\i \i +\i \i filename,START,SIZE Read/Write a part of a file/device \|\i \i +\i \i Give START/SIZE in decimal (255), octal (0377) or hex (0xFF) \|\i \i +} + +{Joe +\i Help Screen \|turn off with ^J prev. screen ^[, next screen ^[. \i +\i \i Send bug reports to: http://sourceforge.net/projects/joe-editor \|\i \i +\i \i \|\i \i +\i \i default joerc file is here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc \|\i \i +\i \i default syntax and i18n files are here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/joe \|\i \i +\i \i additional documentation can be found here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/doc/joe \|\i \i +} + +{CharTable +\i Help Screen \|turn off with ^J prev. screen ^[, \i +\i \i\| Dec \u 0123 4567 8901 2345 0123 4567 8901 2345 \u Dec \|\i \i +\i \i\| | | \|\i \i +\i \i\| 0 | \u@ABC\u \uDEFG\u \uHIJK\u \uLMNO\u \i\u@ABC\u\i \i\uDEFG\u\i \i\uHIJK\u\i \i\uLMNO\u\i | 128 \|\i \i +\i \i\| 16 | \uPQRS\u \uTUVW\u \uXYZ[\u \u\\]^_\u \i\uPQRS\u\i \i\uTUVW\u\i \i\uXYZ[\u\i \i\u\\]^_\u\i | 144 \|\i \i +\i \i\| 32 | !"# $%&' ()*+ ,-./ ═║╒ё ╓╔╕╖ ╗╘╙╚ ╛╜╝╞ | 160 \|\i \i +\i \i\| 48 | 0123 4567 89:; <=>? ╟╠╡Ё ╢╣╤╥ ╦╧╨╩ ╪╫╬© | 176 \|\i \i +\i \i\| 64 | @ABC DEFG HIJK LMNO юабц дефг хийк лмно | 192 \|\i \i +\i \i\| 80 | PQRS TUVW XYZ[ \\]^_ пярс тужв ьызш эщчъ | 208 \|\i \i +\i \i\| 96 | `abc defg hijk lmno ЮАБЦ ДЕФГ ХИЙК ЛМНО | 224 \|\i \i +\i \i\| 112 | pqrs tuvw xyz{ |}~ ПЯРС ТУЖВ ЬЫЗШ ЭЩЧЪ | 240 \|\i \i +} + + FOURTH SECTION: Key bindings: + + Section names you must provide: + + :main For editing window + :prompt For prompt lines + :query For single-character query lines + :querya Singe-character query for quote + :querysr Search & Replace single-character query + :shell For shell windows + :vtshell For terminal emulator windows + + Other sections may be given as well for organization purposes or for + use with the '-keymap' option. + + Use: + :inherit name To copy the named section into the current one + :delete key To delete a key sequence from the current section + + Keys: + + Use ^@ through ^_, ^# and ^? for Ctrl chars + Use SP for space + Use a TO b to generate a range of characters + Use MDOWN, MDRAG, MUP, M2DOWN, M2DRAG, M2UP, M3DOWN, M3DRAG, M3UP for mouse + Use MWDOWN, MWUP for wheel mouse motion + + You can also use termcap string capability names. For example: + + .ku Up + .kd Down + .kl Left + .kr Right + .kh Home + .kH End + .kI Insert + .kD Delete + .kP PgUp + .kN PgDn + .k1 - .k9 F1 - F9 + .k0 F0 or F10 + .k; F10 + + Macros: + + Simple macros can be made by comma seperating 2 or more command names. For + example: + + bof,bol ^T Z Goto beginning of last line + + Also quoted matter is typed in literally: + + bol,">",dnarw .k1 Quote news article line + + Macros may cross lines if they end with , + +:windows Bindings common to all windows +type U+0 TO U+10FFFF +abort ^K Q +abort ^K ^Q +abort ^K q +abort ^C +arg ^Q Q +arg ^Q ^Q +arg ^Q q +explode ^K I +explode ^K ^I +explode ^K i +help ^J +nmark ^K H +nmark ^K ^H +nmark ^K h +hnext ^[ . +hprev ^[ , +math ^Q M +math ^Q ^M +math ^Q m +msg ^[ H +msg ^[ ^H +msg ^[ h +nextw ^K N +nextw ^K ^N +nextw ^K n +pgdn .kN Screen down +pgdn ^[ [ 6 ~ + pgdn ^# S +pgup .kP Screen up +pgup ^[ [ 5 ~ + pgup ^# T +play ^[ 0 TO 9 +prevw ^K P +prevw ^K ^P +prevw ^K p +query ^[ ? +record ^[ ( +retype ^] +rtn ^M +shell ^K Z +shell ^K ^Z +shell ^K z +stop ^[ ) + Mouse handling +defmdown MDOWN Move the cursor to the mouse location +defmup MUP +defmdrag MDRAG Select a region of characters +defm2down M2DOWN Select the word at the mouse location +defm2up M2UP +defm2drag M2DRAG Select a region of words +defm3down M3DOWN Select the line at the mouse location +defm3up M3UP +defm3drag M3DRAG Select a region of lines +defmiddleup MIDDLEUP +defmiddledown MIDDLEDOWN Insert text + +xtmouse ^[ [ M Introduces an xterm mouse event +extmouse ^[ [ < Introduces an extended xterm mouse event + +:main Text editing window +:inherit windows + + Ispell +:def ispellfile filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype +:def ispellword psh,nextword,markk,prevword,markb,filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;tr -d $SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;cat $SPLTMP;/bin/rm $SPLTMP",rtn,retype +:def aspellword psh,nextword,markk,prevword,markb,filt,"SPLTMP=ispell.tmp;cat >$SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;tr -d <$SPLTMP '\\012';/bin/rm $SPLTMP",rtn,retype,nextword + + +ispellfile ^Q l +ispellfile ^Q L +ispellfile ^Q ^L +ispellword ^Q n +ispellword ^Q N +ispellword ^Q ^N + + Compile macro + +:def compile mwind!,mfit!,querysave,query,scratch,"* Build Log *",rtn,markb,eof," ",markk,blkdel,build + + Grep + +:def grep_find mwind!,mfit!,scratch,"* Grep Log *",rtn,bof,markb,eof," ",markk,blkdel,grep + + Man page + +:def man scratch,"* Man Page *",rtn,bof,markb,eof," ",markk,blkdel," ",ltarw,run,"man -P cat -S 2:3 " + + Shell windows + We load the already existing Startup Log first so that Shell does not inherit the current directory. + +:def shell1 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 1 *",rtn,vtbknd!,eof +:def shell2 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 2 *",rtn,vtbknd!,eof +:def shell3 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 3 *",rtn,vtbknd!,eof +:def shell4 scratch_push,"* Startup Log *",rtn,scratch_push,"* Shell 4 *",rtn,vtbknd!,eof + + Macros allowed in shell window commands +:def shell_clear psh,bof,markb,eof,markk,blkdel +:def shell_parse parserr +:def shell_gparse gparse +:def shell_release release +:def shell_math maths +:def shell_typemath txt,math,"ins",rtn,rtn,txt,"\r",rtn +:def shell_rtn rtn +:def shell_edit edit +:def shell_dellin dellin +:def shell_cd cd +:def shell_pop popabort +:def shell_markb markb +:def shell_markk markk + + Split window version + :def shell1 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 1 *",rtn,vtbknd!,eof + :def shell2 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 2 *",rtn,vtbknd!,eof + :def shell3 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 3 *",rtn,vtbknd!,eof + :def shell4 if,"is_shell==0",then,tw1,mfit,endif,scratch,"* Shell 4 *",rtn,vtbknd!,eof + +paste ^[ ] 5 2 ; Base64 paste (obsolete) +brpaste ^[ [ 2 0 0 ~ Bracketed paste +brpaste_done ^[ [ 2 0 1 ~ Bracketed paste done + +insc ^[ [ 2 ~ +insc ^[ [ L SCO + +delch ^[ [ 3 ~ + +pgup ^[ [ I SCO + +pgdn ^[ [ G SCO + +home ^[ [ 1 ~ Putty, Linux, Cygwin +home ^[ [ H Xterm, Konsole, SCO +home ^[ O H gnome-terminal +home ^[ [ 7 ~ RxVT + home ^# SP A Amiga + +eol ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eol ^[ [ F Xterm, Konsole, SCO +eol ^[ O F gnome-terminal +eol ^[ [ 8 ~ RxVT + eol ^# SP @ Amiga + +rtarw,prevword,markb,nextword,markk ^K T +rtarw,prevword,markb,nextword,markk ^K ^T +rtarw,prevword,markb,nextword,markk ^K t +run ^[ ! +isrch ^[ s +isrch ^[ S +isrch ^[ ^S +rsrch ^[ r +rsrch ^[ R +rsrch ^[ ^R +backw ^[ o +backw ^[ ^O +yankpop ^[ y +yankpop ^[ Y +yankpop ^[ ^Y +parserr ^[ E +parserr ^[ ^E +parserr ^[ e +mwind,mfit,prevw,nxterr ^[ = +mwind,mfit,prevw,prverr ^[ - +compile ^[ ^C +compile ^[ c +compile ^[ C + + +insf," ",bol,deleol,"!date '+%I:%M %p'",rtn ^[ ! +insf," ",bol,deleol,"!date '+%b %d, %Y'",rtn ^[ @ + center ^[ c +psh,prevword,nextword,nextword,markk,prevword,markb,setmark,":", +prevword,nextword,blkmove,markk,prevword,markb,gomark,":",blkmove,nextword ^[ t +bop ^[ p +psh,drop,fwrdc,query,markk,blkdel ^Q T Cut to char +psh,drop,fwrdc,query,markk,blkdel ^Q t Cut to char +psh,drop,fwrdc,query,markk,blkdel ^Q ^T Cut to char + + +quote8 ^\ Quote Meta chars +quote ^P Quote Ctrl chars + +backs ^? Backspace +backs ^H +bknd ^K ' Shell window +bkwdc ^Q H U+0 TO U+10FFFF +bkwdc ^Q ^H U+0 TO U+10FFFF +bkwdc ^Q h U+0 TO U+10FFFF +blkcpy ^K C Copy marked block +blkcpy ^K ^C +blkcpy ^K c +blkdel ^K Y Delete marked block +blkdel ^K ^Y +blkdel ^K y +blkmove ^K V Move marked block +blkmove ^K ^V +blkmove ^K v +blksave ^K W Save marked block +blksave ^K ^W +blksave ^K w +bof ^Q R Goto beginning of file +bof ^Q ^R +bof ^Q r +bof ^Q .kP +home .kh Goto beginning of line +home ^[ [ H +home ^[ [ 1 ~ +home ^Q S +home ^Q ^S +home ^Q s +home ^Q .kl +crawll ^Q , +crawlr ^Q . +tos,bol ^Q E +tos,bol ^Q ^E +tos,bol ^Q e +tos,bol ^Q .ku +center ^K A Center line +center ^K ^A +center ^K a +delbol ^Q ^H +delbol ^Q ^? +delbol ^Q .kD +delch .kD Delete character +delch ^G +deleol ^Q Y Delete to end of line +deleol ^Q ^Y +deleol ^Q y +dellin ^Y Delete entire line +delw ^T Delete word to right +dnarw .kd Go down +dnarw ^X +dnarw ^[ O B +dnarw ^[ [ B + dnarw ^# B +dnslide ^Z +dnslide,dnslide,dnslide,dnslide MWDOWN +edit ^K E Edit a file +edit ^K ^E +edit ^K e +eof ^Q C Go to end of file +eof ^Q ^C +eof ^Q c +eof ^Q .kN +eol .kH Go to end of line +eol .@7 +eol ^[ [ F +eol ^[ [ 4 ~ +eol ^Q D +eol ^Q ^D +eol ^Q d +eol ^Q .kr +bos,eol ^Q X +bos,eol ^Q ^X +bos,eol ^Q x +bos,eol ^Q .kd +exsave ^K X Save and exit +exsave ^K ^X +exsave ^K x +ffirst ^Q F Find first +ffirst ^Q ^F +ffirst ^Q f +qrepl ^Q A Search & replace +qrepl ^Q ^A +qrepl ^Q a +filt ^K / Filter block +fnext ^L Find next +format ^B Format paragraph +fwrdc ^Q G U+0 TO U+10FFFF +fwrdc ^Q ^G U+0 TO U+10FFFF +fwrdc ^Q g U+0 TO U+10FFFF +gomark ^Q 0 TO 9 +groww ^K G Grow window +groww ^K ^G +groww ^K g +insc ^@ +insf ^K R Insert a file +insf ^K ^R +insf ^K r +macros ^[ d Dump macros +macros ^[ ^D +mode,"overtype",rtn ^V Insert/Overtype +mode,"overtype",rtn .kI +lindent ^K , Indent to left +line ^Q I Goto line no. +line ^Q ^I +line ^Q i +ltarw .kl Go left +ltarw ^S +ltarw ^[ O D +ltarw ^[ [ D + ltarw ^# D +markb ^K B Set beginning of marked block +markb ^K ^B +markb ^K b +markk ^K K Set end of marked block +markk ^K ^K +markk ^K k +markl ^K L +markl ^K ^L +markl ^K l + mode ^O +menu,"root",rtn ^O +nextpos ^K = Goto next position in position history +nextword ^F Goto next word +open ^N Split line +pgdn ^C +pgup ^R +prevpos ^Q P +prevpos ^Q ^P +prevpos ^Q p +prevword ^A Previous word +redo ^^ Redo changes +rindent ^K . Indent to right +rtarw .kr Go right +rtarw ^D +rtarw ^[ O C +rtarw ^[ [ C + rtarw ^# C +save ^K D Save file +save ^K S +save ^K ^D +save ^K ^S +save ^K d +save ^K s +setmark ^K 0 TO 9 +shrinkw ^K T Shrink window +shrinkw ^K ^T +shrinkw ^K t +splitw ^K O Split window +splitw ^K ^O +splitw ^K o +stat ^Q ? Show status +tag ^K ; +tomarkb ^Q B Go to beginning of marked block +tomarkb ^Q ^B +tomarkb ^Q b +tomarkk ^Q K Go to end of marked block +tomarkk ^Q ^K +tomarkk ^Q k +tomatch ^Q [ Goto matching parenthasis +tomatch ^Q ^[ +tomatch ^Q ] +tomatch ^Q ^] +undo ^U Undo changes +undo ^_ +uparw .ku Go up +uparw ^E +uparw ^[ O A +uparw ^[ [ A + uparw ^# A +upslide ^W +upslide,upslide,upslide,upslide MWUP +shell1 ^[ [ 1 1 ~ +shell1 ^[ O P +shell1 ^[ [ [ A +shell1 .k1 +shell2 ^[ [ 1 2 ~ +shell2 ^[ O Q +shell2 ^[ [ [ B +shell2 .k2 +shell3 ^[ [ 1 3 ~ +shell3 ^[ O R +shell3 ^[ [ [ C +shell3 .k3 +shell4 ^[ [ 1 4 ~ +shell4 ^[ O S +shell4 ^[ [ [ D +shell4 .k4 + +:prompt Prompt windows +:inherit main +abort ^C +complete ^I +dnarw,eol .kd Go down +dnarw,eol ^X +dnarw,eol ^[ O B +dnarw,eol ^[ [ B + dnarw,eol ^# B +uparw,eol .ku Go up + uparw,eol ^# A +uparw,eol ^E +uparw,eol ^[ O A +uparw,eol ^[ [ A + +:menu Selection menus +:inherit windows +pgupmenu ^[ [ I + +pgdnmenu ^[ [ G + +bolmenu ^[ [ 1 ~ Putty, Linux, Cygwin +bolmenu ^[ [ H Xterm, Konsole +bolmenu ^[ O H gnome-terminal +bolmenu ^[ [ 7 ~ RxVT + bolmenu ^# SP A Amiga + +eolmenu ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eolmenu ^[ [ F Xterm, Konsole +eolmenu ^[ O F gnome-terminal +eolmenu ^[ [ 8 ~ RxVT + eolmenu ^# SP @ Amiga + +abort ^[ ^[ +backsmenu ^? +backsmenu ^H +bofmenu ^Q R +bofmenu ^Q ^R +bofmenu ^K r +bolmenu .kh +bolmenu ^Q S +bolmenu ^Q ^S +bolmenu ^Q s +dnarwmenu .kd +dnarwmenu ^X +dnarwmenu ^[ [ B + dnarwmenu ^# B +dnarwmenu ^[ O B +eofmenu ^Q C +eofmenu ^Q ^C +eofmenu ^Q c +eolmenu .kH +eolmenu ^Q D +eolmenu ^Q ^D +eolmenu ^Q d +ltarwmenu .kl +ltarwmenu ^S +ltarwmenu ^[ [ D + ltarwmenu ^# D +ltarwmenu ^[ O D +pgdnmenu .kN Screen down +pgdnmenu ^C +pgdnmenu ^[ [ 6 ~ +pgupmenu .kP Screen up +pgupmenu ^R +pgupmenu ^[ [ 5 ~ +rtarwmenu .kr +rtarwmenu ^D +rtarwmenu ^[ [ C + rtarwmenu ^# C +rtarwmenu ^[ O C +rtn SP +rtn ^I +rtn ^K H +rtn ^K h +rtn ^K ^H +rtn ^J +tabmenu ^I +uparwmenu .ku +uparwmenu ^E +uparwmenu ^[ [ A + uparwmenu ^# A +uparwmenu ^[ O A +defm2down M2DOWN Hits return key + +:query Single-key query window +:inherit windows + +:querya Single-key query window for quoting +type U+0 TO U+10FFFF + +:querysr Search & replace query window +type U+0 TO U+10FFFF + +:shell Input to shell windows +:inherit main +"" ^C Abort +"" ^D Eof +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace + +:vtshell Input to ANSI shell windows +:inherit main +""  [ A +"" .ku +""  [ B +"" .kd +""  [ C +"" .kr +""  [ D +"" .kl +"" ^A BOL for bash +"" ^C Abort +"" ^D Eof +"" ^E EOL for bash +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace diff --git a/joe/etc/joe/rjoerc b/joe/etc/joe/rjoerc new file mode 100644 index 0000000..949e558 --- /dev/null +++ b/joe/etc/joe/rjoerc @@ -0,0 +1,1107 @@ + + Initialization file for JOE + Restricted access Joe + + JOE looks for this file in: + 1 - $HOME/.rjoerc + 2 - /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/rjoerc + + This file can include other files by placing the following include command + in the first column: + + :include filename + + FIRST SECTION: Default global options (these options can also be specified + on the command line. Also the NOXON, LINES, COLUMNS, DOPADDING and BAUD + options can be specified in environment variables): + + Put each option you want set in the first column: + + -option Sets the option + --option Clears the option + + -help_is_utf8 Set if help text is in UTF-8 format. Leave clear if it's a raw 8-bit format. + + -mid Cursor is recentered when scrolling is necessary + -left nn Amount to jump left when scrolling is necessary (-1 for 1/4 width) + -right nn Amount to jump right when scrolling is necessary (-1 for 1/4 width) + + -marking Text between ^KB and cursor is highlighted (use with -lightoff) + + -asis Characters 128 - 255 shown as-is + + -force Force final newline when files are saved + + -nolocks If you don't want file locks to be used + + -nomodcheck Disable periodic checking of disk file newer than buffer + (this checking happens on save even with this option). + + -nocurdir Do not prompt with current directory + + -nobackups If you don't want backup files to be created + + -nodeadjoe If you don't want DEADJOE files to be created + + -break_hardlinks + Delete file before writing, to break hard links + (but don't break symbolic links). + + -break_links + Delete file before writing, to break hard links + and symbolic links. + + -lightoff Turn off highlighting after block copy or move + + -exask ^KX always confirms file name + + -beep Beep on errors and when cursor goes past extremes + + -nosta Disable top-most status line + + -keepup %k and %c status line escape sequences updated frequently + + -pg nnn No. lines to keep for PgUp/PgDn + + -undo_keep nnn Number of undo records to keep. 0 for infinite. + + -csmode ^KF after a pervious search does a ^L instead + + -backpath path + Directory to store backup files (one space between 'backpath' and + the 'path', no trailing spaces or comments after the path). + + -floatmouse Clicking past end of line moves the cursor past the end + + -rtbutton Use the right mouse button for action, instead of the left + + -nonotice Disable copyright notice + + -noexmsg Disable exiting message ("File not changed so no updated needed") + + -noxon Attempt to turn off ^S/^Q processing + + -orphan Put extra files given on command line in orphaned buffers + instead of in windows + + -dopadding Output pad characters (for when there is no tty handshaking) + + -lines nnn Set no. screen lines + + -baud nnn Set baud rate for terminal optimizations + + -columns nnn Set no. screen columns + + -helpon Start with help on + + -skiptop nnn Don't use top nnn lines of the screen + +-notite Don't send terminal initialization and termination strings: prevents + restoration of screen on exit. + + -nolinefeeds Prevent sending linefeeds to preserve screen history in terminal + emulator's scroll-back buffer. + + -usetabs Use tabs to help optimize screen update. + +-assume_color Assume terminal has ANSI color support even if termcap/terminfo entry + says that it doesn't. This only applies if the terminal otherwise + looks like an ANSI terminal (support bold and capability starts with + ESC [). + +-assume_256color + Assume terminal has xterm 256 color support (ESC [ 38 ; 5 ; NNN m and + ESC [ 48 ; 5 ; NNN m). + +-guess_non_utf8 Allow guess of non-UTF-8 file encoding in a UTF-8 locale. + + -guess_utf8 Allow guess of UTF-8 file encoding in non-UTF-8 locale. + +-guess_utf16 Allow guess of UTF-16 encoding + +-guess_crlf Automatically detect MS-DOS files and set -crlf appropriately + +-guess_indent Guess indent character (tab or space). + +-menu_above Position menu/list above prompt when enabled. Otherwise position + below prompt. + +-transpose Transpose rows with columns in all menus. + +-menu_explorer Stay in menu system when a directory is selected (otherwise + directory is added to path and menu is closed). + + -menu_jump Jump into file selection menu when tab is hit (otherwise, menu + comes up, but cursor stays in file name prompt). + + -icase Search is case insensitive by default. + + -wrap Search wraps + + -autoswap Swap markb with markk when necessary + +-joe_state Use ~/.joe_state file + + -mouse Enable mouse support + + -joexterm If you are using Joe's modified Xterm, which makes -mouse + mode work better (cut & paste work transparently). + +-brpaste When JOE starts, send command to the terminal emulator that + enables "bracketed paste mode" (but only if the terminal + seems to have the ANSI command set). In this mode, text + pasted into the window is bracketed with ESC [ 2 0 0 ~ and + ESC [ 2 0 1 ~. + +-pastehack If keyboard input comes in as one block assume it's a mouse + paste and disable autoindent and wordwrap. + + -square Rectangular block mode + + -colors scheme + Set the default color scheme + +-restore Restore previous cursor position when files are opened + + -search_prompting + Search prompts with previous search request. + + -regex Search uses standard regular expression format (otherwise it uses + JOE format where all special characters have to be escaped). + + Status line definition strings. -lmsg defines the left-justified string and + -rmsg defines the right-justified string. The first character of -rmsg is + the background fill character. The following escape sequences can be used + in these strings: + + %t 12 hour time + %u 24 hour time + %T O for overtype mode, I for insert mode + %W W if wordwrap is enabled + %I A if autoindent is enabled + %X Rectangle mode indicator + %n File name + %m '(Modified)' if file has been changed + %* '*' if file has been changed + %R Read-only indicator + %r Row (line) number + %c Column number + %o Byte offset into file + %O Byte offset into file in hex + %a Ascii value of character under cursor + %A Ascii value of character under cursor in hex + %w Width of character under cursor + %p Percent of file cursor is at + %l No. lines in file + %k Entered prefix keys + %S '*SHELL*' if there is a shell running in window + %M Macro recording message + %y Syntax + %e Encoding + %x Context (first non-indented line going backwards) + %dd day + %dm month + %dY year + %Ename% value of environment variable + %Tname% value of option (ON or OFF for boolean options) + + These formatting escape sequences may also be given: + + \i Inverse + \u Underline + \b Bold + \d Dim + \f Blink + \l Italic + +-lmsg \i%k%T%W%I%X %n %m%y%R %M +-rmsg %S Row %4r Col %3c %t Ctrl-K H for help +-smsg ** Line %r Col %c Offset %o(0x%O) %e %a(0x%A) Width %w ** +-zmsg ** Line %r Col %c Offset %o(0x%O) ** +-xmsg \i Joe's Own Editor %v (%b) ** Type \bCtrl-K Q\b to exit or \bCtrl-K H\b for help **\i + + Key sequence hints which are displayed in various prompts. +-aborthint ^C +-helphint ^K H + + + SECOND SECTION: File name dependant local option settings: + + Each line with '*' in the first column indicates the modes which should be + set for files which match the regular expression. If more than one regular + expression matches the file name, then the last matching one is chosen. + + Here are the modes which can be set: + + -cpara >#!;*/% + Characters which can indent paragraphs. + + -cnotpara . + Characters which begin non-paragraph lines. + + + -encoding name + Set file coding (for example: utf-8, iso-8859-15) + + -syntax name + Specify syntax (syntax file called + 'name.jsf' will be loaded) + + -hex Hex editor mode + + -highlight Enable highlighting + + -smarthome Home key first moves cursor to beginning of line, + then if hit again, to first non-blank character. + + -indentfirst Smart home goes to first non-blank character first, + instead of going the beginning of line first. + + -smartbacks Backspace key deletes 'istep' number of + 'indentc's if cursor is at first non-space + character. + + -tab nnn Tab width + + -indentc nnn Indentation character (32 for space, 9 for tab) + + -istep nnn Number of indentation columns + + -spaces TAB inserts spaces instead of tabs. + + -purify Fix indentation if necessary for rindent, lindent and backs + (for example if indentation uses a mix of tabs and spaces, + and indentc is space, indentation will be converted to all + spaces). + + -crlf File uses CR-LF at ends of lines + + -wordwrap Wordwrap + + -autoindent Auto indent + + -overwrite Overtype mode + + -picture Picture mode (right arrow can go past end of lines) + + -lmargin nnn Left margin + + -rmargin nnn Right margin + + -flowed Put one space after intermediate paragraph lines + for support of flowed text. + + + -french One space after '.', '?' and '!' for wordwrap + and paragraph reformat instead of two. Joe + does not change the spacing you give, but + sometimes it must put spacing in itself. This + selects how much is inserted. + + -linums Enable line numbers on each line + + -hiline Highlight current line + + -rdonly File is read-only + + -keymap name + Keymap to use if not 'main' + + -lmsg Status line definition strings- + -rmsg see previous section for more info. + + -mfirst macro + Macro to execute on first modification + -mnew macro + Macro to execute when new files are loaded + -mold macro + Macro to execute when existing files are loaded + -msnew macro + Macro to execute when new files are saved + -msold macro + Macro to execute when existing files are saved + + Macros for the above options are in the same format as in the key + binding section below- but without the key name strings. + + These define the language syntax for ^G (goto matching delimiter): + + -highlighter_context Use the highlighter context for ^G + + -single_quoted Text between ' ' should be ignored (this is + not good for regular text since ' is + normally used alone as an apostrophe) + + -c_comment Text between /* */ should be ignored + + -cpp_comment Text after // should be ignored + + -pound_comment Text after # should be ignored + + -vhdl_comment Text after -- should be ignored + + -semi_comment Text after ; should be ignored + + -text_delimiters begin=end:if=elif=else=endif + + Define word delimiters + + Default local options +-highlight +-istep 4 + + Use this macro (put in first column) to have joe "p4 edit" a file you're about to change. + + -mfirst if,"rdonly && joe(sys,\"p4 edit \",name,rtn)",then,mode,"o",msg,"executed \"p4 edit ",name,"\"",rtn,endif + + File type table is now in a separate file. You can copy this file to ~/.joe and customize it. + +:include ftyperc + + SECOND and 1/2 SECTION: Option menu layout + + :defmenu name [macro] + Defines a menu. + The macro here is executed when the user hits backspace. + + macro string comment + A menu entry. Macro is any JOE macro- see "Macros:" + below. String is the label to be used for the macro + in the menu. It is in the same format as the -lmsg + and -rmsg options above. + + Two whitespace characters in a row begins a comment. + Use '% ' for a leading space in the string. + +:defmenu root +mode,"overwrite",rtn T Overtype %Zoverwrite% +mode,"hex",rtn ' Hex edit mode +mode,"autoindent",rtn I Autoindent %Zautoindent% +mode,"wordwrap",rtn W Word wrap %Zwordwrap% +mode,"tab",rtn D Tab width %Ztab% +mode,"lmargin",rtn L Left margin %Zlmargin% +mode,"rmargin",rtn R Right margin %Zrmargin% +mode,"square",rtn X Column mode %Zsquare% +mode,"indentc",rtn % % Indent char %Zindentc% +mode,"istep",rtn % % Indent step %Zistep% +menu,"indent",rtn = Indent select +mode,"highlight",rtn H Highlighting %Zhighlight% +mode,"crlf",rtn Z CR-LF/MS-DOS %Zcrlf% +mode,"linums",rtn N Line numbers %Zlinums% +mode,"hiline",rtn U Highlight line %Zhiline% +mode,"beep",rtn B Beep %Zbeep% +mode,"rdonly",rtn O Read only %Zrdonly% +mode,"syntax",rtn Y Syntax +mode,"colors",rtn S Color scheme +mode,"encoding",rtn E Encoding +mode,"asis",rtn % % Meta chars as-is +mode,"language",rtn V Language +mode,"picture",rtn P picture %Zpicture% +mode,"type",rtn F File type [%Ztype%] +mode,"title",rtn C Context %Ztitle% +menu,"more-options",rtn % % More options... + +:defmenu more-options menu,"root",rtn +menu,"^G",rtn % % ^G options +menu,"search",rtn % % search options +menu,"paragraph",rtn % % paragraph options +menu,"file",rtn % % file options +menu,"menu",rtn % % menu options +menu,"global",rtn % % global options +menu,"cursor",rtn % % cursor options +menu,"marking",rtn % % marking options +menu,"tab",rtn % % tab/indent options + +:defmenu indent menu,"root",rtn +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 1, Indent character = 32",rtn 1 Space +mode,"istep",rtn,"2",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 2, Indent character = 32",rtn 2 Spaces +mode,"istep",rtn,"3",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 3, Indent character = 32",rtn 3 Spaces +mode,"istep",rtn,"4",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 4, Indent character = 32",rtn 4 Spaces +mode,"istep",rtn,"5",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 5, Indent character = 32",rtn 5 Spaces +mode,"istep",rtn,"8",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 8, Indent character = 32",rtn 8 Spaces +mode,"istep",rtn,"10",rtn,mode,"indentc",rtn,"32",rtn,msg,"Indent step = 10, Indent character = 32",rtn 0 Ten +mode,"istep",rtn,"1",rtn,mode,"indentc",rtn,"9",rtn,msg,"Indent step = 1, Indent character = 9",rtn T Tab + +:defmenu menu menu,"more-options",rtn +mode,"menu_explorer",rtn % % Menu explorer %Zmenu_explorer% +mode,"menu_above",rtn % % Menu position %Zmenu_above% +mode,"menu_jump",rtn % % Jump into menu %Zmenu_jump% +mode,"transpose",rtn % % Transpose menus %Ztranspose% + +:defmenu ^G menu,"more-options",rtn +mode,"highlighter_context",rtn % % ^G uses highlighter context %Zhighlighter_context% +mode,"single_quoted",rtn % % ^G ignores '...' %Zsingle_quoted% +mode,"no_double_quoted",rtn % % ^G no ignore "..." %Zno_double_quoted% +mode,"c_comment",rtn % % ^G ignores /*...*/ %Zc_comment% +mode,"cpp_comment",rtn % % ^G ignores //... %Zcpp_comment% +mode,"pound_comment",rtn % % ^G ignores #... %Zpound_comment% +mode,"vhdl_comment",rtn % % ^G ignores --... %Zvhdl_comment% +mode,"semi_comment",rtn % % ^G ignores ;... %Zsemi_comment% +mode,"tex_comment",rtn % % ^G ignores %%... %Ztex_comment% +mode,"text_delimiters",rtn % % Text delimiters %Ztext_delimiters% + +:defmenu search menu,"more-options",rtn +mode,"icase",rtn % % Case insensitivity %Zicase% +mode,"wrap",rtn % % Search wraps %Zwrap% +mode,"search_prompting",rtn % % Search prompting %Zsearch_prompting% +mode,"csmode",rtn % % Continued search %Zcsmode% + +:defmenu paragraph menu,"more-options",rtn +mode,"french",rtn % % French spacing %Zfrench% +mode,"flowed",rtn % % Flowed text %Zflowed% +mode,"cpara",rtn % % Paragraph indent chars %Zcpara% +mode,"cnotpara",rtn % % Not-paragraph chars %Zcnotpara% + +:defmenu file menu,"more-options",rtn +mode,"restore",rtn % % Restore cursor %Zrestore% +mode,"guess_crlf",rtn % % Auto detect CR-LF %Zguess_crlf% +mode,"guess_indent",rtn % % Guess indent %Zguess_indent% +mode,"guess_non_utf8",rtn % % Guess non-UTF-8 %Zguess_non_utf8% +mode,"guess_utf8",rtn % % Guess UTF-8 %Zguess_utf8% +mode,"guess_utf16",rtn % % Guess UTF-16 %Zguess_utf16% +mode,"force",rtn % % Force last NL %Zforce% +mode,"nobackup",rtn % % No backup %Znobackup% + +:defmenu global menu,"more-options",rtn +mode,"nolocks",rtn % % Disable locks %Znolocks% +mode,"nobackups",rtn % % Disable backups %Znobackups% +mode,"nodeadjoe",rtn % % Disable DEADJOE %Znodeadjoe% +mode,"nomodcheck",rtn % % Disable mtime check %Znomodcheck% +mode,"nocurdir",rtn % % Disable current dir %Znocurdir% +mode,"exask",rtn % % Exit ask %Zexask% +mode,"nosta",rtn % % Disable status line %Znosta% +mode,"keepup",rtn % % Fast status line %Zkeepup% +mode,"break_hardlinks",rtn % % Break hard links %Zbreak_hardlinks% +mode,"break_links",rtn % % Break links %Zbreak_links% +mode,"joe_state",rtn % % Joe_state file %Zjoe_state% +mode,"undo_keep",rtn % % No. undo records %Zundo_keep% +mode,"backpath",rtn % % Path to backup files %Zbackpath% + +:defmenu cursor menu,"more-options",rtn +mode,"pg",rtn % % No. PgUp/PgDn lines %Zpg% +mode,"mid",rtn C Center on scroll %Zmid% +mode,"left",rtn L Columns to scroll left %Zleft% +mode,"right",rtn R Columns to scroll right %Zright% +mode,"floatmouse",rtn % % Click past end %Zfloatmouse% +mode,"rtbutton",rtn % % Right button %Zrtbutton% + +:defmenu marking menu,"more-options",rtn +mode,"autoswap",rtn % % Autoswap mode %Zautoswap% +mode,"marking",rtn % % Marking %Zmarking% +mode,"lightoff",rtn % % Auto unmask %Zlightoff% + +:defmenu tab menu,"more-options",rtn +mode,"smarthome",rtn % % Smart home key %Zsmarthome% +mode,"smartbacks",rtn % % Smart backspace %Zsmartbacks% +mode,"indentfirst",rtn % % To indent first %Zindentfirst% +mode,"purify",rtn % % Clean up indents %Zpurify% +mode,"spaces",rtn % % No tabs %Zspaces% + + THIRD SECTION: Named help screens: + + Use \i to turn on/off inverse video + Use \u to turn on/off underline + Use \b to turn on/off bold + Use \d to turn on/off dim + Use \f to turn on/off flash + Use \l to turn on/off italic + +{Basic +\i Help Screen \|turn off with ^KH more help with ESC . (^[.) \i +\i \i\|\uCURSOR\u \|\uGO TO\u \|\uBLOCK\u \|\uDELETE\u \|\uMISC\u \|\uEXIT\u \|\i \i +\i \i\|^B left ^F right \|^U prev. screen \|^KB begin \|^D char. \|^KJ reformat \|^KX save \|\i \i +\i \i\|^P up ^N down \|^V next screen \|^KK end \|^Y line \|^T options \|^C abort \|\i \i +\i \i\|^Z previous word \|^A beg. of line \|^KM move \|^W >word \|^R refresh \| \|\i \i +\i \i\|^X next word \|^E end of line \|^KC copy \|^O word< \|^@ insert \|\uFILE\u \|\i \i +\i \i\|\uSEARCH\u \|^KU top of file \|^KY delete \|^J >line \|\uSPELL\u \|^KD save \|\i \i +\i \i\|^KF find text \|^KV end of file \| \|^_ undo \|^[N word \| \|\i \i +\i \i\|^L find next \|^KL to line No. \| \|^^ redo \|^[L file \| \|\i \i +} + +{Windows +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \i\|^KO Split the window in half \| \|\i \i +\i \i\|^KG Make current window bigger \|^KT Make current window smaller \|\i \i +\i \i\|^KN Go to the window below \|^KP Go to the window above \|\i \i +\i \i\|^C Eliminate the current window \|^KI Show all windows / Show one window\|\i \i +} + +{Advanced +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \i\|\uMACROS\u \|\uMISC\u \|\uSCROLL\u \| \|\uGOTO\u \|\uI-SEARCH\u \|\i \i +\i \i\|^K[ 0-9 Record \|^K SPACE status \|^[W Up \| \|^[B To ^KB \|^[R Backwards\|\i \i +\i \i\|^K] Stop \|^K\\ Repeat \|^[Z Down \| \|^[K To ^KK \|^[S Forwards \|\i \i +\i \i\|^K 0-9 Play \|^[M Math \|^[< Left \|\uQUOTE\u \|\uDELETE\u \|\uBOOKMARKS\u \|\i \i +\i \i\|^K? Query \|^KA Center line \|^[> Right \|` Ctrl- \|^[Y yank \|^[ 0-9 Goto \|\i \i +\i \i\|^[D Dump \|^[H Message \| \|^\\ Meta- \|^[O line< \|^[^[ Set \|\i \i +} + +{Programs +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \i\|\uGOTO\u \|\uINDENT\u \|\i \i +\i \i\|^G Matching ( [ { \|^K, less \|\i \i +\i \i\|^K- Previous place \|^K. more \|\i \i +\i \i\|^K= Next place \| \|\i \i +} + +{Search +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch sequences: \|\i \i +\i \i \\^ \\$ matches beg./end of line \\. match any single char \|\i \i +\i \i \\< \\> matches beg./end of word \\! match char or expression \|\i \i +\i \i \\( \\) grouping \\| match left or right \|\i \i +\i \i \\[a-z] matches one of a set \|\i \i +\i \i \\{1,3} match 1 - 3 occurrences \\? match 0 or 1 occurrence \|\i \i +\i \i \\+ match 1 or more occurrences \\* match 0 or more occurrences \|\i \i +\i \iReplace sequences: \|\i \i +\i \i \\& replaced with entire match \\1 - 9 replaced with Nth group \|\i \i +\i \i \\u \\l convert next to upper/lower \\U \\L case convert until \\E \|\i \i +} + +{Escape sequences +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iEscape sequences: \\x{10fff} Unicode code point \\p{Ll} Unicode category \|\i \i +\i \i \\i / \\I Identifier start \\t tab \\e escape \|\i \i +\i \i \\c / \\C Identifier continue \\n newline \\r carriage return \|\i \i +\i \i \\d / \\D Digit / Not a digit \\b backspace \\xFF hex character \|\i \i +\i \i \\w / \\W Word / Not a word \\a alert \\377 octal character \|\i \i +\i \i \\s / \\S Space / Not a space \\f formfeed \\\\ backslash \|\i \i +} + +{SearchOptions +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \iSearch options: \|\i \i +\i \i r Replace k Restrict search to highlighted block \|\i \i +\i \i i Ignore case b Search backwards instead of forwards \|\i \i +\i \i a Search across all loaded files \|\i \i +\i \i e Search across all files in Grep or Compile error list \|\i \i +\i \i w / n Allow / prevent wrap to start of file \|\i \i +\i \i x / y Search text is standard format / JOE format regular expression \|\i \i +\i \i nnn Perform exactly nnn replacements \|\i \i +} + +{Math +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \i \uCOMMANDS\u (hit ESC m for math) \uFUNCTIONS\u \|\i \i +\i \i hex hex display mode sin cos tab asin acos atan \|\i \i +\i \i dec decimal mode sinh cosh tanh asinh acosh atanh \|\i \i +\i \i ins type result into file sqrt cbrt exp ln log \|\i \i +\i \i eval evaluate block int floor ceil abs erg ergc \|\i \i +\i \i 0xff enter number in hex \|\i \i +\i \i 3e-4 floating point decimal \uBLOCK\u \|\i \i +\i \i a=10 assign a variable sum cnt Sum, count \|\i \i +\i \i 2+3:ins multiple commands avg dev Average, std. deviation \|\i \i +\i \i e pi constants \uOPERATORS\u \|\i \i +\i \i ans previous result ! ^ * / % + - < <= > >= == != && || ? :\|\i \i +} + +{Joe +\i Help Screen \|turn off with ^KH prev. screen ^[, next screen ^[. \i +\i \i Send bug reports to: http://sourceforge.net/projects/joe-editor \|\i \i +\i \i \|\i \i +\i \i default joerc file is here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/etc/joe/joerc \|\i \i +\i \i default syntax and i18n files are here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/joe \|\i \i +\i \i additional documentation can be found here /nix/store/kzs0lzhd6y1hff274jz2kb2yhsbrsmss-joe-static-i686-unknown-linux-musl-4.6/share/doc/joe \|\i \i +} + +{CharTable +\i Help Screen \|turn off with ^KH prev. screen ^[, \i +\i \i\| Dec \u 0123 4567 8901 2345 0123 4567 8901 2345 \u Dec \|\i \i +\i \i\| | | \|\i \i +\i \i\| 0 | \u@ABC\u \uDEFG\u \uHIJK\u \uLMNO\u \i\u@ABC\u\i \i\uDEFG\u\i \i\uHIJK\u\i \i\uLMNO\u\i | 128 \|\i \i +\i \i\| 16 | \uPQRS\u \uTUVW\u \uXYZ[\u \u\\]^_\u \i\uPQRS\u\i \i\uTUVW\u\i \i\uXYZ[\u\i \i\u\\]^_\u\i | 144 \|\i \i +\i \i\| 32 | !"# $%&' ()*+ ,-./ ═║╒ё ╓╔╕╖ ╗╘╙╚ ╛╜╝╞ | 160 \|\i \i +\i \i\| 48 | 0123 4567 89:; <=>? ╟╠╡Ё ╢╣╤╥ ╦╧╨╩ ╪╫╬© | 176 \|\i \i +\i \i\| 64 | @ABC DEFG HIJK LMNO юабц дефг хийк лмно | 192 \|\i \i +\i \i\| 80 | PQRS TUVW XYZ[ \\]^_ пярс тужв ьызш эщчъ | 208 \|\i \i +\i \i\| 96 | `abc defg hijk lmno ЮАБЦ ДЕФГ ХИЙК ЛМНО | 224 \|\i \i +\i \i\| 112 | pqrs tuvw xyz{ |}~ ПЯРС ТУЖВ ЬЫЗШ ЭЩЧЪ | 240 \|\i \i +} + + FOURTH SECTION: Key bindings: + + Section names you must provide: + + :main For editing window + :prompt For prompt lines + :query For single-character query lines + :querya Singe-character query for quote + :querysr Search & Replace single-character query + :shell For shell windows + :vtshell For terminal emulator windows + + Other sections may be given as well for organization purposes or for + use with the '-keymap' option. + + Use: + :inherit name To copy the named section into the current one + :delete key To delete a key sequence from the current section + + Keys: + + Use ^@ through ^_, ^# and ^? for Ctrl chars + Use SP for space + Use a TO b to generate a range of characters + Use MDOWN, MDRAG, MUP, M2DOWN, M2DRAG, M2UP, M3DOWN, M3DRAG, M3UP for mouse + Use MWDOWN, MWUP for wheel mouse motion + + You can also use termcap string capability names. For example: + + .ku Up + .kd Down + .kl Left + .kr Right + .kh Home + .kH End + .kI Insert + .kD Delete + .kP PgUp + .kN PgDn + .k1 - .k9 F1 - F9 + .k0 F0 or F10 + .k; F10 + + Macros: + + Simple macros can be made by comma seperating 2 or more command names. For + example: + + bof,bol ^T Z Goto beginning of last line + + Also quoted matter is typed in literally: + + bol,">",dnarw .k1 Quote news article line + + Macros may cross lines if they end with , + +:windows Bindings common to all windows +type U+0 TO U+10FFFF +abort ^C Abort window +abort ^K Q +abort ^K ^Q +abort ^K q +arg ^K \ Repeat next command +explode ^K I Show all windows or show only one window +explode ^K ^I +explode ^K i +help ^K H Help menu +help ^K ^H +help ^K h +hnext ^[ . Next help window +hprev ^[ , Previous help window +maths ^[ m Calculator +maths ^[ M Calculator +maths ^[ ^M Calculator +msg ^[ h Display a message +msg ^[ H Display a message +msg ^[ ^H Display a message +nextw ^K N Goto next window +nextw ^K ^N +nextw ^K n +pgdn .kN Screen down +pgdn ^V +pgdn ^[ [ 6 ~ + pgdn ^# S +pgup .kP Screen up +pgup ^U +pgup ^[ [ 5 ~ + pgup ^# T +play ^K 0 TO 9 Execute macro +prevw ^K P Goto previous window +prevw ^K ^P +prevw ^K p +query ^K ? Macro query insert +record ^K [ Record a macro +retype ^R Refresh screen +rtn ^M Return + shell ^K Z Shell escape + shell ^K ^Z + shell ^K z +stop ^K ] Stop recording + + Mouse handling +defmdown MDOWN Move the cursor to the mouse location +defmup MUP +defmdrag MDRAG Select a region of characters +defm2down M2DOWN Select the word at the mouse location +defm2up M2UP +defm2drag M2DRAG Select a region of words +defm3down M3DOWN Select the line at the mouse location +defm3up M3UP +defm3drag M3DRAG Select a region of lines +defmiddleup MIDDLEUP +defmiddledown MIDDLEDOWN Insert text + +xtmouse ^[ [ M Introduces an xterm mouse event +extmouse ^[ [ < Introduces an extended xterm mouse event + +:main Text editing window +:inherit windows + + Spell-check macros + + Ispell +:def ispellfile filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype +:def ispellword psh,nextword,markk,prevword,markb,filt,"cat >ispell.tmp;ispell ispell.tmp /dev/tty;tr -d $SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;cat $SPLTMP;/bin/rm $SPLTMP",rtn,retype +:def aspellword psh,nextword,markk,prevword,markb,filt,"SPLTMP=ispell.tmp;cat >$SPLTMP;aspell --lang=",language,".",charset," -x -c $SPLTMP /dev/tty;tr -d <$SPLTMP '\\012';/bin/rm $SPLTMP",rtn,retype,nextword + +ispellfile ^[ l +ispellword ^[ n + +paste ^[ ] 5 2 ; Base64 paste (obsolete) +brpaste ^[ [ 2 0 0 ~ Bracketed paste +brpaste_done ^[ [ 2 0 1 ~ Bracketed paste done + +insc ^[ [ 2 ~ +insc ^[ [ L SCO + +delch ^[ [ 3 ~ + +pgup ^[ [ I SCO + +pgdn ^[ [ G SCO + +home ^[ [ 1 ~ Putty, Linux, Cygwin +home ^[ [ H Xterm, Konsole, SCO +home ^[ O H gnome-terminal +home ^[ [ 7 ~ RxVT + home ^# SP A Amiga + +eol ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eol ^[ [ F Xterm, Konsole, SCO +eol ^[ O F gnome-terminal +eol ^[ [ 8 ~ RxVT + eol ^# SP @ Amiga + + Extra functions not really part of JOE user interface: + +delbol ^[ o Delete to beginning of line +delbol ^[ ^O Delete to beginning of line +dnslide ^[ z Scroll down one line +dnslide ^[ Z Scroll down one line +dnslide ^[ ^Z Scroll down one line +dnslide,dnslide,dnslide,dnslide MWDOWN + switch,rtn,filt, + query,parserr ^[ c Compile + switch,rtn,filt, + query,parserr ^[ C Compile + switch,rtn,filt, + query,parserr ^[ ^C Compile + execmd ^[ x Prompt for command to execute + execmd ^[ X Prompt for command to execute + execmd ^[ ^X Prompt for command to execute +isrch ^[ s Forward incremental search +isrch ^[ S Forward incremental search +isrch ^[ ^S Forward incremental search +notmod ^[ ~ Not modified + nxterr ^[ = To next error +parserr ^[ e Parse errors in current buffer +parserr ^[ E Parse errors in current buffer +parserr ^[ ^E Parse errors in current buffer + prverr ^[ - To previous error +rsrch ^[ r Backward incremental search +rsrch ^[ R Backward incremental search +rsrch ^[ ^R Backward incremental search + run ^[ ! Run a program in a window +tomarkb ^[ b Go to beginning of marked block +tomarkb ^[ ^B Go to beginning of marked block +tomarkk ^[ k Go to end of marked block +tomarkk ^[ ^K Go to end of marked block +tomarkk ^[ K Go to end of marked block +txt ^[ i Prompt for text and insert it +txt ^[ ^I Prompt for text and insert it +txt ^[ I Prompt for text and insert it +upslide ^[ w Scroll up one line +upslide ^[ ^W Scroll up one line +upslide ^[ W Scroll up one line +upslide,upslide,upslide,upslide MWUP +yankpop ^[ y Undelete text +yankpop ^[ ^Y Undelete text +yankpop ^[ Y Undelete text + + bufed ^[ d Menu of buffers + pbuf ^[ . Next buffer + nbuf ^[ , Prev buffer + query ^[ q Quoted insert + byte ^[ n Goto byte + col ^[ c Goto column + abortbuf ^[ k Kill current buffer- don't mess with windows + ask ^[ a Ask to save current buffer + bop ^[ p Backwards paragraph + bos ^[ x Bottom of screen + copy ^[ ^W Copy block into yank + dupw ^[ \ Split window + eop ^[ n Forwards paragraph + format ^[ j Format paragraph ignore block + markl ^[ l Mark line + nmark ^[ @ Turn off ^KB ^KK + pop ^[ > Pop ^KB ^KK + psh ^[ < Push ^KB ^KK + swap ^[ x Swap ^KB and cursor + tomarkbk ^[ g Switch between beginning and end of marked + tos ^[ e Top of screen + tw0 ^[ 0 Kill current window (orphans buffer) + tw1 ^[ 1 Kill all other windows (orphans buffers) + uarg ^[ u Universal argument + yank ^[ ^Y Undelete previous text + yapp ^[ w Append next delete to previous yank + +insc ^@ Ctrl-space used to insert a space + + Standard JOE user interface + +quote8 ^\ Enter Meta chars +quote ` Enter Ctrl chars + +backs ^? Backspace +backs ^H +backw ^O Backspace word + bknd ^K ' Shell window +blkcpy ^K C Copy marked block +blkcpy ^K ^C +blkcpy ^K c +blkdel ^K Y Delete marked block +blkdel ^K ^Y +blkdel ^K y +blkmove ^K M Move marked block +blkmove ^K ^M +blkmove ^K m + blksave ^K W Save marked block + blksave ^K ^W + blksave ^K w +bof ^K U Goto beginning of file +bof ^K ^U +bof ^K u +bol .kh Goto beginning of line +bol ^A +bol ^[ [ H +bol ^[ [ 1 ~ + bol ^# SP A +center ^K A Center line +center ^K ^A +center ^K a +crawll ^K < Pan left +crawll ^[ < Pan left +crawlr ^K > Pan right +crawlr ^[ > Pan right +delch .kD Delete character +delch ^D +deleol ^J Delete to end of line +dellin ^Y Delete entire line +delw ^W Delete word to right +dnarw .kd Go down +dnarw ^N +dnarw ^[ O B +dnarw ^[ [ B + dnarw ^# B + edit ^K E Edit a file + edit ^K ^E + edit ^K e +eof ^K V Go to end of file +eof ^K ^V +eof ^K v +eol .kH Go to end of line +eol ^E +eol ^[ [ F +eol ^[ [ 4 ~ +exsave ^K X Save and exit +exsave ^K ^X +exsave ^K x +ffirst ^K F Find first +ffirst ^K ^F +ffirst ^K f + filt ^K / Filter block +fnext ^L Find next +fmtblk ^K J Format paragraphs in block +fmtblk ^K ^J +fmtblk ^K j +gomark ^[ 0 TO 9 Goto bookmark +groww ^K G Grow window +groww ^K ^G +groww ^K g +insc .kI Insert a space + insc ^@ + insf ^K R Insert a file + insf ^K ^R + insf ^K r +lindent ^K , Indent to left +line ^K L Goto line no. +line ^K ^L +line ^K l +ltarw .kl Go left +ltarw ^B +ltarw ^[ O D +ltarw ^[ [ D + ltarw ^# D +macros ^[ d Dump keyboard macros +macros ^[ ^D +markb ^K B Set beginning of marked block +markb ^K ^B +markb ^K b +markk ^K K Set end of marked block +markk ^K ^K +markk ^K k +menu,"root",rtn ^T Options menu +nextpos ^K = Goto next position in position history +nextword ^X Goto next word +open ^] Split line +prevpos ^K - Previous position in history +prevword ^Z Previous word +redo ^^ Redo changes +rindent ^K . Indent to right +rtarw .kr Go right +rtarw ^F +rtarw ^[ O C +rtarw ^[ [ C + rtarw ^# C +ask ^K D Save file- no prompt +ask ^K S +ask ^K ^D +ask ^K ^S +ask ^K d +ask ^K s + save ^K D Save file + save ^K S + save ^K ^D + save ^K ^S + save ^K d + save ^K s +setmark ^[ ^[ Set bookmark +shrinkw ^K T Shrink window +shrinkw ^K ^T +shrinkw ^K t +splitw ^K O Split window +splitw ^K ^O +splitw ^K o +stat ^K SP Show status +stat ^K ^@ Show status + tag ^K ; Tags file search +tomatch ^G Goto matching parenthasis +undo ^_ Undo changes +uparw .ku Go up +uparw ^P +uparw ^[ O A +uparw ^[ [ A + uparw ^# A + +:prompt Prompt windows +:inherit main +complete ^I +dnarw,eol .kd Go down +dnarw,eol ^N +dnarw,eol ^[ O B +dnarw,eol ^[ [ B + dnarw,eol ^# B +uparw,eol .ku Go up + uparw,eol ^# A +uparw,eol ^P +uparw,eol ^[ O A +uparw,eol ^[ [ A + +:menu Selection menus +:inherit windows + +pgupmenu ^[ [ I + +pgdnmenu ^[ [ G + +bolmenu ^[ [ 1 ~ Putty, Linux, Cygwin +bolmenu ^[ [ H Xterm, Konsole +bolmenu ^[ O H gnome-terminal +bolmenu ^[ [ 7 ~ RxVT + bolmenu ^# SP A Amiga + +eolmenu ^[ [ 4 ~ Putty, Linux, Cygwin, ssh +eolmenu ^[ [ F Xterm, Konsole +eolmenu ^[ O F gnome-terminal +eolmenu ^[ [ 8 ~ RxVT + eolmenu ^# SP @ Amiga + +abort ^[ ^[ +backsmenu ^? +backsmenu ^H +bofmenu ^K U +bofmenu ^K ^U +bofmenu ^K u +bolmenu .kh +bolmenu ^A +dnarwmenu .kd +dnarwmenu ^N +dnarwmenu ^[ [ B + dnarwmenu ^# B +dnarwmenu ^[ O B +eofmenu ^K V +eofmenu ^K ^V +eofmenu ^K v +eolmenu .kH +eolmenu ^E +ltarwmenu .kl +ltarwmenu ^B +ltarwmenu ^[ [ D + ltarwmenu ^# D +ltarwmenu ^[ O D +pgdnmenu .kN Screen down +pgdnmenu ^V +pgdnmenu ^[ [ 6 ~ + pgdnmenu ^# S +pgupmenu .kP Screen up +pgupmenu ^U +pgupmenu ^[ [ 5 ~ + pgupmenu ^# T +rtarwmenu .kr +rtarwmenu ^F +rtarwmenu ^[ [ C + rtarwmenu ^# C +rtarwmenu ^[ O C +rtn SP +rtn ^I +rtn ^K H +rtn ^K h +rtn ^K ^H +tabmenu ^I +uparwmenu .ku +uparwmenu ^P +uparwmenu ^[ [ A + uparwmenu ^# A +uparwmenu ^[ O A +defm2down M2DOWN Hits return key + +:query Single-key query window +:inherit windows + +:querya Single-key query window for quoting +type U+0 TO U+10FFFF + +:querysr Search & replace query window +type U+0 TO U+10FFFF + +:shell Input to shell windows +:inherit main +"" ^C Abort +"" ^D Eof +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace + +:vtshell Input to ANSI shell windows +:inherit main +""  [ A +"" .ku +""  [ B +"" .kd +""  [ C +"" .kr +""  [ D +"" .kl +"" ^A BOL for bash +"" ^C Abort +"" ^D Eof +"" ^E EOL for bash +"\t" ^I Tab +"" ^H Backspace +"\r" ^M Return +"" ^? Backspace diff --git a/joe/etc/joe/shell.csh b/joe/etc/joe/shell.csh new file mode 100644 index 0000000..2991f2f --- /dev/null +++ b/joe/etc/joe/shell.csh @@ -0,0 +1,42 @@ +# Aliases for csh/tcsh in JOE shell window + +alias joehelp 'echo "clear - erase buffer"; \\ +echo "joe - edit file"; \\ +echo "math 1+2 - calculator"; \\ +echo "pop - dismiss shell"; \\ +echo "parse - grep parse the buffer"; \\ +echo "parserr - compile parse the buffer"; \\ +echo "release - drop parsed messages"; \\ +echo "markb - mark beginning of region"; \\ +echo "markk - mark end of region"; \\ +echo "mark cmd - mark output of command"' + +alias clear "echo -n \{shell_clear}" + +alias parse "echo -n \{shell_gparse}" + +alias parserr "echo -n \{shell_parserr}" + +alias release "echo -n \{shell_release}" + +alias markb "echo -n \{shell_markb}" + +alias markk "echo -n \{shell_markk}" + +alias mark "echo -n \{shell_markb}; "\!\*"; echo -n \{shell_markk}" + +alias math "echo -n \{shell_math,"\\\"\!\*\\\"",shell_rtn\\!,shell_typemath}; cat >/dev/null" + +alias edit "echo -n \{shell_edit,"\\\"\!\*\\\"",shell_rtn}" + +alias joe "echo -n \{shell_edit,"\\\"\!\*\\\"",shell_rtn}" + +alias pop "echo -n \{shell_pop}" + +alias cd "cd "\!\*"; echo -n \{shell_cd,shell_dellin\\!,"\\\""; pwd | tr -d '\n'; echo -n /"\\\"",shell_rtn}" + +clear + +echo +echo Type joehelp for editor shell commands +echo diff --git a/joe/etc/joe/shell.sh b/joe/etc/joe/shell.sh new file mode 100644 index 0000000..e340fec --- /dev/null +++ b/joe/etc/joe/shell.sh @@ -0,0 +1,147 @@ +# Aliases for sh/dash/ash/bash/ksh/zsh in JOE shell window + +joehelp () { + echo "clear - erase buffer" + echo "joe - edit file" + echo "math 1+2 - calculator" + echo "pop - dismiss shell" + echo "parse [cmd] - grep parse command" + echo "parserr [cmd] - compile parse command" + echo "release - drop parsed messages" + echo "markb - mark beginning of region" + echo "markk - mark end of region" + echo "mark cmd - mark output of command" +} + +# Clear edit buffer +joe_clear () { + echo -n '{'shell_clear'}' +} + +# Release errors +joe_release () { + echo -n '{'shell_release'}' +} + +# Set marked region beginning +joe_markb () { + echo -n '{'shell_markb'}' +} + +# Set marked region end +joe_markk () { + echo -n '{'shell_markk'}' +} + + +# Mark command result +joe_mark () { + joe_markb + $* + joe_markk +} + +# Parse command result (or whole buffer if no arg) +joe_parse () { + if [ "$1" = "" ]; then + echo -n '{'shell_gparse'}' + else + joe_markb + $* + joe_markk + echo '{'shell_gparse'}' + fi +} + +# Parse command result (or whole buffer if no arg) +joe_parserr () { + if [ "$1" = "" ]; then + echo '{'shell_parse'}' + else + joe_markb + $* + joe_markk + echo '{'shell_parse'}' + fi +} + +# Use JOE's calculator +joe_math () { + echo -n '{'shell_math,'"'$1'"',shell_rtn!,shell_typemath'}' + cat >/dev/null +} + +# Edit a file +joe_edit () { + echo -n '{'shell_edit,'"'$1'"',shell_rtn'}' +} + +# Pop shell window +joe_pop () { + echo -n '{'shell_pop'}' +} + +unalias cd 2>/dev/null + +# Change directory +joe_cd () { + # cd $1 - does not work for directories with spaces in their names + # cd "$1" - breaks cd with no args (it's supposed to go to home directory) + # So we have do this... + if [ "$1" = "" ]; then + cd + else + cd "$1" + fi + # Tell JOE our new directory + echo -n '{'shell_cd,shell_dellin!,'"'`pwd`/'"',shell_rtn'}' +} + +alias clear=joe_clear +alias math=joe_math +alias edit=joe_edit +alias joe=joe_edit +alias pop=joe_pop +alias cd=joe_cd +alias parse=joe_parse +alias parserr=joe_parserr +alias release=joe_release +alias markb=joe_markb +alias markk=joe_markk +alias mark=joe_mark + +# Code to automatically mark and parse output from each command +# - This is bash specific code + +#joe_markb_pre () { +# joe_markb +# MARK_FLAG=1 +#} + +#joe_markk_post () { +# if [ "$MARK_FLAG" = "1" ]; then +# joe_markk +# MARK_FLAG=0 +# joe_parse +# fi +#} + +#preexec () { :; } + +#preexec_invoke_exec () { +# [ -n "$COMP_LINE" ] && return # do nothing if completing +# [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND +# local this_command=`HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//"`; +# joe_markb_pre +# preexec "$this_command" +#} + +#trap 'preexec_invoke_exec' DEBUG + +#PROMPT_COMMAND=joe_markk_post + +joe_clear + +echo +echo Type joehelp for editor shell commands +echo diff --git a/joe/package.joe.zip b/joe/package.joe.zip new file mode 100644 index 0000000..742502a Binary files /dev/null and b/joe/package.joe.zip differ diff --git a/joe/root/.joerc b/joe/root/.joerc new file mode 100644 index 0000000..e69de29 diff --git a/joe/usr/share/applications/jmacs.desktop b/joe/usr/share/applications/jmacs.desktop new file mode 100644 index 0000000..a159090 --- /dev/null +++ b/joe/usr/share/applications/jmacs.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Name=Joe's Own Editor - EMACS Emulation +GenericName=Text Editor +Comment=View and edit files +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=/usr/bin/jmacs %F +TryExec=jmacs +Icon=accessories-text-editor +Type=Application +Terminal=true +Categories=Utility;Development;TextEditor; diff --git a/joe/usr/share/applications/joe.desktop b/joe/usr/share/applications/joe.desktop new file mode 100644 index 0000000..290d4a3 --- /dev/null +++ b/joe/usr/share/applications/joe.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Name=Joe's Own Editor +GenericName=Text Editor +Comment=View and edit files +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=/usr/bin/joe %F +TryExec=joe +Icon=accessories-text-editor +Type=Application +Terminal=true +Categories=Utility;Development;TextEditor; diff --git a/joe/usr/share/applications/jpico.desktop b/joe/usr/share/applications/jpico.desktop new file mode 100644 index 0000000..16cfa4d --- /dev/null +++ b/joe/usr/share/applications/jpico.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Name=Joe's Own Editor - NANO/PICO Emulation +GenericName=Text Editor +Comment=View and edit files +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=/usr/bin/jpico %F +TryExec=jpico +Icon=accessories-text-editor +Type=Application +Terminal=true +Categories=Utility;Development;TextEditor; diff --git a/joe/usr/share/applications/jstar.desktop b/joe/usr/share/applications/jstar.desktop new file mode 100644 index 0000000..09d8d57 --- /dev/null +++ b/joe/usr/share/applications/jstar.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Name=Joe's Own Editor - WordStar Emulation +GenericName=Text Editor +Comment=View and edit files +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=/usr/bin/jstar %F +TryExec=jstar +Icon=accessories-text-editor +Type=Application +Terminal=true +Categories=Utility;Development;TextEditor; diff --git a/joe/usr/share/doc/joe/ChangeLog b/joe/usr/share/doc/joe/ChangeLog new file mode 100644 index 0000000..fb8ff11 --- /dev/null +++ b/joe/usr/share/doc/joe/ChangeLog @@ -0,0 +1,2189 @@ +Thu Jul 20 15:23:23 EDT 2006 + + Fix $# in shell highlighter. + + Fix .in files in ftype + +Tue Jul 18 14:20:39 EDT 2006 + + Tags file patch: allows you to put a path in TAGS environment + variable. + +Thu Jul 13 09:53:31 EDT 2006 + + Fix possible querysave bug. + + Fix query window bug: cursor was not left in original windows for + new multi-line query window thing. + + Fix bug where we could not find ^@ + + Accept ,start,size notation only if it is correct. + +Mon Jul 10 13:38:04 EDT 2006 + + Fix bug from undo_keep: undo_keep has to be a multiple of 2 for redo + to work properly. + +Wed Jun 21 09:16:49 EDT 2006 + + New undo_keep option. + +Thu Jun 15 14:17:03 EDT 2006 + + Add built-in joerc file. + +Sat Jun 10 10:06:41 EST 2006 + + Fix menu bug: coredump on left arrow. + +Tue Jun 6 22:58:41 EDT 2006 + + allow |comments| in gettext strings. + + dnelson's patches for large files, + tty.c include file problems and $(srcdir). + +Sat Jun 3 09:48:41 EDT 2006 + + new syntax files: m4 joerc + + use hash table in rc file parser. + + use hash table in syntax parser. + + add auto-expanding hash table. + + i18n of other single-key prompts. add joe_gettext to yncheck. + + fix bug coredump when doing multi-file search and replace + +Fri Jun 2 10:49:21 EDT 2006 + + internationalized y/n handling. + + new spell check macro which uses 'language' + + fix sh highlight bug: do not try to highlight $( ) + +Wed May 31 22:37:56 EDT 2006 + + query windows can now be multi-line. Also they should handle wide + characters properly. + + you can now type a macro right into the ESC X prompt. + + New * Startup Log * window catches .jsf file errors. + +JOE 3.4 ---> + +Tue May 30 09:26:59 EDT 2006 + + Wordwrap improvements. + + Fix gettext() bug foudn by egmont. + + Change tag ^K ; to jump to beginning of file before doing a search. + + Cygwin fixes + + Missing @JOERC@ in joerc.in + + + +Fri May 26 11:13:10 EDT 2006 + + Autoindent now happens for word-wrap. + + Fix ':include' so that it searches ~/.joe and JOERC + + Put file type table in a separate file. + + Limit no. yank records stored in .joe_state + + new '-transpose' flag transposes all menus. + + more columns for line number + +Wed May 24 11:01:53 EDT 2006 + + Rearrange directories. + Check for localized joerc file, like joerc.ru. + + Only complain if lock already exists on a file. + + Give file changed under us notice only once. + + New -help_is_utf8 option- allows help text to be either UTF-8 or + 8-bit. + + Restore cursor position works for ^K E + + Improve sh highlighter + + Rearrange again: now we use SUBDIRS + +Tue May 23 17:28:48 EDT 2006 + + Switch to my own gettext() library. + +Mon May 22 23:35:21 EDT 2006 + + Fix shell highlighting bugs. + + Clean up ^T options display. + + Fix querysave bug (it was not always saving everything!) + + Add Russion .po file. + + Get gettext() to actually work. + + Add -restore option. + +2006-05-22 gettextize + + * Makefile.am (ACLOCAL_AMFLAGS): New variable. + (EXTRA_DIST): Add m4/ChangeLog. + +2006-05-22 gettextize + + * Makefile.am (SUBDIRS): New variable. + (ACLOCAL_AMFLAGS): New variable. + (EXTRA_DIST): Add config.rpath. + * configure.ac (AC_CONFIG_FILES): Add po/Makefile.in, m4/Makefile. + +Sun May 21 12:28:10 EST 2006 + + 'e' option for search & replace. + + Add -guess_utf8 and -guess_non_utf8 options. + + Add gettext() support. + +Sat May 20 17:03:48 EDT 2006 + + Improve compile window + + Jump to previous file cursor position. + + 'a' option for search & replace. + +Fri May 19 13:29:11 EDT 2006 + + Add REX. Fix highlighter subroutine bugs. + + Update php, html, css and═java highlighters to take + advantage of subroutines. + + Add LUA + + Heredoc support for PHP + + Add Ruby + + Eliminate ^# from *rc files. This is only used in Amiga, and it + screws up i18n. + + Assume256 color now uses normal entry for colors less than t->Co. + +Tue May 16 01:31:16 EDT 2006 + + Get rid of last type punning warning. + + Add subroutines to syntax highlighter. + + Fix .tcl highlighting glitch. + +Sun May 14 12:20:40 EDT 2006 + + cleanup header files. + + gcc-4.1.0 -Wall run: fixed all but two warnings. + + Precompiled headers now work. Try: "gcc -O2 -g types.h" before + building. Saves 15 seconds out of a 95 second build. + + Change SCREEN to Screen + +Fri May 12 15:39:12 EDT 2006 + + fix lattr bugs. + +Thu May 11 10:27:47 EDT 2006 + + Add skill syntax file. + + Fix semi_comment bug. + + ^K E does not now ask to load original for scratch buffers. + + ESC SPACE now consults line number tracking database + + Fix diff highlighter bugs + +Tue May 9 11:15:22 EDT 2006 + + Fix some compiler warnings. + +Mon May 8 15:35:20 EDT 2006 + + Convert to proper character set in %x + + Guess encoding. + +Fri May 5 10:24:33 EDT 2006 + + You can now define which characters can indent paragraphs in joerc + file: look for '-cpara' in joerc file. + + Allow escape sequences in syntax highlight strings. + + Fix ^L so that it works the first time. + + Fix input redirection. + +Wed May 3 21:10:21 EDT 2006 + + Better handling of 'joe -' + +Wed May 3 16:59:06 EDT 2006 + + Improve speed of highlighting. Now it's comparable to JED's + highlighter. (VIM and emacs are 10x slower). + + Also it should now correctly handle the case of two windows open + on a file, each with a different syntax. + +Fri Apr 28 15:07:21 EDT 2006 + + Yeah! Xterm-212 now works properly with joe. The '-joexterm' option + now works without having to do any patches. + + Note that xterm should be compiled with '--enable-paste64 and + --enable-256-color' + +Tue Mar 7 23:28:47 EST 2006 + + Add joe_debug command. Fix pointer leak (caused paragraph reformat + to be very slow). + +Sun Mar 5 12:46:27 EST 2006 + + Fix range of %p + + Allow setting of foreground and background colors. + + Fix search problems with ^ $ + Backward search now moves cursor beginning of insertion point. + Still need to fix bugs with undo in search. + +Sat Mar 4 21:59:22 EST 2006 + + Highlight python docstrings the same as regular strings. + + Fix bug with -assume_256color: missing ; in escape sequence + + Fix .php variable highlighting + + File selection menu is now above prompt instead of below it. This + needs to be an option. + + Added new "-menu_above" option. + + Fix pgup/pgdn to work with menu_above. + +Wed Mar 1 10:19:49 EST 2006 + + Match how Thomas Dickey implemented the xterm-paste patch. + Xterm has a bug: if selection is not owned by xterm, the string + is messed up. + +Tue Feb 28 18:50:32 EST 2006 + + Fix bug where 'complete' command core dumps. + Fix bug where '.' alone with c highlighting enabled core dumps. + Don't run editor if joerc file is bad. + Improve lock messages. + +Mon Feb 27 01:34:37 EST 2006 + + Fix perl highlighter bug. $q not handled properly. + Show properly escaped previous search string + +Thu Feb 23 13:41:20 EST 2006 + + Fix bugs with quoted entry. Now we ignore terminal's encoding on +quoted entry. + + +Sun Feb 19 22:34:20 EST 2006 + + Fix some bugs on itanium: call to joe_malloc was return a (int) and +then got converted to a pointer. Likewise with things in termcap.c which +needed term.h and curses.h. + + Improved speed of highlighting. + +Tue Dec 27 16:56:44 EST 2005 + + Allow entry of replacement blank replacement strings when search + prompting is enabled (basically eliminate automatic replace-string + prompting). + + "bufed" now works like other file name commands (it prompts for a + buffer name, and allows completion). + + H-scroll jumps left ~ 10 cols (this needs more work: it should be an + option). + +Tue May 17 18:20:02 EDT 2005 + + Release JOE 3.3 + +Tue May 3 13:33:21 EDT 2005 + + Add .cc file type + +Sun Apr 24 00:16:25 EDT 2005 + + Fix compiler warnings from gcc-4.0.0 + +Fri Apr 22 00:47:55 EDT 2005 + + Fix ctrl-select bug when near buffer edges + + Don't use nl_langinfo(CODESET) in Cygwin. + + Add Ada syntax file + +Thu Apr 21 15:46:09 EDT 2005 + + Add some grep find support: + ESC g execute grep + ESC SP jump to "file line:" + + Add xterm-patch to make dist. + +Sun Apr 17 12:05:32 EDT 2005 + + Scripts for Cygwin. + Version numbering scheme for Cygwin. + +Fri Apr 8 10:27:24 EDT 2005 + + Add awk syntax file + Use c syntax file for yacc + Use c syntax file for lex + Add cobol syntax file + Add sed syntax file + Add postscript syntax file + +Thu Apr 7 18:25:07 EDT 2005 + + Add sql syntax file + +Wed Apr 6 12:39:15 EDT 2005 + + New xterm-patch: base64 encode the data to avoid security hole + +Fri Apr 1 00:14:58 EST 2005 + + Improve jpico: add -search_prompting option. + + Fix ^X ^S bug (was using vsdup() on a non-dynamic string). + + Add autoscrolling (when mouse goes past window edge). + +Wed Mar 30 23:47:00 EST 2005 + + New xterm-patch fixes i18n problems with mouse. + +Tue Mar 29 19:19:42 EST 2005 + + Fix some cut & paste bugs. + + Wheel can scroll menus. + + Fix bugs with mouse in hex mode, prompt windows + and when line numbers enabled. + + Prevent hex mode from prompt windows. + + Fix some i18n issues with mouse: xterm patch + needs to be fixed. + +Mon Mar 28 02:17:37 EST 2005 + + Apply (and fix) background color patch + + Allow background color to be set on object-by-object basis. + +Sat Mar 26 09:56:23 EST 2005 + + Fix some window resize bugs + + Add support for 16 and 256 color xterms. + +Sat Mar 26 00:28:58 EST 2005 + + Reformat mouse.c + + Apply diff patch + + Apply vpath patch + + Apply electrum's mouse patch (send mouse off code during + shell escape) + + Mouse can now resize windows + + Mouse can position cursor in menus. Double-click selects + an item. Need to add scroll. + +--- JOE 3.3 begins --- + +Mon Mar 21 11:56:56 EST 2005 + + Fix segfault problem + + Xcol problems in hex mode + + Backspace in overtype mode (picture mode + needs work). + + Don't use paths which begin with ! as directories. + + Fix more segfault problems: use doswitch instead of doedit. + + Don't lock scratch buffers. + + Run gcc -pedantic + +Sun Mar 20 11:54:44 EST 2005 + + Hex edit mode + + Do not CD from names on command line + + Support for wheel mouse + +Sat Mar 19 17:08:05 EST 2005 + + Fix != in math prompt + + Add modifiers to macros + + Improve jmacs + Jmacs: orphaned buffers were not having locks deleted + + Fix bug where formatting characters working in context display + + ubknd and urun were not checking for read only + + Prompt with latest directory + +Fri Mar 18 16:15:19 EST 2005 + + Change so that ` up-arrow (or any key) goes to shell. + + Prefer bash over sh for shell. + +Thu Mar 17 18:54:06 EST 2005 + + Get joe to compile on irix + + Enable .joe_state file + + Document 'backpath' bad parsing + + Put version number in state file + + Save command line file names in joe_state file + + Fix ufilt (broke with irix fix) + + Fix if (-s ...) in perl + + Parse *rc file only once + +Wed Mar 16 11:04:19 EST 2005 + + Check if system joerc file is newer than local joerc file. + + Fix line number reporting for joerc file errors. + + Add ! operator to math (factorial and logical not) + + Make ~ expansion occur at user level, not low level. + (otherwise ~ appears in b->name, which screws up + many things unless ~ is really part of the file + name). + + Make tab completion work for user names. + uname() was shadowing a system call. + +Tue Mar 15 14:18:53 EST 2005 + + Fix processing of joe.1.in -> joe.1 so + that paths are properly set up. + + Add file changed under us checking. + +Mon Mar 14 11:34:56 EST 2005 + + Fix some math and first change bugs. + Allow for file names which begin with + + + Fix bug where menu wasn't being resized. + + Fix processing of joerc.in -> joerc so that + paths are properly set up (added sed script + to Makefile.am). + +Sun Mar 13 12:39:18 EST 2005 + + Fix -mnew and -mold when there are multiple + files on command line. + + Add optional file locking. + + Add joe() math command. Executes JOE macro, and + returns success value as result. + + Added sys command: execute a shell command with + I/O connected to terminal, not editor. Return + value of shell command is success value of command. + + rdonly flag is available as math variable. + + Added perforce macro. Fixed some "if" bugs. + +Sat Mar 12 00:31:23 EST 2005 + + Update other *rc files. + Fix some marking bugs in jpico. + Allow colors to be specified in joerc file + Improve perl again. + ^D in prompts brings up menu + Fix ^X a in jmacs + Fix ^X ^I in jmacs (neg arg is broken) + +Fri Mar 11 2005 Joe Allen + + Help text points to doc files + + +Wed Mar 9 2005 Joe Allen + + ^K W now prints a success message. + + More perl highlighter fixes. + +Sat Mar 5 2005 Joe Allen + + Fix bug where ^KC to copy text into search + prompt was not working (search was taking + over selected block too early). + +Fri Mar 4 2005 Joe Allen + + Add block evaluator and ? operator to math + (now it can loop via. recursion :-) + + Add #if #else #endif matching. + + Get ^G working for VHDL (VHDL sucks). + + Disable ^K E and ^K ' in prompt windows. + + open ^] now autoindents (again). + + Fix jpico lock-up problem (lmargin option was + not checking for invalid value of 0). + + Accept buffer overflow patch. + + -square is not a local option. + +Thu Mar 3 2005 Joe Allen + + New help screen for math. + Add statistics functions. + +Wed Mar 2 2005 Joe Allen + + Fix pointer leak. + Make option to enable mouse support + Change .joe_state file to use \ for escape + Improve math + Ignore in Ctrl-G + +Wed Mar 2 2005 Joe Allen + + Fix warnings from various syntax files (can't + believe I didn't notice this...) + + Add -menu_jump option + +Tue Mar 1 2005 Joe Allen + + Allow :s in xml names. + Fix 'keymap' command. + Add 'name' command. + +Mon Feb 28 2005 Joe Allen + + User defined text delimiters + XML delimiter matching + +Sun Feb 27 2005 Joe Allen + + Fix lockup problem from Ctrl-G + Fix bugs with new 'if' command. + +Sun Feb 27 2005 Joe Allen + + Added Jesse McGrew's xterm mouse and macro enhancements: + added to math: %, ==, !=, >, >=, <, <= operators, + plus 'char' is ascii value of character under cursor. + + added functions: if, then, elsif, endif + + Needs work: + 'if' crashes. + xterm selections don't paste into other windows. + +Sat Feb 26 2005 Joe Allen + + Tab complete for ^K ; (tags search). + +Sat Feb 26 2005 Joe Allen + + Allow '-' in file names in compiler error parser. + +Sat Feb 26 2005 Joe Allen + + Accept patch from Kalan (thearinkalen at users.sourceforge.net) + which makes save block prompt if a file is to be overwritten. + + Accept patch from sth2000 at users.sourceforge.net which improves + wordwrap when overtype mode is enabled. + +Fri Feb 25 2005 Joe Allen + + Fix bash highlighter bug: $" " and $' ' are strings. + Ctrl-G starts a search if it doesn't know word under cursor. + +Sun Feb 20 2005 Joe Allen + + Fix perl highlighter bug: \"fdfdg" is a string. + +Sun Feb 20 2005 Joe Allen + + Greatly enhanced ^G (goto matching delimiter) so that it understands + quoting and comments and can operate on word delimiters + (begin...end). + +Sun Feb 20 2005 Joe Allen + + Fix perl highlighter bug: words ending in q + got confused with 'q'. + +Wed Jan 19 2005 Joe Allen + + New Pascal highlighter for Delphi and FPC + +Mon Dec 13 2004 Joe Allen + + Accept SML syntax file. + +Mon Nov 29 2004 Joe Allen + + Accept OCaml and 4GL syntax files. + + Accept UTF-8 in help file patch. Help text is now + UTF-8. + +Mon Aug 9 2004 Joe Allen + + Fix bug in joe_state code: buffer was not + large enough. + + +Thu Jul 8 2004 Joe Allen + + Merge last two changes (described below...) + + +Tue Jul 6 2004 Pavel Fedin + + Changed some fork()s to vfork()s. + Added ^# (CSI = 0x9B) control character. + Added Amiga CSI sequences to keys definitions in joerc files. + Added some #ifdef's to compile properly on AmigaOS. + +Tue Jun 22 2004 Joe Allen + + ~/.joe_state file: + + Saves macros, yanks records, and file name history in a file. + +Mon Jun 7 2004 Joe Allen + + Highlighter state now includes a saved string. + This improves shell and perl highlighters. + + +sze jЗn 2 2004 Joe Allen + + Fix for archaic systems (BSD) with no nl_langinfo(CODESET). + +Tue Jun 1 2004 Joe Allen + + Minor fix to c.jsf.in + Recognize a bunch of other mail/news files. + +Sat May 29 2004 Joe Allen + + Use 'aspell' if it exists. + Set Home, End, Insert, Del key bindings, assuming termcap + entry is wrong. + +Fri May 28 2004 Joe Allen + + Status line updates even if you keep typing. + +Fri May 28 2004 Joe Allen + + Now it will use sprintf if snprintf does not exist. + Can now build on IRIX 6.2 + +Thu May 27 2004 Joe Allen + + Fix segfault due to bad management of 'pieces' in rc/setopt(). + +Thu May 27 2004 Joe Allen + + Added asm.jsf.in. + + +Thu May 27 2004 Joe Allen + + Added diff.jsf.in. + Added improved xml.jsf.in + +Wed May 26 2004 Joe Allen + + Fix lockup problem: do not allow querysave in + prompt windows. + +Tue May 25 2004 Joe Allen + + Character set aliases now appear in ^T E tab + completion. + +Mon May 24 2004 Joe Allen + + Fix bg_reg -> bg_red. + + Now we understand aliases for character maps, like latin1 -> + iso-8859-1 and 8859-1 -> iso-8859-1. + +Mon May 24 2004 Joe Allen + + Smart indent and backspace now work even if cursor + is not right at indentation point. Also autoindent + does not happen if cursor is on a space or tab character. + + Jmacs: ^W (cut) now works if mark is after point. (Added -autoswap + mode). Also: preserve mark and point positions during block + operations. + +Wed May 19 2004 Joe Allen + + Allow options after strings in syntax files. + +Wed May 19 2004 Joe Allen + + More fixes for Cygwin: shell windows now + work properly. + +Tue May 18 2004 Joe Allen + + Changed ESC y to yank in joerc. Left ESC ^Y + as yankpop. + + Added "spring" escape sequence for help text. + +Mon May 17 2004 Joe Allen + + Fix backspace handling in shell windows. + Ring bell when we get ^G. + +Sun May 16 2004 Joe Allen + + Fix -syntax and -encoding on command line. + + Check for "pty.h" when openpty is used. + +Sun May 16 2004 Joe Allen + + Fix mason bug. + Change ^K ^M back to move block. + ^K H in jstar mode is "nmark". + +Fri May 14 2004 Joe Allen + + Mason highlighter + +Fri May 14 2004 Joe Allen + + Many jpicorc.in improvements. + +Thu May 13 2004 Joe Allen + + Improve exit messages. + + Improve 'lose' which is for jmacs. + + Improve ^X for jpico. + + Got rid of "end of processs" message in shell windows. + + Shell windows can now be orphaned and duplicated (process + is associated with B instead of BW). + + Shell window input taken from cmd.c instead of in + actual edit functions. + + Improved 'lose' again- now it fill in windows with any + orphaned buffers it can find. + +Thu May 13 2004 Joe Allen + + Small compile fix. + +Wed May 12 2004 Joe Allen + + Compile now uses shell window (so you can hit ^C during the + compile. + + Shell window termination code fix: now all of the output always + makes it to the window. + + Added query save loop to save all modified files before build. + + Added scratch buffers: they are ignored during ^K X, ^C and + querysave. + + ^X ^C is now much more like emacs. + + Fixed annoying occasional screen update glitch: it was caused + by SIGALRM causing dropped output in Linux (doesn't happen on + SUN). So now we arm SIGALRM only when waiting for input. (SIGALRM + is used to keep the clock updated). + +Wed May 12 2004 Joe Allen + + Applied Olexiy Avramchenko's patch + on configure.ac. Also added mail.jsf.in to Makefile.am + + Applied Yura Kalinichenko's "openpty" + patch. + +Tue May 11 2004 Joe Allen + + Added "upper" and "lower" functions (no longer + depend on "tr" command). + + Fix jmacs transpose word command. + +Tue May 11 2004 Joe Allen + + Fix marking mode so only window with cursor is + effected. + + Ctrl-space clears selection when cursor is in + selection, otherwise it starts a new one. + + ^K E prompts to load original file from disk. + +Tue May 11 2004 Joe Allen + * b.c ufile.c : + + Update file date on save. + Improve Ctrl- marking. + +Mon May 10 2004 Joe Allen + * ufile.c b.c : + + Warns if file changed on save. + + Add 'beep' function and updated jmacsrc.in + +Mon May 10 2004 Joe Allen + * usearch.c, uisrch.c: + + Added '-wrap' flag. Search wraps when set. + +Mon May 10 2004 Joe Allen + * *rc.in : + + More globs: .cpp, .hpp, .c++, .h++ + +Mon May 10 2004 Joe Allen + * b.c tw.c : + + New status line escape sequence: %x shows current context (function + cursor is in). + + More globs in *rc.in files. + + csh.jsf lisp.jsf + +Sun May 9 02:30:41 EDT 2004 + * sh.jsf.in : + + Improved shell script highlighter. + Fix spelling errors in joe.1.in + +Sat May 8 2004 Joe Allen + * usearch.c : + + Fixed bug in tab completion in text windows. + Change tab completion key to ^K + +Fri May 7 22:37:49 EDT 2004 + * usearch.c : + + Tab completion at search prompt. + + ESC-Tab completes within text windows. + +Fri May 7 16:02:21 EDT 2004 + * usearch.c, uisrch.c : + + Added case insensitive by default option. + +Fri May 7 2004 Joe Allen + * main.c, menu.c, pw.c, qw.c, rc.c, tab.c : + + joe a b c, now windows are in order a, b, c. + + TAB completion now works on last path in prompt window: + for example '!ls foo', tab will complete the foo. + + Added menu_explorer option. When set: menu stays up when + a directory is seleted. When clear: directory is added + to path and menu is closed. + + Menus are now 40% of window size (or smaller if they are + not filled). + + Cursor is now position after selected menu entry. + +Thu May 6 2004 Joe Allen + * umenu.c : + + TAB key now cycles through menu entries. This is useful + for tab completion: just keep hitting tab until you see the + file you want, then hit enter. + + TAB completion is more "bash"-like: if you complete a directory + name a menu does not appear, the directory just gets added to the + prompt. + +Thu May 6 2004 Joe Allen + * ublock.c : + + Added "select" function for Ctrl-arrow selecting. + Ctrl-space drops anchor and sets marking mode. + +Thu May 6 2004 Joe Allen + * uerror.c : + + Improve error parser: require ':' on error lines. + Make macro 'compile' for error parsing. + 'compile' macro always uses same buffer. + ^X ` in jmacs goes to next error. + +Thu May 6 2004 Joe Allen + * uedit.c : + + Smart tab looks back 10 lines to determine indentation. + +Wed May 5 2004 Joe Allen + * charmap.c : + + Now parses charmap files. + +Wed May 5 2004 Joe Allen + * bw.c charmap.c main.c qw.c qw.h regex.c regex.h + syntax.c types.h uisrch.c usearch.c utf8.c utf8.h: + + Regex search now works properly with UTF-8 chars. + Incremental search now works with UTF-8. + +Wed May 5 2004 Joe Allen + * utils.c, c.jsf.in: + + Fix c++ keywords. + Fix parse_ident, which was breaking fortran highlighter. + +Tue May 4 2004 Joe Allen + * rc.c, selinux.c, syntax.c, ufile.c: + + Applied new Selinux patch. + + Checks ~/.joe/syntax for syntax files. + +Tue May 4 2004 Joe Allen + * bw.c, charmap.c, main.c: + + Print locale on startup line. + + Print encoding for ^K . + + Change koi8-T to koi8-t. + +Tue May 4 2004 Joe Allen + * ChangeLog TODO b.c bw.c charmap.c charmap.h cmd.c help.c + i18n.c i18n.h joerc.in jpicorc.in jstarrc.in macro.c main.c + menu.c pw.c pw.h rc.c regex.c rjoerc.in scrn.c scrn.h syntax.c + types.h ublock.c uedit.c uerror.c ufile.c uformat.c umath.c + usearch.c ushell.c utag.c utf8.c utils.c utils.h w.c: + + Everything about character set is now contained in struct charmap. + + Deprecate ^T U. Now use ^T E to select file encoding. + +Mon May 3 2004 Joe Allen + * : + + Clean up pass: use internal ctype function everywhere. + + Also: ^T E sets file encoding. + +Mon Mai 3 2004 Joe Allen + * utils.c, utils.h, utf8.c, syntax.c, configure.ac, Makefile.am, + charmap.c, charmap.h: + + No longer use iconv(). Not 100% sure I'm going to leave it this + way. Maybe optionally use iconv(). + +Mon May 3 2004 Joe Allen + *: + + Eliminate --pedantic warnings. + +Mon May 3 2004 Joe Allen + * bw.c, i18n.c, i18n.h, b.c, configure.ac, regex.c, scrn.c, Makefile.am : + + Fix highlighter when there are utf-8 characters in file. + + No longer depend on wctype.h (working towards not depending on + iconv()). + +Sun May 2 2004 Joe Allen + * Makefile.am, configure.ac, *rc.in: + + Fix mutt mode: need -wordwrap, not -autoindent. + + Fix configure.ac and Makefile.am to link -liconv if + necessary. + +Sat May 30 2004 Joe Allen + * syntax.c : + + Fix segfault problem with load_dfa. + +Fri Apr 30 2004 Joe Allen + *: + + Improve Fortran again. + + Added '-indentfirst' option to control + how smarthome works. + + Now syntax files are loaded as needed. + + New version of automake and autoconf. + + Print UTF-8 (c) if terminal is utf-8. + +Thu Apr 29 2004 Joe Allen + *: + + Improve Fortran syntax file. + Improve Perl syntax file. + + +Wed Apr 28 2004 Joe Allen + *: + + Improve C and Java syntax files. + +Wed Apr 28 2004 Joe Allen + * syntax.c : + + More syntax files: tcl + + Now 'noeat' implies 'recolor=-1', which reduces debug time + for syntax definition files. + +Tue Apr 27 2004 Joe Allen + *: + + More syntax files: html, pascal, vhdl, fortran, java, xml. + + Allow comment lines in syntax file string lists. + +Mon Apr 26 2004 Joe Allen + * Makefile.am bw.c configure.ac *rc.in utf8.c syntax/perl.jsf.in + syntax/verilog.jsf.in: + + Forgot .pm files for perl. + + Update colors for perl and verilog. + + Added mail.jsf: works nicely with mutt + + Oops- was displaying characters between 0xA0 - 0xBF as + control characters in UTF-8. + +Mon Apr 26 2004 Joe Allen + * uedit.c ublock.c : + + Smart backspace now always fixes the indentation. + + Indent left and right always fix indentation. + +Mon Apr 26 2004 Joe Allen + * bw.c tty.c uedit.c utf8.c *rc.in: + + Fix rtarw: was not fixing xcol. + + TAB key now does smart indenting. + + smart home goes to real home first, then indentation point. + +Sun Apr 25 2004 Joe Allen + * b.c bw.c scrn.c uedit.c utf8.c utf8.h: + + Better handling of iconv() conversion errors. + + Better handling of error UTF-8 sequences. + +Sat Apr 24 2004 Joe Allen + * utf8.c, utf8.h, scrn.c, bw.c : + + Fixed utf8 encoder for characters between 0x10000 and 0x1FFFF. + + Print for unicode control characters. + +Fri Apr 23 2004 Joe Allen + + Added -guess_crlf and -guess_indent options. + + Update *rc files. + + Updated documentation. + +Thu Apr 22 2004 Joe Allen + * cmd.c, pw.c, pw.h, rc.c, syntax.c, syntax.h, types.h, uedit.c, + utils.c, utils.h, syntax/c.jsf.in: + + Fixed uopen() ^] for overtype mode. + + Added 'istrings' option in syntax files for ignoring case + in strings. + + Added ^T Y- allows you to select syntax during run time (tab + completion works too!) + + Added ^T P- picture mode: can move and type anywhere on the screen, + good for drawing ASCII art. + +Thu Apr 22 2004 Joe Allen + * uedit.c: + + Tab key only inserts when past end of line in overtype mode. + + +Thu Apr 22 2004 Joe Allen + * uedit.c: + + Fixed bugs where overtype and wordwrap modes were interacting. + Hope this doesn't cause new bugs... + +Thu Apr 22 2004 Joe Allen + * uedit.c: + + Now, enter does not insert new line when in overtype mode (unless at + end of file). Somebody asked for this. + +Wed Apr 21 2004 Joe Allen + * b.c, b.h, joerc.in, rc.c, types.h, ublock.c, uedit.c: + + Added -purify option which fixes indentation + if necessary for ^K, ^K. and smart backspace. + +Wed Apr 21 2004 Joe Allen + * ublock.c : + + ^K , and ^K . now have improved purity checking + and automatic block selection. + +Wed Apr 21 2004 Joe Allen + * rc.c, uedit.c, types.h, joerc.in: + + Added 'smartbacks' option. + +Wed Apr 21 2004 Joe Allen + * uedit.c, b.c: + + Backspace is now smart when 'smarthome' is set. + +Wed Apr 21 2004 Joe Allen + * uedit.c : + + Fix new bug caused by previous bug fix :-) + + +Tue Apr 20 2004 Joe Allen + * uedit.c : + + Fix bug where double wide characters typed at end of line was + screwing up (was assuming that they were one character wide in + the utypebw optimization logic). + + +Tue Apr 20 2004 Joe Allen + * cmd.c, joerc.in, rc.c, types.h, uedit.c, uedit.h: + + Applied David Phillips' smart home key patch. + + Changed ` u to ` x. + +Sun Apr 18 2004 Joe Allen + * syntax.c, uedit.c: + + Added ` u to insert unicode characters in hex. + + Fixed typeing of unicode (utypebw() optimization bug). + + Fixed editor hang when syntax hightlighter hits unicode characters. + +Sat Apr 17 2004 Joe Allen + * bw.c menu.c qw.c scrn.c scrn.h utf8.h w.c w.h: + + Allow UTF-8 in menu entries. + + Clear up genfield() and genfmt() stuff. Now control characters in + file names are properly displayed. + + When UTF-8 character decodes to 127 - 159, 0 - 31, display it + as a control character. + +Sat Apr 17 2004 Joe Allen + * w.c: + + Oops: fixed status line. + +Fri Apr 16 2004 Joe Allen + * ChangeLog TODO cmd.c macro.c pw.c pw.h rc.c regex.c ublock.c + uedit.c ufile.c umath.c usearch.c ushell.c utag.c utf8.c w.c + w.h: + + UTF-8 now supported in file names and prompts. + + Search should be partially working. \+ with + a UTF-8 character following is broken and + \[ ] only works for bytes. + +Fri Apr 16 2004 Joe Allen + * b.c, bw.c, rc.c, rc.h, tw.c, types.h, utf8.c: + + Fixed bug where '-syntax' on command line had + no effect. + + Now if terminal is UTF-8, the default file type + is assumed to be UTF-8. + +Thu Apr 15 2004 Joe Allen + * utf8.c: + + Added preprocessor directives to utf8.c to check + for locale support. Needs more work: should check + for iconv() support. + + Fix bug which happened when no locale env vars set. + +Thu Apr 15 2004 Joe Allen + * Makefile.am, configure.ac, main.c, scrn.c, uedit.c, + ufile.c, utf8.c, utf8.h: + + First attempt at character set conversion iconv(). + Now the file's coding can be different from the terminal's + coding. Needs error checking... + + Also, applied secure linux patch from RedHat. + +Thu Apr 15 2004 Joe Allen + * bw.c, help.c, main.c, menu.c, rc.c, scrn.c, scrn.h, + syntax.c, syntax.h, uedit.c, w.c: + + Fix syntax definition file loader so that you don't + get seg faults when you refer to a state which doesn't + exist. + + Fix outatr() to work with non-UTF-8 character sets again. + Need to start thinking about iconv(). + + Mess with option strings to make ^T look nicer. + + Got rid of yellow selection bar from ^T. + +Wed Apr 14 2004 Joe Allen + * b.c b.h macro.c main.c rc.c uedit.c uerror.c uformat.c utag.c + utils.c utils.h: + + Fix many edit fuctions for UTF-8. Now we use + iswalnum() when in UTF-8 mode. Paragraph format + works. + + Search is still broken. + +Tue Apr 13 2004 Joe Allen + * bw.c, syntax.c, syntax.h, syntax/php.jsf.in, + syntax/c.jsf.in: + + Added '-NNN' syntax to .jsf files. Allows you + to specify number of lines back to start parsing + when we don't have the syntax highlighting state. + +Tue Apr 13 2004 Joe Allen + + Moved syntax file to syntax/ subdirectory. They + still don't get installed in a subdirectory :-( + +Tue Apr 13 2004 Joe Allen + * scrn.c, rc.c, joerc.in: + + Added -assume_color global option. Need to update + other *rc files. + +Mon Apr 12 2004 Joe Allen + * Makefile.am b.c b.h bw.c scrn.c uedit.c utf8.c utf8.h: + + Input of UTF-8 is now working. For example, you + can cut and paste in an xterm. + + Placed UTF-8 encoder and decoder in separate file. + +Mon Apr 12 2004 Joe Allen + * bw.c: + + If a double-wide character hits right column, display '>' instead of + the character. If a double-wide character is one column to the left + of the screen, display '<' instead of the character. + + +Mon Apr 12 2004 Joe Allen + * almost all of them...: + + Added -notite global option: when set, prevents screen from + being restored on exit. + + Added -usetabs global option: when set, uses tabs for cursor + position update (which was the default before). Now we don't + use tabs by default. + + Completed change to 'unsigned char *' and elimination of + MAXINT. What a mess. No warnings with gcc -pedantic. + + Fix UTF-8 bugs where cursor was not correct on scrolled screen. + +Fri Apr 9 2004 Joe Allen + * b.c, b.h, bw.c, types.h: + + Fix lockup bug with down arrow on last line (utf-8). + + Type change: chars will be banned. Unsigned char * and + int will be used for characters. + +Fri Apr 9 2004 Joe Allen + * Makefile.am, b.c, b.h, bw.c, help.c, main.c, menu.c, rc.c, + scrn.c, scrn.h, types.h, uedit.c, w.c, wcwidth.c: + + Initial check-in of UTF-8 support. Use ^T U to enable UTF-8. + JOE is likely to have many bugs at this point. + +Thu Apr 8 2004 Joe Allen + * bw.c, b.c, joerc.in, rc.c, rc.h, tw.c, types.h: + + Fix screen update bug introduced with Apr 7th change. + + Option settings now can be based on file contents as well as + file name. + + Added syntax indicator for status line. + +Thu Apr 8 2004 Joe Allen + * syntax.c, syntax.h: + + Clean up syntax.c: use hash table for keywords, use subroutine for + allocating new states. + + +Wed Apr 7 2004 Joe ALlen + * scrn.c, bw.c: + + Fix highlighting bug: pointer was not always at start of line. + + Assume terminal supports color if it looks like an ansi terminal + (this should really be an option). + +Tue Apr 6 2004 Joe Allen + * Makefile.am, bw.c, configure.ac, joerc.in, rc.c, scrn.c, + scrn.h, syntax.c, syntax.h, c.jsf.in, perl.jsf.in, verilog.jsf.in: + + Clean up meaning of default color. + + Allow syntax to be specified in joerc file: "-syntax perl" + + Add class definitions to syntax files. + + Add perl and verilog definitions (they need work). + + Change joerc to assume files with . in their name do not want word + wrap enabled (except for .txt). + +Thu Apr 1 2004 Joe Allen + * scrn.c: + Fix color handling for terminals which do not use my defaults :-) + Basically we revert to the default text color, use ESC [ 0 m, not + ESC [ 37 m and ESC [ 40 m. + +Tue Mar 30 2004 Joe Allen + * uedit.c, syntax.c, syntax.h, types.h, bw.c: + Next steps for syntax highlighting: + Now there is a real parser, so syntax files + can be defined (although, it only loads + the C language c.jsf for now). + + The line length limit has been eliminated. + + It should be faster for large files: we start + parsing only 50 lines back when you hit PgUp, + not from the start of file each time. + + Todo: update other windows, allow files of + other types to be highlighted, create user interface + to allow region names to be assigned colors, create + more syntax files. Possibly create program to + convert regex NFA to joe DFA syntax file format. + +Wed Mar 24 2004 Joe Allen + * uedit.c: + Fix bug where hitting ^Z on first word of file caused joe to lock up + + +Wed Mar 24 2004 Joe Allen + * lots of file: + First steps at syntax highlighting! + This version has support for C only (and the parser is a big hack), + and only if all lines in the file are less than 1K. + Turn it on with ^T H + Todo: some more speed enhancements, a real parser to handle many + file types, eliminate long line hack, update other windows during + typing, eliminate some cycle saving hacks when highlighting is on. + +Mon Mar 22 2004 Joe Allen + * jmacsrc.in: + Added ^X [ and ^X ]. + +Sat Mar 20 2004 Joe Allen + * menu.c, menu.h, joerc.in, jstarrc.in, jmacsrc.in, rjoerc.in, + jpicorc.in, cmd.c: + File selection menu is now four lines instead of one line. This + needs a little more work: user should be able to set how many + lines it should be in each context. + +Sat Mar 20 2004 Joe Allen + * usearch.c: + After every search we reset window left offset to 0 and then make + the minimal left-right scroll necessary to get entire found text + completely on the screen. + +Sat Mar 20 2004 Joe Allen + * uerror.c: + Slight improvement in compiler error parser. + +Sat Mar 20 2004 Joe Allen + Fix shell window again: instead of running bash if there is no + SHELL variable defined, we just print a message. + Also noticed that session leader stuff in Cygwin is broken: if you + suspend joe the subshell breaks. + +Sat Mar 20 2004 Joe Allen + * tty.c, ushell.c: + Fix shell window for Cygwin: + The problem was that the SHELL environment variable is not defined. + So now, if it's not defined we assume /usr/bin/bash. + Also, we have to use /dev/ptmx for Cygwin. + There is still a problem: have to refresh the screen after shell + starts. + +Fri Mar 19 2004 Joe Allen + * tty.c: + Fix shell window for SunOS 5.8 + +Thu Mar 18 2004 Joe Allen + * usearch.c, regex.c, regex.h: + Allow full escape sequences in replacement strings + fixes bug #828156 + +Thu Mar 18 2004 Joe Allen + * b.c: + Automatically detect MS-DOS files (files with ^M^J terminated lines) + +Thu Mar 18 2004 Joe Allen + * tw.c, uedit.c, tty.c: + Fix ^C and ^D in shell windows (for linux at least) + +Mon Jan 19 2004 Marek 'Marx' Grac + * utag.c: + Correct file position by using tags file generated from ctags 5.5.2 + +Wed Jul 9 2003 John Morrissey + * configure.ac: + look for snprintf() in libdb too (fixes compilation on OSF1) + +Fri Jun 20 2003 Anil Madhavapeddy + * usearch.c: + fix boundary to snprintf() + +Mon Jun 16 2003 Vitezslav Samel + * uedit.c + u_goto_prev()/u_goto_next() fix take two: skip over spaces + (return of joe-2.8 behaviour) + +Sun Jun 1 2003 Vitezslav Samel + * cmd.c, tab.c, uisrch.c: + don't beep when not asked + (suggestion by Marc Joosen ) + +Sun Jun 1 2003 Vitezslav Samel + * configure.ac, ublock.c: + NEW FEATURE: when filtering block put JOE_FILENAME= with the right + filename into the environment (only when putenv() is available); + patch by Marc Joosen + +Sat May 31 2003 Vitezslav Samel + * uedit.c: + make u_goto_prev()/u_goto_next() act like ubackw()/u_word_delete() + when moving cursor, i.e. operate on the same class of characters + +Sat May 31 2003 Vitezslav Samel + * configure.ac: + change version number to include _CVS suffix + +Mon May 5 2003 Vitezslav Samel + *** Release joe-2.9.8 *** + + * NEWS, configure.ac, main.c: + update NEWS; bump up version; update copyright year + +Sat May 3 2003 Vitezslav Samel + * README: + delete untrue statements and mention the new build system; + this file needs some more work + +Sat Mar 22 2003 Vitezslav Samel + * jstarrc.in, rc.c: + fix typos (patch by Jesse McGrew) + +Sat Mar 22 2003 Vitezslav Samel + * cmd.c: + fix memleak in docmd() (patch by Jesse McGrew) + +Sat Mar 22 2003 Vitezslav Samel + * path.c: + use O_EXCL when creating temporary file + +Sun Mar 2 2003 Vitezslav Samel + * bw.c, cmd.c, hash.c, kbd.c, macro.c, main.c, menu.c, path.c, + poshist.c, pw.c, qw.c, rc.c, regex.c, scrn.c, tab.c, termcap.c, tty.c, + tw.c, ublock.c, uedit.c, uerror.c, ufile.c, uisrch.c, umath.c, undo.c, + usearch.c, ushell.c, utag.c, vfile.c, vs.c, w.c: + change 0 to NULL where we're talking about pointers + +Sun Mar 2 2003 Vitezslav Samel + * vs.c, vs.h: + make vsrm() and slen() of type sELEMENT * + +Sat Feb 22 2003 Vitezslav Samel + * configure.ac: + remove AC_FUNC_MALLOC check; this fixes problem with compilation + on alpha; we should check for size == 0 in joe_malloc() + +Wed Feb 19 2003 Vitezslav Samel + * b.c, b.h, cmd.c, cmd.h, help.c, kbd.c, kbd.h, macro.c, macro.h, + main.c, rc.c, rc.h, regex.c, uisrch.c: + change type of variables holding string to unsigned char * + +Wed Feb 19 2003 Vitezslav Samel + * b.c, tw.c: + change type of variables holding time values to time_t + +Sat Feb 15 2003 Vitezslav Samel + * b.c, b.h, bw.c, config.h, macro.c, regex.c, tty.c, ublock.c, uedit.c, + uerror.c, uformat.c, uisrch.c, usearch.c, utag.c, utils.c, utils.h, + vfile.c, vfile.h: + fix segafults in isalpha(): replace MAXINT with NO_MORE_DATA symbol + which has value of EOF (-1); that value is permitted to pass into + isalpha() type functions + +Sun Jan 5 2003 Vitezslav Samel + * configure.ac: + newer versions (>= 2.54) of autoconf need AC_PROG_EGREP to prevent + lockup when running configure; this change require autoconf-2.54 + at least to properly build joe from CVS + +Wed Jan 1 2003 Vitezslav Samel + * rc.c: + eliminate "expr, expr" to make sources more readable; + change "magic number" to the sizeof() + +Wed Jan 1 2003 Vitezslav Samel + * b.c: + pisbow() should match the beginning of file and piseow() should match + the end of file + +Sat Dec 7 2002 Vitezslav Samel + * kbd.c: + don't expect all archs have "char == signed char" by default + +Sat Dec 7 2002 Vitezslav Samel + * blocks.c, vfile.c: + 64bit arch fixes: don't expect pointer fits into int (now we assume + it fits into unsigned long) + +Sat Dec 7 2002 Vitezslav Samel + * types.h, usearch.c: + rename restrict() and restrict member of struct search to make + joe compile under HPUX with HP C compiler + +Mon Aug 5 2002 Vitezslav Samel + *** SECURITY *** + * ufile.c: + drop suid and sgid bits (if set) when creating backup files + +Sat Jul 27 2002 Vitezslav Samel + * jmacsrc.in, jpicorc.in, jstarrc.in: + use .@7 terminfo entry for "End" key + +Wed Jun 26 2002 Vitezslav Samel + * bw.c, rc.c, rc.h, w.c: + rename getcontext() to kmap_getcontext() to prevent conflict with glibc + (from Debian patches) + +Mon Jun 17 2002 Vitezslav Samel + * ublock.c: + insert braces to make if() block evident + +Sun Jun 9 2002 Vitezslav Samel + * b.c, bw.c, cmd.c, hash.c, kbd.c, macro.c, main.c, rc.c, regex.c, + termcap.c, tty.c, ublock.c, umath.c, vfile.c: + change "expr, expr" to "expr; expr" where appropriate to make sources + more readable (should have no impact on code) (take 2) + +Sun Jun 9 2002 Vitezslav Samel + * hash.c, hash.h: + move hnext() definition into hash.c + +Sun Jun 9 2002 Vitezslav Samel + * bw.c, rc.c, termcap.c, ufile.c, usearch.c: + kill some warnings when compiled with -Wall + +Sat Jun 8 2002 Vitezslav Samel + * cmd.c: + unwrap array elements in initialization of cmds[] + +Sat Jun 8 2002 Vitezslav Samel + * va.c, va.h: + change aELEMENT #define to typedef + +Sat Jun 8 2002 Vitezslav Samel + * ufile.c: + change write() to joe_write() to avoid partly copied files + +Sat Jun 8 2002 Vitezslav Samel + * termcap.c: + strcmp() can return values other than -1/0/+1 + +Sat Jun 8 2002 Vitezslav Samel + * b.c, bw.c, macro.c, path.c, pw.c, queue.h, rc.c, regex.c, scrn.c, + scrn.h, tab.c, termcap.c, termidx.c, tty.c, tw.c, ublock.c, uedit.c, + uerror.c, ufile.c, uformat.c, undo.c, usearch.c, ushell.c, vfile.c, + vs.c, w.c: + change "expr, expr" to "expr; expr" where appropriate to make sources + more readable (should have no impact on code) + +Tue Jun 4 2002 Vitezslav Samel + * scrn.c: + don't clear screen when nonzero skiptop is given (part 2) + +Mon Jun 3 2002 Vitezslav Samel + * scrn.c: + don't clear screen when nonzero skiptop is given + +Sat Jun 1 2002 Vitezslav Samel + * configure.ac, utils.c: + kill warnings when compilling with -Wundef + +Tue May 21 2002 Vitezslav Samel + * poshist.c, scrn.c, uformat.c: + include some headers which are needed to compile without warnings about + implicit function declarations + +Sun May 5 2002 Vitezslav Samel + * NEWS: + change wrong version for the last entry + +Sun May 5 2002 Vitezslav Samel + * configure.ac: + solaris compile fix; check for snprintf - if not available, kick out + +Sun Mar 10 2002 Vitezslav Samel + * uformat.c: + remove deadlock when reformating paragraph (badly converted whitel() + to isspace() from removed zstr.c in joe-2.9.2) + +Wed Jan 30 2002 Vitezslav Samel + * b.c: + use GCHAR macro - clean up the source + +Wed Jan 30 2002 Vitezslav Samel + * b.c: + change 0 to NULL when used as pointer + +Wed Jan 30 2002 Vitezslav Samel + * b.c: + change "expr, expr" to "expr; expr" + +Wed Jan 30 2002 Vitezslav Samel + * b.c, b.h, types.h: + cosmetic cleanup: add comments - this patch doesn't touch code + +Fri Jan 25 2002 Vitezslav Samel + * termcap.c: + strcmp() can return values other than -1/0/+1 (fix supplied by + Schermann Gabor ) + +Sat Jan 19 2002 Vitezslav Samel + * ublock.c: + don't use markb and markk after they are freed (fixes segfault) + +Sun Jan 13 2002 Vitezslav Samel + * regex.c: + fix char escaping in \+ case + +Sat Jan 12 2002 Vitezslav Samel + * help.c, types.h: + get back context help (vanished in cleaning patch to help by marx_sk) + (context help is now only used in search prompt window) + +Tue Jan 8 2002 Vitezslav Samel + * vs.c, vs.h: + change sELEMENT #define to typedef + +Mon Jan 7 2002 Vitezslav Samel + * acinclude.m4, configure.ac, tty.c, umath.c, ushell.c, utils.c, + utils.h: + cleanup signals handling (sigaction() / sigvec() / signal()) + +Sun Jan 6 2002 Vitezslav Samel + * cmd.c: + correct "negated macro" for nbuf/pbuf macros + +Fri Dec 14 2001 Vitezslav Samel + *** Release joe-2.9.8-pre1 *** + +Fri Dec 14 2001 Vitezslav Samel + * configure.ac, NEWS: + prepare for -pre release; bump up version to 2.9.8-pre1 + +Fri Dec 14 2001 Vitezslav Samel + * Makefile.am: + add types.h into distribution package + +Wed Dec 12 2001 Vitezslav Samel + * acinclude.m4, configure.ac: + use our own joe_SETPGRP macro (autoconf's is broken for *BSD) + +Tue Dec 11 2001 Vitezslav Samel + * configure.ac, path.c: + include if available to get PATH_MAX + +Sun Dec 09 2001 Vitezslav Samel + * b.c, bw.c, cmd.c, hash.c, help.c, kbd.c, macro.c, menu.c, pw.c, + queue.c, qw.c, rc.c, scrn.c, tab.c, termcap.c, tty.c, tw.c, ufile.c, + uformat.c, uisrch.c, umath.c, undo.c, usearch.c, utils.c, utils.h, + va.c, vfile.c, vs.c, w.c: + prepare memory allocation functions (change (m|re|c)alloc() and free() + into joe_(m|re|c)alloc() and joe_free()) in the utils.c for further + checking + +Sun Dec 09 2001 Vitezslav Samel + * b.c, cmd.c, dir.c, hash.c, hash.h, pw.c, pw.h, rc.c, tab.c, tab.h, + uedit.c, uedit.h, ufile.c, uisrch.c, uisrch.h, umath.c, umath.h, undo.c, + ushell.c, utag.c, w.c: + change function declaration "void a(P * p)" to "void a(P *p)" (when + using GNU indent we must use -Ttype to achieve this behaviour) + +Sat Dec 08 2001 Vitezslav Samel + * bw.c, scrn.c, scrn.h, uedit.c, w.c: + change xlat macro into xlat(int *, char *) function; + change indentation of xlat[ac] tables + +Sat Dec 08 2001 Vitezslav Samel + * joerc.in: + turn off asis (setlocale(LC_CTYPE) takes care of it); + turn off baudrate (leave optimizations of terminal baudrate on the user) + +Sat Dec 08 2001 Vitezslav Samel + * configure.ac, tty.c: + make joe compilable (not only) on cygwin - check if siginterrupt() is + available on this host + +Sat Dec 08 2001 Vitezslav Samel + * ublock.c: + remove feature: exchange points of start and end of the block when + checking validity of block pointers + +Sat Dec 08 2001 Vitezslav Samel + * rc.c: + change indentation of initialization of pdefault, fdefault + and glopts arrays; add comments to [pf]default struct members + +Sat Dec 01 2001 Vitezslav Samel + * configure.ac, path.c, path.h, tty.c, tty.h: + move pwd() into path.c; check in autoconf if we have at least one + of getcwd() / getwd() + +Sat Dec 01 2001 Vitezslav Samel + * b.c, configure.ac, tty.c, tty.h, tw.c, uedit.c, utils.c, utils.h, + vfile.c: + move jread() / jwrite() into utils.c and rename them to joe_read() / + joe_write(); add checking of size_t and ssize_t into configure scripts + +Sat Dec 01 2001 Vitezslav Samel + * joerc.in: + use .@7 terminfo entry for "End" key + +Sat Dec 01 2001 Vitezslav Samel + * joerc.in: + use "Ctrl-K H for help" in -rmsg (F1 doesn't work in all cases) + +Sat Dec 01 2001 Vitezslav Samel + * blocks.c, help.c, macro.c, main.c, path.c, rc.c, regex.c, scrn.c, + termcap.c, tw.c, ublock.c, uedit.c, usearch.c, vs.c, w.c: + change indentation of cases in the switch() statement + +Sat Dec 01 2001 Vitezslav Samel + * b.c, bw.c, main.c, path.c, rc.c, regex.c, scrn.c, termcap.c, + termidx.c, tty.c, tw.c, ublock.c, uedit.c, uerror.c, uformat.c, undo.c, + utag.c, vfile.c, vs.c, w.c: + change indentation of do {} while(); cycles + +Wed Nov 28 2001 Vitezslav Samel + * b.c, b.h, blocks.c, blocks.h, bw.c, bw.h, cmd.c, cmd.h, dir.c, + help.c, help.h, kbd.c, kbd.h, macro.c, macro.h, main.c, main.h, menu.c, + menu.h, path.c, path.h, poshist.c, poshist.h, pw.c, pw.h, queue.h, + qw.c, qw.h, rc.c, rc.h, regex.c, scrn.c, scrn.h, tab.c, tab.h, + termcap.c, tty.h, tw.c, tw.h, types.h, ublock.c, ublock.h, uedit.c, + uerror.c, ufile.c, ufile.h, uformat.c, uformat.h, uisrch.c, uisrch.h, + umath.c, umath.h, undo.c, undo.h, usearch.c, usearch.h, ushell.c, + ushell.h, utag.c, utag.h, utils.c, utils.h, va.c, va.h, vfile.c, + vfile.h, vs.c, vs.h, w.c, w.h: include only headers which are + necessary and since the headers now don't depend on each other, + include them in alphabetic order + +Thu Nov 22 2001 Marek 'Marx' Grac + * *.h, *.c: almost all definitions are in types.h (except those from + vs.h, va.h). + +Thu Nov 22 2001 Marek 'marx' Grac + * uedit.c: correction of last change + +Tue Nov 20 2001 Marek 'marx' Grac + * w.h, w.c, usearch.c, ufile.c, macro.c, uerror.c, umath.c: + MSGBUFSIZE was renamed to JOE_MSGBUFSIZE, because MSGBUFSIZE is + defined on BSD like systems. + +Mon Nov 12 2001 Vitezslav Samel + * Makefile.am, deleted chain.asm, kbdhdl.c, kbdhdl.h, msscrn.c, + mstty.c, termcap, terminfo: delete unused files from distribution + +Mon Nov 12 2001 Peter Breitenlohner + * Makefile.am: make joe installable into another root dir + with "make DESTDIR=/path/ install" + +Sun Nov 11 2001 Vitezslav Samel + * ufile.c: comment out unused functions (nask2()/uask2()) + +Sun Nov 11 2001 Vitezslav Samel + * uedit.c: correct typo: utype(bw, c) --> utypebw(bw,c) + I'm not 100% sure about this, but "works for me here"(tm) + +Sun Nov 11 2001 Vitezslav Samel + * termcap.c, termcap.h: correct prototype to the output routine + the CAP structure (and setcap()/getcap() etc.) + +Sun Nov 11 2001 Vitezslav Samel + * regex.c, regex.h: change regex pointer to be 'unsigned char *regex' + This kills some warnings during build. + +Sun Nov 11 2001 Vitezslav Samel + * cmd.c, menu.c, menu.h, rc.c, tab.c, ufile.c: use mkmenu(W *, ...) + instead of mkmenu(BASE *, ...). + This kills some warnings during build. + +Sun Nov 11 2001 Vitezslav Samel + * tw.c, w.h: non-code clean up + +Sun Nov 11 2001 Vitezslav Samel + * macro.c, qw.c, qw.h, tw.c, uedit.c, uisrch.c, usearch.c, ushell.c: + use mkqw(W *, ...) instead of mkqw(BASE *, ...) (same applies to + mkqwna() and mkqwnsr()). + This kills a lot of warnings during build. + +Sun Nov 11 2001 Vitezslav Samel + * bw.c, cmd.c, macro.c, main.c, rc.c, tab.c, tw.c, ublock.c, uedit.c, + uerror.c, ufile.c, umath.c, undo.c, usearch.c, ushell.c, utag.c, w.c, + w.h: use msgnw[t](W *, char *) instead of msgnw[t](BASE *, char *). + This kills a lot of warnings during build. + +Sun Nov 11 2001 Vitezslav Samel + * b.c, blocks.c, blocks.h, scrn.c, termcap.c, undo.c, vfile.c, vs.c: + use mfwrd() and mbkwd() only as internal functions to mmove(). + This kills some of the remaining warnings during build. + +Wed Nov 07 2001 Vitezslav Samel + *** Release joe-2.9.7 *** + +Wed Nov 07 2001 Vitezslav Samel + * configure.ac: bump up version number + +Wed Nov 07 2001 Vitezslav Samel + * NEWS: update - prepare for release + +Wed Nov 07 2001 Vitezslav Samel + * Makefile.am, deleted conf.c: conf.c not used anymore + +Wed Nov 07 2001 Vitezslav Samel + * Makefile.am: add README.cvs and docs/help-system.html + to EXTRA_DIST variable + +Wed Nov 07 2001 Marek 'Marx' Grac + * docs/help-system.html: updated + +Tue Nov 06 2001 Vitezslav Samel + * new file README.cvs: documentation file on how to access joe sources + via CVS + +Sun Nov 04 2001 Vitezslav Samel + * ufile.c: kill infinite loop when saving unmodified file + (sourceforge.net BUG #478290) + +Sun Nov 04 2001 Vitezslav Samel + * ufile.c: remove "feature" added in 2.9.7-pre1 so the user is always + asked of the filename saved (sourceforge.net BUG #449489) + +Wed Oct 31 2001 Vitezslav Samel + * bw.h, tty.c, configure.ac: make use of pid_t type + +Mon Oct 29 2001 Vitezslav Samel + *** Release joe-2.9.7-pre3 *** + +Mon Oct 29 2001 Vitezslav Samel + * autoconf.ac: bump pre-version number + +Sun Oct 28 2001 Vitezslav Samel + * autoconf.ac: remove optimizing flags from CFLAGS + I'm aware of too much bugreports (in other projects) due to buggy code + generated by over-optimized gcc (default '-O2 -g' is O.K. for most + instalations - advanced user can change it by setting CFLAGS before + running configure, he surely knows, what is he doing ;-)) + +Sun Oct 28 2001 Vitezslav Samel + * Makefile.am, joe.spec: joe.spec deleted - I don't think it belongs + to tar.gz package + (to make it proper .rpm package there's more to be done - this is + work of .rpm packager - he can insert a lot of useful but for joe + unnecesary files - think of icons on the desktop etc.) + +Sun Oct 28 2001 Vitezslav Samel + * autoconf.ac: add AC_CANONICAL_(BUILD|HOST) to make + "automake -a -c" copy necessary config.guess and config.sub files + +Sun Oct 28 2001 Vitezslav Samel + * files generated by automake package: use automake-1.5 to make joe + compile on mips-sgi-irix6.5 with non-GNU make again + +Sun Oct 28 2001 Jeff Downs + * uedit.c: don't change windows when setting mark (using Esc Esc) + in multiwindow mode (SourceForge bug #462875) + +Thu Oct 25 2001 Vitezslav Samel + * kbd.c, scrn.c, termcap.h, tty.c, tty.h, va.c, va.h, w.c: + clean up warnings raised up by strict prototypes + +Mon Oct 22 2001 Vitezslav Samel + * configure.ac, utils.c, utils.h and new file acinclude.m4: + makes the wordwrap work correctly again (SourceForge bugs #418871, + #471964) + +Mon Oct 22 2001 Vitezslav Samel + * all *.c and *.h files, autoconf.ac: use strict prototypes + if applicable (fairly huge change) + +Sat Oct 20 2001 Sebastian Wenzler + * Makefile.am: when symlinking rjoe etc. to joe use links without + absolute path (SourceForge bug #471898) + +Wed Oct 10 2001 Vitezslav Samel + *** Release joe-2.9.7-pre2 *** + +Wed Oct 10 2001 Vitezslav Samel + * config.h, b.c, bw.c, hash.c, help.c, kbd.c, macro.c, main.c, + menu.c, path.c, pw.c, queue.c, qw.c, rc.c, tab.c, tw.c, ufile.c, + uformat.c, uisrch.c, undo.c, usearch.c, ushell.c, vs.c, w.c: + include and only in those files which need them + +Wed Oct 10 2001 Vitezslav Samel + * configure.ac, main.c: autoconf.ac will be the only place where + to change version number; use VERSION #define from automake macro + when printing version + +Wed Oct 10 2001 Vitezslav Samel + * blocks.c, config.h: cleanup blocks.c; remove cases when AUTOINC + is enabled (AUTOINC case is IMHO slower then the other code - and + AUTOINC wasn't enabled by default in config.h); change indenting + of code in the body of switch() to something more readable + +Wed Sep 20 2001 Vitezslav Samel + * help.c: use unsigned int for lengths; remove local copy of filename; + replace "magic numbers" with sizeof(buf); rename members of struct + help (it's always clear where it belongs; change indentation of + switch(); remove goto's (we have continue ;-)) + +Wed Sep 20 2001 Vitezslav Samel + *** SECURITY *** + * configure.ac, path.c: use mkstemp() if available; use if + available; this patch changes name of temporary file + to joe.tmp.XXXXXX (XXXXXX are unique chars) + +Wed Sep 20 2001 Vitezslav Samel + * configure.ac, path.c: use autoconf's way of finding which of + struct direct / struct dirent are available; clean up handling + of MS-DOS drive letters in the paths + +Wed Sep 20 2001 Vitezslav Samel + * tty.c: use full definitions of functions (maskit(), unmaskit(), + pauseit()) - it removes some compile warnings + +Wed Sep 20 2001 Vitezslav Samel + * tty.c: cleanup SA_INTERRUPT/SV_INTERRUPT handling + +Wed Sep 20 2001 Vitezslav Samel + * main.h: add prototype of edupd() + +Wed Sep 20 2001 Vitezslav Samel + * uedit.c: use jread()/jwrite() which retry when interrupted + by a signal + +Wed Sep 20 2001 Vitezslav Samel + * macro.c, uformat.c: include "utils.h" instead of to have + isblank() defined + +Wed Sep 19 2001 Vitezslav Samel + * config.h, configure.ac, tty.c: use autoconf's way of detecting which + termio()/termios() functions are available; use HAVE_GETWD/HAVE_GETCWD + macros instead of TTYPOSIX/TTYSV #defines + +Wed Sep 19 2001 Vitezslav Samel + * configure.ac, tty.c: use autoconf's method of finding which header + to include to have TIOCGWINSZ defined + +Wed Sep 19 2001 Vitezslav Samel + * tty.c: replace ugly "method" of detecting setitimer() with + HAVE_SETITIMER macro from autoconf + +Wed Sep 19 2001 Vitezslav Samel + * config.h, tty.c: remove improperly used HZ #define + +Wed Sep 19 2001 Vitezslav Samel + * tty.h, vfile.c: add prototypes of jread() / jwrite() + +Wed Sep 19 2001 Vitezslav Samel + * b.c, tty.c, umath.c: various systems use different signal handler + prototypes - make use of RETSIGTYPE macro from autoconf + +Wed Sep 19 2001 Vitezslav Samel + * configure.ac, tty.c: various systems use different setpgrp() + prototypes - make use of SETPGRP_VOID macro from autoconf + +Fri Sep 14 2001 Alexandre P. Nunes + * configure, configure.ac, missing, Makefile.am, Makefile.in, + aclocal.m4, autoconf.h.in, config.h, *rc files, b.c, main.c, + path.c, tty.c: use recent automake and autoconf configuration + system (at the moment we're using automake-1.4-p4, autoconf-2.52) + +Thu Jul 20 2001 Marek 'Marx' Grac + *** Release joe-2.9.7-pre1 *** + +Thu Jul 19 2001 Marek 'Marx' Grac + * help.c, help.h, main.c: help system was rebuilt + +Thu Jul 19 2001 Vitezslav Samel + * joe.1, ufile.c: new feature 'backup suffix', when the system + environment SIMPLE_BACKUP_SUFFIX is set then it is used instead of ~. + Inspired by patch program. + +Thu Jul 19 2001 Vitezslav Samel + * lot of files: patch which removes a lot of warnings. + +Wed Jul 04 2001 Marek 'Marx' Grac + + * b.c, main.c, path.c, path.h, rc.c, ufile.c: Function 'ossep' + was completly removed because it was not possible to access + files like test\ in UNIX like systems. + +Wed Jul 04 2001 Marek 'Marx' Grac + + * ufile.c: Several minor changes. + +Wed Jul 04 2001 Marek 'Marx' Grac + + * ufile.c: Problem with freezing when saving unmodified file + is solved. But it is possible that this patch is only partial + +Wed Jul 04 2001 Marek 'Marx' Grac + + * ufile.c: Modified flag is now properly set. It can look + awful but pre-first undo record has modified flag set on. + +Wed Jul 03 2001 Marek 'Marx' Grac + + * joe-2.9.7pre0.tgz: version 2.9.7pre0 was released + +Wed Jul 02 2001 Marek 'Marx' Grac + + * lot of files: I get last version without wordwrap bug (2.9.6pre1) and + applied almost all patches which are mentioned in NEWS file. Problem + with ${sysconfdir}/joerc is probably still actual, because I was not + able to find patch :( diff --git a/joe/usr/share/doc/joe/NEWS.md b/joe/usr/share/doc/joe/NEWS.md new file mode 100644 index 0000000..e6098b6 --- /dev/null +++ b/joe/usr/share/doc/joe/NEWS.md @@ -0,0 +1,1431 @@ +## Release Notes + +[Back to README file](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/README.md) + +[Browse source](https://sourceforge.net/p/joe-editor/mercurial/ci/default/tree) + +[Download source distribution](https://sourceforge.net/projects/joe-editor/files/) + +[Build instructions](https://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/INSTALL.md) + +### JOE.next + +### JOE 4.6 + +* Enhancements + + * 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. + + * Install Gnome .desktop files for JOE. This allows you to use JOE + in GUI "Open With" mouse actions. + + * 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. + +* Bugs fixed + + * 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. + + * -highlighter_context was missing from many file types, which + negated some improvements from the previous version. + + * Fixed signed char overflow with old style mouse events in large + windows + + * 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. + + * Allow ~ expansion but suppress path restart (//) in compiler error + parsing. + + * 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. + + * 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. + + * 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. + + * 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). + +* Windows version + + * Fix file access checks. Inaccessible files due to ACL's weren't + correctly detected. This was a regression in 4.5. + + * Check the correct (Windows) path in the home directory for color + schemes. This was not re-implemented properly in 4.5. + +### JOE 4.5 + +Before: + +![Before](http://joe-editor.sourceforge.net/before.gif) + +After: + +![After](http://joe-editor.sourceforge.net/after.gif) + +* Enhancements + + * New color scheme feature, which can be accessed with ^T S or + by setting the **-colors** option. + + * [24-bit color support](https://gist.github.com/XVilka/8346728) + can be enabled by setting the `COLORTERM` environment variable to + `truecolor` or `24bit`. + + * Several schemes included in-the-box: + + * gruvbox by Pavel Pertsev + + * ir_black by Todd Werth + + * molokai by Tomas Restrepo + + * solarized by Ethan Schoonover + + * wombat by Lars H. Nielsen + + * xoria by Dmitriy Y. Zotikov + + * zenburn by Jani Nurminen + + * The current line can be highlighted by pressing ^T U or by + enabling the **-hiline** option. + + * The gutter containing line numbers has a dynamic size based on the + length of the file, rather than a fixed size of 10. + + * Updated all language syntax files to use comment_todo and + string/comment contexts where appropriate. + + * 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. + + type,type,type X + +* Bugs fixed + + * 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). + + * Fix regex assertions: they were not working because the character + before the search position was not being loaded. + + * For jmacs: ^Q^J now again inserts \n in the string replace prompt. + This broke beginning with JOE 4.0. + + * Don't try to open files for writing to check file access. This + behaves better on unionfs mounts. + + * Fix stray blocks created after find/replace. + +* Windows version + + * Fix inability to set indent step to 1 from menu. + + * Add support for math functions, fix engineering display. + + * Fix backslash escapes in find/replace. + + * Support italicized text. + +### JOE 4.4 + +* Enhancements + +* Bugs fixed + + * Fix segfault due to buffer overrun. This happens if a line + with many backslashes appears in the status line context display. + + * Fix jmacs: ^X ^F and ^X ^B were not working + + * Build fixes for Solaris + + * Improve php highlighter: allow numbers in substitution variable names + + * Unicode tweak: treat private use characters (Co) as printable + + * Dockerfile highlighter: Add Docker new commands from 1.12, + mark bad strings in arrays + + * Fix loading external charmaps + +* Windows version + + * Fix crashing bug when using incremental search + +### JOE for Windows 4.3 + +[Download](http://sourceforge.net/projects/joe-editor/files/JOE%20for%20Windows/4.3/joewin.msi/download) + +* Bugs fixed + + * Fixed a missed merge that prevented some options menu items from + being changed (tab width, tab char, etc). + + * Fixed bugs updating the title bar. + + * Minor memory leak/performance fix in subprocess communication. + + * (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. + +### JOE 4.3 + +* Enhancements + + * Improve memory usage by shrinking buffer header size and + highlighter state size. + + * 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). + + * Add a mode 'title' to enable or disable the status line context + display (previously autoindent mode was overloaded to do this). + + * Disable syntax highlighting and context display in very large + files + + * Force more appropriate modes when we enter hex dump display: + enable overtype, disable autoindent, wordwrap, ansi, picture. + + * 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). + +* Bugs fixed + + * Do not kill region highlighting during incremental search (patch + from Petr Olsak). + + * Negative numbers were not being recognized in blocks + + * 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) + + * Use 'LC_ALL=C sed' to get JOE to compile in OS X. + + * Forward direction delimiter matching where the delimiters do + not begin with special characters (for example in Verilog + "begin" / "end") was not working. + + * Get mouse to work in menus: this broke in 4.1 + + * Character classes with ranges were not working for UTF-8 (as in \\[a-z]) + + * Apply spec highlighting to .spec files + + * 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. + +### JOE 4.2 + +* New or improved syntax files for the following languages: + + * Dockerfile + +* Usability Enhancements + + * The top Google help searches for JOE include: + + * 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. + + * 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 close all files and exit? Now Ctrl-K Q does this. + Previously ^K Q was the same as ^C: abort a single file. + + * Restyle the help screens: + + * 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. + + * Mention Ctrl-Arrow region selection, status + and goto matching delimiter commands on the first screen. + + * 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. + + * Add ^KH for help to search and replace prompts. Many JOE users + do not know about this context sensitive help. + + * 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). + + * Enable -noxon by default (disable ^S/^Q flow control). This + allows us to bind ^Q to quote and ^S / ^R to incremental search. + + * Document ESC X (command prompt) in the help screens. + + * "joe --help" now prints all command line options. + +* Other Enhancements + + * 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. + + * 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 + + * Built-in calculator now prints and accepts separating underscores + for clarity. For example, 4_294_967_296 instead of 4294967296. + + * Enhanced calculator statistics functions: + * __dev__ computes standard deviation with full population + * __samp__ computes standard deviation with sample of population + * Linear regression analysis. Select a region of x + and y values, then: + * __lr__(x) provide estimate of y given x + * __rlr__(y) provide estimate of x given y + * __Lr__, __lR__, __LR__: log, exponential, power regression + + * Calculator region functions now assume the entire buffer if no + region is set. + + * Tab completion now works at the calculator prompt (and in all + prompts which allow numeric input, such as ^KL- go to line). + + * 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: + * \\. no longer matches newline. + * \\\* matches shortest match, not longest match. + + * 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). + +* Bugs fixed + + * Fix use after free bug which shows up as a crash in OpenBSD + + * Fix bug where indent step value was not shown on ^T menu + + * Fix bug where setting margin doesn't work on big-endian systems + + * 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. + + * Standard deviation calculator function was not producing correct + results. + + * Allow koi8r and koi8-r for KOI8-R in joe_getcodeset (which is only + used if there is no setlocale). + + * 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. + + * 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. + +### JOE for Windows 4.1 + +[Download](http://sourceforge.net/projects/joe-editor/files/JOE%20for%20Windows/4.1/joewin.msi/download) + +* Includes all changes from mainline 4.1 + +* Now includes html documentation, shortcut to documentation in context menu + +* Added pop-up terminal support + * Brought in Ryan Prichard's winpty for a better pop-up terminal experience + (now with tab-completion, colors, doskey, and support for Powershell) + + * Can easily be configured to launch Cygwin shells + +* Fixes to keep the Window title in sync with the current file. + +* Better tab-completion behavior for Windows-style paths + +* Code cleanup + +* Added translations to installer + +* Improve color scheme support + +* Distribute standalone executables in addition to regular MSI installer + +### JOE 4.1 + +* New or improved syntax files for the following languages: + * Groovy, R, Clojure, Rust, Coffeescript, Java, Scala, Swift, D, + AVR, Ruby, Perl + +* New translations + * Chinese (zh_TW) + +* UTF-16 support + + * 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. + + * Within JOE, native byte order is called UTF-16 and reversed order + is called UTF-16R. + + * 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. + +* New regular expression engine + * Old one was a recursive matcher, new one is compiled Thompson NFA matcher + + * JOE now supports full regular expressions (but as before special characters are + escaped by default), so: + + * It now supports alternative: X\|Y + * It now supports grouping and submatch addressing with parenthesis: a\\(inside\\)b + * You can specify an explicit number of matches: X\\{3} for XXX + * Or a range of matches: X\\{3,5} for XXX, XXXX or XXXXX + * \\! is a JOE extension: it's like \\., but matches whole balanced expressions + + * JOE also supports the standard regular expression syntax where + these characters are not escaped. + + * Use the 'x' search & replace option for this, or use the + '-regex' global option to make it the default. + + * 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) + + * Submatches within regular expressions can now be any size (up to + the size of the disk!). Before this, they were limited to 16K. + + * Case conversion allowed in replacement string, as in sed: + everything between \\U and \\E converted to uppercase. + +* Unicode improvements + + * Character class database has been updated to the latest version + (Unicode 8.0.0) + + * Switched to new character class data structure for faster Unicode + (uses radix search instead of binary search). + + * Key sequences in the joerc file are now UTF-8 coded Unicode. + + * Also you can specify Unicode in hexadecimal like this: U+F123 + + * 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. + + * Jump to matching delimiter (Ctrl-G) now supports Unicode for word + delimiters (for example, within XML tags). + + * Identifiers within JOE now allow Unicode. For example, variables + at the math prompt and JOE macros can use any letter. + + * JOE now displays Unicode combining characters properly + + * Syntax files are now UTF-8 coded and support Unicode syntax. + + * 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: + + * Use \x{f123} to specify a particular character. + + * 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 \p{Cherokee} to specify any character from a named Unicode block. + + * \d for a digit, \D for not a digit + + * \w for a word character, \W for not a word character + + * \s for a space character, \S for not a space character + + * \i for identifier start character, \I for not identifier start character + + * \c for identifier continuation character, \C for not identifier continuation character + +* Code clean up + + * 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. + + * Give up trying force all strings to "unsigned char *" so that the + code is less weird. + + * 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. + + * 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. + +* Bugs fixed + + * Fix bug where \\ was not parsed correctly within syntax file + character lists unless it was at the end of the string. + + * Fix bug where position cursor history operations would mix + pointers between different buffers if user had switched buffers in + a window. + + * Fix bug where lockup would happen if you try querysave when the + only buffer left is the startup log. + + * Default locale + * If no locale set, default to C / POSIX, not ISO-8859-1 + * If locale is C / POSIX, set language to en_US (for aspell). + + * 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. + + * 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. + + * 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. + + * Fixed issue where syntax could not be set on command line with + -syntax. + +* Minor enhancements + * 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. + + * Tab completion now handles directory and file names with spaces + in them. + + * Backspace now jumps back to parent menu in ^T submenus (and + remembers the cursor position within the parent) + + * Macros after :def are now allowed to cross lines in the joerc file + + * Make ^K ^SPACE same as ^K SPACE + + * Quoted insert of TAB always inserts a TAB character, even when + smart indent is enabled. + + * Add options to control sending of bracketed paste mode command + to terminal emulator (brpaste) and detection of paste by timing + (pastehack). + + * Modified ftyperc file syntax to reduce redundancy + + * 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. + + * 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. + +* jmacs fixes: + * ^X b / ^X ^B were reversed + + * ^X 0 printed an exit message for no reason + + * ^X 0 now can pop shell windows + + * M-^ deleted indentation but did not join with previous line + + * Ignore case for letter commands: ^X i and ^X I are the same + + * Fix bug where regular expressions were not working in incremental + search when wrap is enabled (which is the case in jmacs). + +* ESC g (grep/find) and ESC c (compile) improvements + * Tab completion now works for the command and its arguments + + * Change to the current directory before running the command + + * Show the current directory in the compile window + + * Show the exit status in the compile window + + * Provide more consistent window setup during compile + + * Parse "Entering directory `/home/xxxxxx'" messages to determine + the directory containing the file with an error message. + +### JOE 3.8 Native Windows Version + +[Download](http://sourceforge.net/projects/joe-editor/files/JOE%20for%20Windows/3.8/joewin.msi/download) + +* Thanks to John J. Jordan we now have a native Windows version of JOE + +### JOE 4.0 + +[Download](http://sourceforge.net/projects/joe-editor/files/JOE%20sources/joe-4.0/joe-4.0.tar.gz/download) + +* 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](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/docs/man.md#popup) 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 highlighted 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 + environment variable. + +* Remove ` as quote character from incremental search. + +* Clean up documentation, convert much of it to Markdown. + +### JOE 3.8 + +[Download](http://sourceforge.net/projects/joe-editor/files/JOE%20sources/joe-3.8/joe-3.8.tar.gz/download) + +- 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 + Koblinger). + +- Support italic text (on some terminal emulators) with "\l" (patch by + Egmont Koblinger) + +- 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 + * Javascript: contributed by Rebecca Turner, 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 + + (from github.com/cmur2/joe-syntax) + +- 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 + better display + +- 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 strangely 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 + from tty.c + +- update status line immediately on resize. + +- va_copy fix. + +- don't smartbackspace when smartbacks is off. + +### JOE 3.7 + +- backspace/DEL means 'n' in replace prompt for better Emacs + compatibility + +- Menus are now made up of macros instead of options. + + New commands: + + * 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 replace 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 + +### JOE 3.6 + +- 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 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 indentation is space. + +- Fix low limit of lmargin + +- Allow inserting file in rectangle mode even if selected rectangle is + zero-width. + +- .js is Javascript + +- 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) + +### JOE 3.5 + +- Query windows now expand to multiple lines if necessary + +- Single key queries are now internationalized (set local versions in the + .po file) + +- Spell check language can be set in the editor + +- New syntax files: m4, joerc + +- New debug window for highlight file syntax errors. + +- Macros can be typed at the ESC X prompt (before it used to accept only + commands). + +- Built-in joerc file allows JOE to run even if /etc/joe directory is + missing. + +- 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. + +- Option which allows you set how many undo records to keep. + +- You can give a path to the tags file in the TAGS environment variable. + +### JOE 3.4 + +- 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 + ra + bar + 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 + re + bar + + 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 + highlighter. + +- 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 + better. + +- 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 .58 + JED .57 + NEDIT 3.26 + VIM 7.33 + EMACS 11.98 + +- 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. + +### JOE 3.3 + +- The default background color can now be set. + +- JOE now supports 256 color xterm. + +- The mouse can now resize windows and select menu entries. + +- During selection with the mouse, the window will autoscroll when you go + past the edge. + +- An xterm-patch is included which makes "-mouse" mode work better. (With + the patch, also set "-joexterm"). + +- Syntax files are provided: ADA, AWK, COBOL, SED, Postscript, and SQL + +- Improved jpico: search now looks more like real pico + +- Grep find: use ESC g to grep. Then use ESC space to jump to + to indicated file/line. + +- Cygwin setup.exe support + +### JOE 3.2 + +- 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. + +- 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 :-) + +### JOE 3.1 + +- 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 + definition files. + +- 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: uppercase 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 + +- Aspell support. + +### JOE 3.0 (23 APR 2004) + +- UTF-8 +- Syntax highlighting +- Fixed ^C and ^D in shell windows +- Auto detect CR-LF (MS-DOS) files +- Fixed (or improved, anyway) shell windows for Cygwin +- During search & replace, the scroll found text on to screen +- File selection window is now 4 lines instead of 1 +- David Phillips "smart home" key. +- Enhanced ^K , and ^K . +- Enhanced overtype mode +- Added picture drawing mode (can hit right arrow at ends of lines) +- Auto detect preferred indentation character TAB or SPACE + +### Overview of changes in JOE 2.9.8 (5 May 2003) + +- fixed signal handling +- return of the context help +- fixed segfault when moving rectangular block +- code clean up +- killed deadlock when reformatting paragraph +- fixed skiptop handling +- SECURITY: drop suid and sgid bits when creating backup files +- fixed segfaults in isalpha()-like functions + +### Overview of changes in JOE 2.9.8-pre1 (14 Dec 2001) + +- BUGFIX: don't exchange start and end point of the block in some cases +- defaulting to turn off -asis (locales take care of this; if JOE doesn't + print characters with 8th bit set properly, check if you have properly + installed and set locales or simply turn on -asis option in joerc) +- fix to make JOE compilable on *BSD +- fix to make JOE compilable on systems without siginterrupt() +- added "support" for End key +- code cleanup: warnings removal (some still remaining, working on it) + +### Overview of changes in JOE 2.9.7 (7 Nov 2001) + +- BUGFIX: always save (even not-modified) file +- BUGFIX: solve problem with freezing after saving unmodified file +- small documentation update + +### Overview of Changes in JOE 2.9.7-pre3 (29 Oct 2001) + +- BUGFIX: wordwrap bug fixed (again and I'm sure forever) +- BUGFIX: don't change window when setting mark in multiwindow mode +- BUGFIX: use automake-1.5 to make JOE compile on irix-6.5 with non-GNU make +- continuing code clean up: this code adds strict prototypes which raises + a lot of warnings (they seem harmless) - we're working on their removal + +### Overview of Changes in JOE 2.9.7-pre2 (10 Oct 2001) + +- use automake and autoconf for configuration system (for now versions + automake-1.4-p4 and autoconf-2.52) +- a lot of warnings of compiler were removed +- SECURITY:: use mkstemp() for temporary files if available +- code clean up + +### Overview of Changes in JOE 2.9.7pre1 (19 Jul 2001) + +- help system was slightly modified +- a lot of warnings of compiler were removed +- BUGFIX:: problem with freezing when save was solved (at least partially) +- BUGFIX:: undo after save of file (again same patch) +- FEATURE:: suffix of backup copy from SIMPLE_BACKUP_SUFFIX environment + variable + +### Overview of Changes in JOE 2.9.7pre0 (02 Jul 2001) + +- major BUGFIX:: wordwrap problem +- BUGFIX:: indentation +??* JOE can be compiled on Windows platform again +??* BUGFIX:: problem with ${sysconfdir}/joerc was solved + +### Overview of Changes in JOE 2.9.6 (13 Apr 2001) + +- BUGFIX:: resizing window +- JOE can be compiled on Windows platform again +* BUGFIX:: problem with ${sysconfdir}/joerc was solved +- BUGFIX:: security patch for sprintf +- BUGFIX:: partially solved problem on Solaris with SegFault +- BUGFIX:: patch joe-2.8-security (slightly changed) +- BUGFIX:: patch joe-2.8-port +- BUGFIX:: patch joe-2.8-mips +- BUGFIX:: patch joe-2.8-vsmk +- BUGFIX:: patch joe2.8-time +- *rc files where moved from $(prefix)/lib to $(prefix)/etc or $sysconfdir +- Makefile.in (and Makefile) was rewritten + - special prefix for package (more in Makefile.in) + - use of system independent 'mkinstalldirs' + - rc files are not rewritten +- TEST FEATURE:: added autoconf support + program can be installed by ./configure; make; make install +- BUGFIX (v2.9.4):: go to previous word problem solved +- JOE can be compiled without locale.h again +- BUGFIX:: patch joe2.8-axphack.patch +- BUGFIX:: patch joe2.8-resize2.patch +- BUGFIX:: fixed problem with :include in rc files +- BUGFIX (v2.9.5):: portability problem with is_blank on nonGNU systems + +### Overview of Changes in JOE 2.9.5 (28 Mar 2001) + +- new BUG:: can't be compiled on non-GNU systems (is_blank()) fixed in v2.9.6 +- BUGFIX:: Fixed problem with resizing. +- SECURITY:: .[joe|rjoe|jpico|..]rc in actual directory is ignored + because in this file can be defined which program run. + +### Overview of Changes in JOE 2.9.4 (27 Mar 2001) + +- new BUG:: go to previous word; goes one character before this word + fixed in v2.9.6 +- FEATURE:: locale (LC_CTYPE) is accepted when skipping/deleting/... words + +### Overview of Changes in JOE 2.9 (22 Mar 2001) + +- version 2.8 with patches from RedHat/Suse + +### Overview of Changes in JOE 2.8 + +- Fixed problem with TERMPATH string +- Added stupid two-letter names to termcap file +- Improved jmacs help and command set +- Improved README file + +### Overview of Changes in JOE 2.7 + +- putenv() was not portable +- utime was not portable +- special utime handling for NeXT +- forgot to \\\\ the \s in the default termcap entry +- changed some key defaults in jpicorc +- add IXOFF in termio/termios list +- left margin limit was incorrect +- allow '.' and '/' in file names for error parsing +- Needed ptem.h and stream.h for SCO_UNIX window size structure (?) +- wordwrap no longer propogates indent prefix +- paragraph format was broken for tab indented paragraphs +- pipe through shell now goes through stderr too +- added '-crlf' option +- looks for termcap file in JOERC/termcap + +### Overview of Changes in JOE 2.6 + +- Fixed stupid bug in termcap.c which prevented terminfo from working +- ESC h was missing from jpicorc +- Changes suggested by Dan Nelson: + - backup files now attempt to have same permissions and times as original + - Stat command now ands chars with 255 (don't know why this worked on my system + without this...) + - Maybe change shell invocation name- have to check this more + +### Overview of Changes in JOE 2.5 + +- No longer use ^[ O, ^[ A, ^[ B, ^[ C, or ^[ D for anything because they + interfere with arrow keys. +- Couldn't create new files because of bug in readonly setting +- fwrdc/bkwdc were crashing the editor except when called from wordstar +- 'tr' command was not called in a portable way in jmacs +- 'tr' was causing problems with the spell-check macros as well +- filter region was not working: had to add 'query' in ^[ | macro +- Changed incremental search so that whatever key the command is bound to + can be used to repeat the search (used to only be able to use ^S) + +### Overview of Changes in JOE 2.4 + +- Closing message was incorrect when exit macros (macros where the last + command is abortbuf) were used. +- SuperPico rc file added +- Write block now writes the entire file if no block is set +- Added pico kill function for pico emulation + (tried to do this with 'psh,markk,blkdel' where blkdel deletes lines if + no block is set, but it didn't group the deletes right in the yank + buffer) +- Filter block would leave the marks set +- Fixed ^@ in JOE mode +- Fixed help screen glitches in wordstar mode +- If JOE can't make a backup file it now prompts for you to save anyway +- Eliminated IDLEOUT compile option. Now is the user gives - on the + command line, JOE uses /dev/tty. +- Added %o %O %a %A %X and %R status line messages +- Starts out in read only mode if loaded file can not be written to +- If JOE can't find the termcap/terminfo entry, it instead uses the default +- termcap routines are now included even if you use terminfo. If your + terminal can't be found in the terminfo database, it will look in + the termcap database too. +- The JOETERM environment variable can be used to bypass the TERM + environment variable setting. + +### Overview of Changes in JOE 2.3 + +- Search & Replace bugs fixed + - replace would mess up the end mark of a marked block + - a search would trash ^KB if only ^KB was set + - regex problem with \\* +- Was using TCSANOW in posix driver. Should have been using TCSADRAIN +- Format paragraph now correctly formats quoted news articles +- Attempted fix for SCO +- Fix for coherent +- Fix for old IRIX/SGI +- Fixed bug where if you used search & replace in a macro, and exiting the + search & replace loop with right arrow key, then when you played the macro + you got an extra ^[ in the input queue +- Added file hooks +- Added function to insert current keyboard macro into current file +- Added range checks to numeric option settings +- Restricted joerc file added +- Added ':def' feature for rc files + +### Overview of Changes in JOE 2.2 + +- First attempt at MS-DOS version of JOE + - Direct screen write + - Modifications for dos file/drive names + - Use TEMP variable to figure out where to store temporary file + - Smaller virtual memory page size + - Backslashes in file name problem + - CR before an LF looks like an LF +- Backward search ignore-case was not working +- Scalable window height was not working fully +- Spaces in file-names gave a problem with backup file creation +- TILDE option is not available in all versions of BSD +- Allow : as separate for termcap filename list +- Next error / Prev. error was not tracking right +- tabs not displayed right in nxterr/prverr messages +- Block moves where the cursor was to the right of the block was broken + +### Overview of Changes in JOE 2.1 + +- rc file wasn't giving correct error messages for missing options +- the '-nobackups' options was mispelled: '- nobackups' +- editor was crashing because of problem in undo +- update bypass in utype has a problem when wordwrapping and scrolling diff --git a/joe/usr/share/doc/joe/README.md b/joe/usr/share/doc/joe/README.md new file mode 100644 index 0000000..feceec9 --- /dev/null +++ b/joe/usr/share/doc/joe/README.md @@ -0,0 +1,243 @@ +# Joe's Own Editor + +[User manual](https://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/docs/man.md) + +[Release Notes](https://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/NEWS.md) + +[List of Commands](https://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/docs/man.md#list) + +[List of Options](https://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/docs/man.md#options) + +[JOE for Windows tips](https://sourceforge.net/p/joe-editor/mercurial/ci/windows/tree/docs/windows.md) + +[Hacking](https://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/docs/hacking.md) + +[Project page](http://www.sourceforge.net/projects/joe-editor) + +[Download source](https://sourceforge.net/projects/joe-editor/files/) + +[Build instructions](https://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/INSTALL.md) + +[History](https://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/docs/history.md) + +

+ +

JOE is a full featured terminal-based screen editor which is distributed +under the GNU General Public License (GPL). JOE has been around since 1988 +and comes standard with many Linux distributions.

+ +

JOE is being maintained by its original author Joseph Allen, plus all of +the people who send bug reports, feature suggestions and patches to the +project web site. JOE is hosted by SourceForge.net and its source code is +controlled under Mercurial.

+ +

JOE is a blending of MicroPro's venerable microcomputer word processor +WordStar and Richard Stallman's famous LISP based text editor GNU-EMACS (but +it does not use code from either program): most of the basic editing keys +are the same as in WordStar as is the overall feel of the editor. JOE also +has some of the key bindings and many of the powerful features of EMACS.

+ +

JOE is written in C and its only dependency is libc. This makes JOE very +easy to build (just "configure" and "make install"), making it feasible to +include on small systems and recovery disks. The compiled binary is about +300K in x86. Note that JOE can use either the termcap or terminfo terminal +capabilities databases (or a built-in termcap entry for ANSI terminals). The +choice is controlled by a "configure" option. If terminfo is used, a +library is required to access the database (on some systems this library is +ncurses, but JOE does not use curses to control the terminal- it has its own +code for this).

+ +

Much of the look and feel of JOE is determined by its simple +configuration file "joerc". Several variants of the editor are installed by +default in addition to "joe": "jmacs" (emulate GNU-EMACS), "jstar" emulate +WordStar, "jpico" emulate the Pine mailer editor PICO and "rjoe"- a +restricted version of JOE which allows the used to only edit the file given +on the command line. JOE is linked to several names. The name which is +used to invoke the editor with "rc" tacked on the end gives the name of +configuration file to use. It is thus easy for you to make your own variant +if you want. Also you can customize the editor by copying the system +"joerc" file to your home directory.

+ +

Here is a basic screen shot of JOE running in a Cygwin console:

+![screen capture](http://joe-editor.sourceforge.net/capture.gif) + +

Here is a screen shot showing several windows- the first has some example +double-wide characters, the second is the same buffer as the first, but in +hex-dump view mode, the third is a shell window and the fourth shows a +selected rectangular block of numbers and their sum:

+ +![elaborate screen capture](http://joe-editor.sourceforge.net/elaborate.gif) + +### JOE has the following features: + +* Multi-file search and replace- file list is either given on command line or by a UNIX command (grep/find) run from within JOE. + +* Mouse support, including wheel (works best when using xterm). The mouse can resize windows, scroll windows, select and paste text, and select menu entries. + +* Context display on status line: allows you to see name of function cursor is in. + +* UTF-8 support, optional auto-detect of UTF-8 files. + +* Syntax highlighting for more than 40 languages. + +* Hexadecimal edit mode. Use JOE as a disk editor: joe -overwrite -hex /dev/hda1,0,512 (edit first sector of /dev/hda1). + +* Non-destructive editing of binary files even when handling MS-DOS or UNIX line endings. + +* Swap file allows editing files larger than memory. + +* Context sensitive on-line help. + +* Bash-like TAB completion and history for all prompts, or jump into the +completion menu and use it to traverse the file system. + +* Complete word in edit buffer by hitting ESC Enter (uses other words in +buffer for dictionary). + +* EMACS-compatible file locks and file modification checking. + +* Shell windows. + +* Multiple-windows onto same or different files. + +* Compile and step through errors or Grep and step through finds. + +* Goto matching character delimiter "() [] {} <>" which skips comments and +quoted matter. + +* Goto matching word delimiter, including XML tags and C preprocessor +directives. + +* Ctrl-arrow key block selection. + +* Search and replace system, including regular expression and optional +incremental search. Regular expression key for matching balanced C +expressions. + +* Tags file search (tab completion at tags search prompt uses tags file as +database). + +* Spell check commands which invoke aspell or ispell. Language for aspell +can be passed through editor. + +* Paragraph format which preserves news/mail quoting indentation +characters. + +* Unlimited Undo and Redo. + +* Yank buffer allows stepping through and insertion of previously deleted +text. + +* State file restores history buffers, yank buffer and last file cursor +positions. + +* Cursor position history allows you to step through previously visited areas +of a file. + +* Multiple interactive keyboard macros. Macros can be assigned to key +sequences in joerc file. + +* Block move/copy/delete/filter. + +* Rectangle (columnar) block mode- search and replace can be narrowed to +the rectangular block. Rectangular blocks can be filtered through UNIX +commands. + +* Overtype/Insert modes. + +* Indent/Unindent (shift block left or right). + +* Auto-indent mode. + +* Picture mode for ASCII graphics. + +* Line number mode displays line number of each line. + +* Powerful scientific calculator with block statistics functions (sum/standard-deviation/count highlighted block of numbers). + +* Termcap/Terminfo support allows JOE to use any terminal or terminal emulator. + +* Can accept data from a pipe, for example: ls | joe + +

JOE does not have these features (yet):

+
    + +
  • Vertical windows
  • + +
  • Folding
  • + +
  • Right to left editing for Hebrew and Arabic
  • + +
  • Direct editing of 16-bit character sets such as UCS-16 and BIG5
  • + +
  • All encompassing macro language like elisp in GNU-EMACS
  • + +
  • Background spell checking, like Microsoft WORD
  • + +
  • Highlight all matching words
  • + +
  • Automatic unzip/untar
  • + +
  • Built-in FTP
  • + +
  • X-Window version (use inside a terminal emulator)
  • + +
  • Interface to debugger
  • + +
+ +

Here are some other editors to consider:

+
http://www.gnu.org/software/emacs +Richard Stallman's powerful LISP-based editor. + +http://www.jedsoft.org/jed John E. +Davis' version of EMACS using the S-Lang language. + +http://www.jasspa.com Micro Emacs + +http://www.vile.cx Paul Fox's vi clone +(built on top of Micro Emacs). Now maintained by Tom Dickey and others. + +http://www.nano-editor.org An open +source PICO clone. + +http://www.washington.edu.pine/faq/whatis.html +PICO: A simple editor built on Micro Emacs. + +http://www.vim.org Bram Moolenaar's vi +clone + + +http://elvis.the-little-red-haired-girl.org Elvis: A +small vi clone + +http://www.jedit.org Powerful editor +written in Java + +http://www.nedit.org X-Windowing System +editor + +http://www.ibiblio.org/mc Midnight +Commander file manager with built-in text editor with highlighting. Can +browse ZIP and TAR files. +
+ +http://www.cs.yorku.ca/~oz/wily A +UNIX/X clone of Rob Pike's Plan9 editor ACME. Originally written by Gary +Capell, but now maintained by Ozan Yigit. This is an interesting minimalist +IDE. + +http://www.eclipse.org/downloads +Huge IDE written in Java. Performs same function as Wily, but is literally +1300 times larger. + +ftp://netlib.bell-labs.com/netlib/research/sam.shar.gz +UNIX/X port of Rob Pike's Plan9 editor SAM. This interesting editor +supports multi-file regular expression search & replace with unlimited +undo. + +http://sed.sourceforge.net +UNIX Stream EDitor. If you're on UNIX, you already have this editor, but follow +this link to see the amazing things that can be done with it. diff --git a/joe/usr/share/doc/joe/README.old b/joe/usr/share/doc/joe/README.old new file mode 100644 index 0000000..114a374 --- /dev/null +++ b/joe/usr/share/doc/joe/README.old @@ -0,0 +1,176 @@ + + + Joe's Own Editor 3.6 + + A Free ASCII-Text Screen Editor for UNIX + by Joseph Allen (<= 2.8) + Marek 'Marx' Grac (=> 2.9) + by Joseph Allen again (=>3.0) + +Get it from: + http://sourceforge.net/projects/joe-editor + +If you have questions, problems or suggestions, + Use sourceforge: mailing list, bug tracker, discussion groups. + + JOE is the professional freeware ASCII text screen editor for UNIX. +It makes full use of the power and versatility of UNIX, but lacks the steep +learning curve and basic nonsense you have to deal with in every other UNIX +editor. JOE has the feel of most IBM PC text editors: The key-sequences are +reminiscent of WordStar and Turbo-C. JOE is much more powerful than those +editors, however. JOE has all of the features a UNIX user should expect: +full use of termcap/terminfo, excellent screen update optimizations (JOE is +fully usable at 2400 baud), simple installation, and all of the +UNIX-integration features of VI. + + JOE's initialization file determines much of JOE's personality and +the name of the initialization file is simply the name of the editor +executable followed by "rc". JOE comes with four "rc" files in addition to +the basic "joerc", which allow it to emulate these editors: + + JPICO - An enhanced version of the Pine mailer system's PICO + editor. + + JSTAR - A complete imitation of WordStar including many "JOE" + extensions. + + RJOE - A restricted version of JOE which allowed you to edit + only the files specified on the command line. + + JMACS - A GNU-EMACS imitation which is about one order of + magnitude smaller than real GNU-EMACS. + +Features: + + JOE has a well thought-out user-interface with great attention to +detail. The Page Up and Page Down functions do not move the cursor relative +to the edges of the screen. Left and Right arrow keys work at the beginning +and ends of lines. The cursor can move past the ends of lines without +jumping, but also without inserting or deleting extra spaces at the ends of +lines. Control characters and characters above 127 can be displayed and +entered- even ^Q and ^S. The cursor's row and column number can be +displayed in the status line. + + The key layout is made to reduce terminal incompatibility nonsense. +^Q and ^S are not used and both ^H and DEL are mapped to backspace. Case +does not matter in key sequences- ^K E, ^K e, and ^K ^E are each mapped to +the same function. The arrow keys and PageUp, PageDown, Home, End, Insert +and Delete keypad keys are read from the termcap entry and are assigned to +the proper functions. A simple initialization file, similar to Semware's +Q-EDIT, allows key-bindings, simple macros and help windows to be defined. + + JOE has full termcap/terminfo support and will work on any terminal. +JOE has the best screen update optimization algorithm available. It uses +VT100-style scrolling regions the way they are supposed to be used (I.E., +without building insert and delete line functions out of them) and has a +powerful line shifting (insert/delete character) algorithm which works even +if text goes past the ends of lines. JOE has deferred screen update to +handle typeahead and uses the baud rate reported by 'stty' to ensure that +deferral is not bypassed by tty buffering. + + JOE has multiple windows and lacks the confusing notion of a named +buffers. You just have files and windows. When there are more windows than +can fit on the screen, the Goto-Next-Window function scrolls through them. +The same file can have multiple windows opened on it. + + JOE has VI-style unix integration. You can filter a highlighted +block through a UNIX command. Also, each place in joe which accepts a file +name (including the command line) will also accept: + + !command to pipe into or out of a command + >>filename to append to a file + filename,start,size to edit a portion of a file/device + - to use stdin or stdout + + File names on the command line may be preceded by +nnn to start +editing at a specified line. + + JOE has shell windows. You can run a shell in a window and any +output from commands run in the shell gets stored in a buffer. + + JOE has an orthogonal event-driven design. Each prompt is actually +a normal edit buffer containing a history of all of the responses entered +for that prompt. You can use all of the normal edit commands to create file +names and search strings. You can use the up arrow key (or search backwards +and any other appropriate edit command) to go back through the history of +previous responses. Prompts are reentrant- meaning that edit commands which +require prompts can still be used inside of prompts. + + JOE has TAB-completion and file selection menus. If you hit tab in +a file name prompt, the name is either completed or a menu of possible +matches appears. + + JOE stores edit files in a doubly linked list of gap buffers which +can spill into a temporary file. You can edit files of any size up to the +amount of free disk space and there are no line-length restrictions. Since +the buffering system is block-based, JOE will incur only a minimum of +swapping on heavily loaded systems. + + When you ask for help, one of six small help reference cards appears +on the screen and remains while you continue to use the editor. Here is the +first help card: + +CURSOR GO TO BLOCK DELETE MISC EXIT +^B left ^F right ^U prev. screen ^KB begin ^D char. ^KJ reformat ^KX save +^P up ^N down ^V next screen ^KK end ^Y line ^T options ^C abort +^Z previous word ^A beg. of line ^KM move ^W >word ^@ insert ^KZ shell +^X next word ^E end of line ^KC copy ^O word< ^R retype FILE +SEARCH ^KU top of file ^KW file ^J >line SPELL ^KE new +^KF find text ^KV end of file ^KY delete ^_ undo ^[N word ^KR insert +^L find next ^KL to line No. ^K/ filter ^^ redo ^[L file ^KD save + + JOE has a powerful set of editing commands suitable for editing both +text files and programs: + + - UTF-8 support + + - Syntax highlighting + + - search and replace system, including powerful regular + expressions (including matching of balanced C expressions). + + - tags file search + + - paragraph format + + - undo and redo + + - position history allows you to get back to previous + editing contexts and allows you to quickly flip between + editing contexts + + - multiple keyboard macros + + - block move/copy/delete/filter + + - rectangle (columnar) mode + + - overtype/insert modes + + - indent/unindent + + - goto matching ( [ { + + - auto-indent mode + + Plus many options can be set: + + - can have EMACS-style cursor re-centering on scrolls + + - characters between 128-255 can be shown as-is for + non-English character sets + + - Final newline can be forced on end of file + + - Can start with a help screen on + + - Left/Right margin settings + + - Tab width + + - Indentation step and fill character + +/* jhallen@world.std.com */ /* Joseph H. Allen */ +int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0) ++r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2 +]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);} diff --git a/joe/usr/share/doc/joe/hacking.md b/joe/usr/share/doc/joe/hacking.md new file mode 100644 index 0000000..742d77e --- /dev/null +++ b/joe/usr/share/doc/joe/hacking.md @@ -0,0 +1,1454 @@ +# JOE: Hacker's Guide + +[TOC] + +## Character classes + +The data structures for representing character classes such as \[a-z0-9\] or +\[\\w\\d\] are in [cclass.c](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/cclass.c) and [cclass.h](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/cclass.h). These are used by the syntax +highligher, the regular expression matcher, the keyboard mapping table and +for implementing JOE's ctype routines (such as joe_iswupper). + +Structures are provided for sets (is a character in a particular set?), mappings +to integers (which integer is associated with this character?) and mappings to +pointers (which pointer is associated with this character?). + +Two different sets of algorithms are provided: one set based on intervals +and another based on radix trees. + +### Interval arrays + +An interval is a simple range of character codes in the following structure: + + struct interval { + int first, last; + }; + +If A-Z is be represented, then first is 65 and last is 90. If just the +number zero is to be represented, then first and last are both 48. + +An array of these represents a set. If the array is sorted, you can use a +binary search to determine if a character belongs to a set. Two functions +supporting this are provided: + + /* Sort an struct interval array */ + void interval_sort(struct interval *array, ptrdiff_t size); + + /* Test if character ch is in a sorted interval array using binary search. + Returns -1 if not found, or index to matching struct interval */ + ptrdiff_t interval_test(struct interval *array, ptrdiff_t size, int ch); + +These functions are no longer used in the editor since they have been +superseded by radix trees. However, facts about Unicode use arrays of +intervals, see [unicat.c](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/unicat.c). Unicat.c is generated by [util/uniproc.c](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/util/uniproc.c) from the +raw data provided on the [unicode.org](ftp://ftp.unicode.org/Public/UNIDATA/) website. Arrays of intervals provide +the source data for the radix trees. The struct Cclass includes an +interval array as the source data before it is optimized into a struct Rset. + +### Interval lists + +The next data structure in cclass.c is a linked list of intervals: + + struct interval_list { + struct interval_list *next; /* Next item in list */ + struct interval interval; /* Range of characters */ + void *map; + }; + +This provides a way to create a mapping between characters and pointers +(void *map). For example, a key sequence mapping table (a KMAP) can be +implemented this way. Map could point to either a MACRO bound to a key, or +to a KMAP for a sub-map (for example a top-level map would have ^K bound to +a submap which has H bound to the help command). + +The following functions are provided to handle interval lists: + + /* Construct a struct interval_list */ + struct interval_list *mkinterval( + struct interval_list *next, + int first, int last, + void *map); + + /* Free an interval list (frees all items in the list) */ + void rminterval(struct interval_list *item); + + /* Add a single interval to an interval list */ + struct interval_list *interval_add( + struct interval_list *interval_list, + int first, int last, + void *map); + + /* Add an array of intervals (a character class) to an interval list */ + struct interval_list *interval_set( + struct interval_list *list, + struct interval *array, int size, + void *map); + + /* Look up single character in an interval list, return what it's mapped to */ + void *interval_lookup( + struct interval_list *list, + void *dflt, + int ch); + + /* Print interval list to the log buffer for debugging */ + void interval_show(struct interval_list *list); + +Interval_add is a complex funtion which adds a mapping to an interval list. +You pass it the address of the first item in the list (or NULL) and it +returns an edited list. Interval_add will override any mappings which +already exist in the given range. The resulting list is always sorted and +the items in it are non-overlapping. It might add, delete or modify items +to the list. + +Interval_set is just like interval_add, but takes an array of intervals (as +previously discussed) instead of a single interval. For example, to create +a mapping from all Unicode numbers to a particular MACRO, you could pass the +Nd_table from unicat.c to it. + +Interval_lookup returns the pointer mapped to the character, or if none is +mapped, it returns dflt. + +### Radix trees + +These sets of radix tree structures and associated methods are provided: + +* Rset: for sets +* Rtree: for maps from characters to pointers +* Rmap: for maps from characters to integers + +The best way to understand a radix tree is to study one of the lookup +functions (slightly simplified): + + void *rtree_lookup_unopt(struct Rtree *r, int ch) + { + int a, b, c, d; + int idx; + + a = (ch >> TOPSHIFT); + b = (SECONDMASK & (ch >> SECONDSHIFT)); + c = (THIRDMASK & (ch >> THIRDSHIFT)); + d = (LEAFMASK & (ch >> LEAFSHIFT)); + + idx = r->top.entry[a]; + if (idx != -1) { + idx = r->second.table.b[idx].entry[b]; + if (idx != -1) { + idx = r->third.table.c[idx].entry[c]; + if (idx != -1) + return r->leaf.table.d[idx].entry[d]; + } + } + + return NULL; + } + +The idea is to break the 21 bit character code into four parts: a (7 bits), +b (5 bits), c (5 bits) and d (4 bits) and use these to traverse a four-level +tree. The top-level table is embedded in the struct Rtree itself. Tables +from the other levels (the two mid levels and the leaf level) are allocated +out of struct Levels. The top and mid-level tables are arrays of 16-bit +shorts. + +The number of levels and the size of each level was chosen as a compromise +between speed and size. We certainly want radix tree lookups to be faster +than interval array binary searches (otherwise why bother?), so we can't +have too many levels. On the other hand, radix trees should not use too +much memory. So for example a single level of 2^21 entries is out. + +#### De-duplication + +The leaf tables often contain the same data, so we de-duplicate them such +that many of the second to last level table entries index to the same leaf +table. This is such an effective optimization that the resulting radix tree +ends up being around the same size as an equivalent interval array (an +interval array with an array of the same number of entries containing +associated data (ints or pointers)). + +The second to last level also has duplicate tables, but not many so it's not +de-duplicated. + +De-deplication happens progressively during the build, and as a second pass +optimization step. Why do it progressively if there is a whole second pass? +There is an important reason for this: shorts are used for the second to +last level table indexes. If you don't deduplicate progressively, you can +have more than 64K leaf tables before optimization and overflow the short. +There is a second reason: lower memory usage tends to equate to faster +performance. For this reason it's preferable to keep the memory usage low +during the build. + +The progressive deduplication algorithm is simple: if the most recently +completed leaf table matches the previously completed leaf table, we use the +previous one in its place. + +There is one big complication: there is no strong concept of a completed +leaf table. A leaf table is assumed to be complete when the last entry has +been written to. But there is nothing preventing previous data from being +overwritten, or for tables to be made in reverse order (this can happen in a +regex character class like [zyxw...]). It means that a de-duplicated table +might have to re-duplicated. There is a reference count on each leaf table +which is incremented every time that table is used during de-duplication. +If the reference count is not equal to one during a table write, it is first +copied to a new table (it's a copy on write scheme). + +The second-pass deduplication works like this: a hash table of all leaf +tables is built. If a duplicate table is detected during the hash table +build, it is deduplicated (not added to hash table). + +#### Anglocentrism + +There is one further optimization: we provide faster access to the first 512 +character codes (so that ASCII is fast). To do this, the first of the +second to last level tables is embedded in the struct Rtree. If the code is +below 512, then the upper 5 bits index this table to find the leaf table, +and the lower 4 bits index to leaf table. Thus, there is one local access +and one indirect access for codes below 512. + +### Rset + +struct Rset radix trees are used for simple sets. In this case there are no +leaf tables. Instead, the second to last level table contains bit maps. If +a bit is a one, then the corresponding character is in the set. Each bit +map is 16 bits: the shorts that make up the second to last level table are +used for these bitmaps instead of as leaf-table indexes. + +Here are the provided methods: + + /* Initialize a struct Rset */ + void rset_init(struct Rset *r); + + /* Clear a struct Rset: anything malloced for it is freed, but the + * struct Rset itself is not freed (it could be embedded in another + * structure). */ + void rset_clr(struct Rset *r); + + /* Test if a character is in a set: this one can be called before + * before rset_opt is called. */ + int rset_lookup_unopt(struct Rset *r, int ch); + + /* Add a range of characters to a set: ch to che */ + void rset_add(struct Rset *r, int ch, int che); + + /* Add an array of ranges to a set */ + void rset_set(struct Rset *r, struct interval *array, ptrdiff_t size); + + /* De-duplicate leaf tables and set up embedded table for quicker + * access for characters below 512 */ + void rset_opt(struct Rset *r); + + /* Test if a character is in a set: only use this after rset_opt has + * been called */ + int rset_lookup(struct Rset *r, int ch); + + /* Print Rset in human readable form to startup log for debugging */ + void rset_show(struct Rset *r); + +Rset_add originally accepted just a single character to add, not a range. +This turned out to be too inefficient: the editor was using a lot of CPU +time during start-up just to build the standard character class tables. +Therefore, it has been modified to loop over the range for a fast inner loop +and to lift function call overhead out of the original loop in rset_set. + +### Rtree + +struct Rtree provides a mapping from characters to pointers. For example, +this is used in the regular expression code to traverse states. + +Here are the provided methods: + + /* Initialize a struct Rset */ + void rtree_init(struct Rtree *r); + + /* Clear a struct Rtree: anything malloced for it is freed, but the + * struct Rtree itself is not freed (it could be embedded in another + * structure). */ + void rtree_clr(struct Rtree *r); + + /* Test if a character is in a tree: return pointer bound to it + * or NULL. This can be called before rtree_opt. */ + void *rtree_lookup_unopt(struct Rtree *r, int ch); + + /* Add a binding to from a range of characters to a pointer */ + void rtree_add(struct Rtree *r, int ch, int che, void *map); + + /* Add a binding to from each range of characters in the given array to a pointer */ + void rtree_set(struct Rtree *r, struct interval *array, ptrdiff_t len, void *map); + + /* Add a binding to from each range of characters in the given + * interval_list list to its pointer */ + void rtree_build(struct Rtree *r, struct interval_list *l); + + /* De-duplicate leaf tables and set up embedded table for quicker + * access for characters below 512 */ + void rtree_opt(struct Rtree *r); + + /* Test if a character is in a tree: return pointer bound to it + * or NULL. Only call this after rtree_opt has been called. */ + void *rtree_lookup(struct Rtree *r, int ch); + + /* Print Rtree in human readable form to startup log for debugging */ + void rtree_show(struct Rtree *r); + +They are the same as the rset methods, except that a pointer is provided. +Also, a method is provided to convert an interval_list into an Rtree. + +### Rmap + +struct Rmap provides a mapping from characters to integers. For example, +this is used for Unicode simple case conversion. The integer provides an +offset to be added to the character to convert it from one case to another. +It's important to use an offset, not a direct replacement character for this +so that leaf nodes have the same values and can be de-duplicated. + +Here are the provided methods: + + void rmap_init(struct Rtree *r); + + void rmap_clr(struct Rtree *r); + + int rmap_lookup_unopt( + struct Rtree *r, + int ch, + int dflt + ); + + void rmap_add( + struct Rtree *r, + int ch, int che, + int map, + int dflt + ); + + void rmap_set( + struct Rtree *r, + struct interval *array, + ptrdiff_t len, + int map, + int dflt + ); + + void rmap_opt(struct Rtree *r); + + int rmap_lookup(struct Rtree *r, int ch, int dflt); + + void rmap_show(struct Rtree *r); + +They are the same methods as for struct Rtree, except that you provide +'dflt', the value to return if there is no binding for the character. + +### struct Cclass + +Finally we have struct Cclass, which is made up of an interval array and a +struct Rset and which provides set operations for character classes. The +interval array is used for the set operations, then the array is optimized +into a struct Rset for quick character lookups. + +The Unicode database (made from the data in unicat.c and methods in +unicode.c) uses this data structure. For example, you can get a character +class containing all letters with: + + struct Cclass *letters = unicode("L"); + +The set operations allow you to construct complex classes, for example the +character class for \\i, the initial character of identifiers is contructed +like this: + + cclass_init(cclass_alnum_); + cclass_union(cclass_alnum_, unicode("L")); + cclass_union(cclass_alnum_, unicode("Pc")); + /* cclass_union(cclass_alpha_, unicode("Sc")); */ + cclass_union(cclass_alpha_, unicode("Nl")); + cclass_union(cclass_alnum_, unicode("Mn")); + cclass_union(cclass_alnum_, unicode("Mc")); + cclass_union(cclass_alnum_, unicode("Nd")); + cclass_add(cclass_alnum_, 0x200c, 0x200d); + cclass_opt(cclass_alnum_); + +The following methods are provided: + + /* Initialize a character class */ + void cclass_init(struct Cclass *cclass); + + /* Free memory used by a Cclass (does not free cclass itself) */ + void cclass_clr(struct Cclass *cclass); + + /* Add a range to a character class */ + void cclass_add(struct Cclass *cclass, int first, int last); + + /* Remove a range from a character class */ + void cclass_sub(struct Cclass *cclass, int first, int last); + + /* Merge one character class into another */ + void cclass_union(struct Cclass *cclass, struct Cclass *n); + + /* Merge an interval array into a character class */ + void cclass_merge(struct Cclass *cclass, struct interval *intervals, int len); + + /* Subtract one character class from another */ + void cclass_diff(struct Cclass *cclass, struct Cclass *n); + + /* Compute unicode inverse of a character class, for [^a-z] */ + void cclass_inv(struct Cclass *cclass); + + /* Lookup a character in a character class using binary search. + Return true if character is in the class. */ + int cclass_lookup_unopt(struct Cclass *m, int ch); + + /* Optimize a character class for fast lookup with cclass_lookup. + * Generates a radix tree version of the character class. */ + void cclass_opt(struct Cclass *cclass); + + /* Return true if character is in the class */ + int cclass_lookup(struct Cclass *cclass, int ch); + + /* Print character class to startup log */ + void cclass_show(struct Cclass *cclass); + + /* Remap a character class from Unicode to a specific locale */ + struct Cclass *cclass_remap(struct Cclass *m, struct charmap *map); + +Cclass_remap is used to convert a character class from Unicode to some other +character set (represented by struct charmap *). For example, to get +letters in the KOI8-R 8-bit character set, use: + + struct Cclass *r = cclass_remap(unicode("L"), find_charmap("KOI8-R")); + +Cclass_remap remembers the conversion to save work, so the input struct +Cclass is expected to remain around forever. Basically this is to be used +only for built-in character classes. + +## Regular expressions + +As of verison 4.1, JOE uses an enhanced version of [Thompson's NFA matching algorithm](https://swtch.com/~rsc/regexp/regexp1.html). + +The code is in [regex.c](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/regex.c) and [regex.h](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/regex.h). + +The regular expression matcher is a subroutine of the the larger text search +algorithm in JOE. For example, text search will use [Boyer-Moore](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) +to find a leading prefix of the regular expression before running the +regular expression matcher. A leading prefix is leading text present in +all of the different possible text which can match the regular expression. +For example, in 'hello(foo|bar)', the leading text is 'hello', but it's empty +in 'hello|there'. One of the jobs of the regular expression code is to +identify this leading text. + +The API for the regular expression library is simple: + + /* Compile an expression s/len into a struct regcomp + * Check regcomp->err for compile errors. + */ + struct regcomp *joe_regcomp( + struct charmap *charmap, /* The character set of the expression */ + const char *s, ptrdiff_t len, /* The regular expression */ + int icase, /* Set to ignore case */ + int stdfmt, /* Set for standard syntax expressions, vs. JOE syntax */ + int debug /* Set to have debug information printed to startup log */ + ); + + /* Free a compiled regular expression */ + void joe_regfree(struct regcomp *r); + + struct regmatch { + off_t rm_so, rm_eo; /* Starting and ending byte offset of a match, or -1 if no match */ + } + + /* Returns 0 if buffer at p matches compiled expression r + * 'matches' is filled in with submatch addresses + * 'nmatch' has size of matches array + */ + int joe_regexec( + struct regcomp *r, /* Compiled regular expression */ + P *p, /* Pointer to edit buffer */ + int nmatch, /* Size of matches array */ + struct regmatch *matches, /* Locations of sub-matches */ + int fold /* Set to ignore case */ + ); + + +Joe_regcomp converts the regular expression into an [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree) +with an operator precedence parser and then generates a byte-code program +representation of the regular expression's [NFA](https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton). +Joe_regexec simulates the byte-code program with an arbitrary number of threads machine. +It feeds characters from the buffer into each active thread until one +of the threads encounters the END instruction, there are no more threads, or +the end of the buffer is reached. A side effect is the buffer pointer __P__ +is advanced to the first character not part of the matching text. + +If the 'v' flag is included in JOE's search and replace options prompt, the +AST and program are sent to JOE's startup log so that they can be viewed +(with ESC x showlog). For example, here is the log when you try to search +for 'hello\\(foo\\|bar\\)\\*there': + +~~~~~ +Parse tree: +, + , + , + , + , + , + , + , + , + , + 'h' + 'e' + 'l' + 'l' + 'o' + * + { + | + , + , + 'f' + 'o' + 'o' + , + , + 'b' + 'a' + 'r' + 't' + 'h' + 'e' + 'r' + 'e' +Leading prefix 'hello' +NFA-program: +PC INSN +-- ---- +0: 'h' +4: 'e' +8: 'l' +12: 'l' +16: 'o' +20: fork 92 +28: bra 0 +36: fork 64 +44: 'f' +48: 'o' +52: 'o' +56: jump 76 +64: 'b' +68: 'a' +72: 'r' +76: ket 0 +84: fork 28 +92: 't' +96: 'h' +100: 'e' +104: 'r' +108: 'e' +112: end +Total size = 116 +~~~~~ + +The "Parse tree" (AST) is printed in an indented format: A line begins with an +operator, then all succeeding lines with deeper indentation are its operands. +The ',' operator means succession: match the first operand, then match the +second operand. The '{' operator means record the submatch of its +argument. The '*' operator means 0 or more matches of its argument. The +'|' operator means match one argument or the other. + +The "Leading prefix" is the part of the regular expression which can use +Boyer-Moore search. + +The "NFA-program" shows the dis-assembled program. A letter like 'h' is an +instruction to match the letter itself. 'fork' is an instruction which +creates a new thread beginning at the specified program counter value. +'jump' means the thread should goto the specified PC value. 'bra' and 'ket' +indicate that the start and ending location of submatch should be recorded. + +Here is the log from the regular expression '-\\i\\c-' to show you how +character classes appear (\\i is the initial character of an identifier, and +\\c is the following character of an identifier): + +~~~~~ +Parse tree: +, + , + , + '-' + [ + [41..5a] [5f..5f] [61..7a] + [ + [30..39] [41..5a] [5f..5f] [61..7a] + '-' +Leading prefix '-' +NFA-program: +PC INSN +-- ---- +0: '-' +4: class [41..5a] [5f..5f] [61..7a] +12: class [30..39] [41..5a] [5f..5f] [61..7a] +20: '-' +24: end +Total size = 28 +~~~~~ + +Note that this is showing the ASCII character encoding so that the character +classes are not too big. With the UTF-8 character encoding, the character +classes will include the full Unicode definitions of \\i and \\c. + +### Functions + + /* Parse a character or escape sequence from ptr/len. + * Returns with character or -256 and cat (if not NULL) filled in with a character class + */ + int escape(int utf8, const char **ptr, ptrdiff_t *len, struct Cclass **cat); + +Escape reads one character from a string. If the character is an escape +sequence, it's parsed into either a single character or a character class. +Escape is used in other parts of the editor: for example, it's used to +parse character lists of syntax highlighting files. + + /* Conventional syntax regex */ + static int do_parse_conventional(struct regcomp *g, int prec, int fold); + +do_parse_conventional is the standard syntax regular expression parser. It +records the AST in regcomp->nodes. + + /* JOE syntax regex */ + static int do_parse(struct regcomp *g, int prec, int fold); + +do_parse is the JOE syntax regular expression parser. The JOE syntax is +just like the regular syntax except that regular expression special +characters must be escaped. + + /* Determine leading prefix of search string */ + /* We can use boyer-moore on the prefix if: + Character set is byte coded. + Character set is UTF-8 coded, but no folding is requested. + Character set is UTF-8 coded, folding is requested, but character is below 128 */ + + static int extract(struct regcomp *g, int no, int fold); + +Extract finds the leading prefix for Boyer-Moore from the AST. + + /* Convert parse-tree into code with infinite loops */ + static void codegen(struct regcomp *g, int no, int *end); + +Codegen converts the AST into byte-code. Functions from [frag.c](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/frag.c) / [frag.h](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/frag.h) +write instructions to the memory image and handle alignment. They also provide a +mechanism for linking the program (to handle forward jumps). Basically a +linked-list of all the jump intructions which target the same destination is +created right in the memory image, using the jump instruction operands as +the link pointers. When the jump destination is finally known, the +link-list is traversed and the link pointers are replaced with the +destination address. + +### Matcher + +joe_regexec has the arbitrary number of threads simulator. It has two banks +of threads, A and B, and ping-pongs between them for each input character. +It feeds the next input character to all threads in bank A. It executes as +many instructions as possible for each thread, and stops when the thread +finally accepts the character or rejects it. If the thread accepts the +character, it will be active for the next character, so it is moved to bank +B. Otherwise, the thread will die when we transition to bank B. If a +thread in bank A forks, the newly created thread is appended to bank A so +that the current character is fed to it before switching. Once all threads +have been fed the character, we switch to bank B and feed in the next +character. + +This scheme is simple and fast, but there are complications. First has to +do with sub-match addressing. Without modification, the matcher will find +all possible solutions to expressions like 'x(a\*)(a\*)y'. This means that +at the end of the match, there will be a thread for each of these +solutions. If the input is xaaaay, it will find x()(aaaa)y, x(a)(aaa)y, +x(aa)(aa)y, x(aaa)(a)y, and x(aaaa)()y. + +Research topic: due to this property, I think the Thompson NFA matcher can +be extended to support back-references. + +But we don't want all solutions, we want just one solution, the one where +the left-most submatch is longest: x(aaaa)()y. To select the preferred +solution, joe_regexec has a helper function: + + static int add_thread( + struct thread *pool, /* Thread pool */ + int l, int le, /* Current start and end of pool */ + unsigned char *pc, /* Current thread's pc */ + Regmatch_t *pos, /* Submatch addresses */ + int bra_no, /* Size of submatch addresses */ + int *stack, int sp /* Current thread's stack */ + ); + +This adds the thread to the end of the new pool B (which is at +pool[le]). Before it adds, it checks if there are other existing threads +(between l and le) at the same program counter. If there are, then we pick +the one with the "best" submatch, the one with the longest to the left. + +The second complication is JOE's extension \\! (which used to be \\c in +versions before 4.1). \\! is like '.': it matches one character. However, +if that one character is the opening bracket of an expression, it matches +the entire expression. \\! will match all of "(1+(2+3))". To support this, +each thread needs a stack to record its progress in parsing the balanced +expression. + +## Unicode database + +[unicode.c](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/unicode.c), [unicode.h](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/unicode.h) and [unicat.c](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/unicat.c) provide +JOE's database of Unicode facts. Unicat.c is generated by [util/uniproc.c](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/util/uniproc.c) from the +raw data provided on the [unicode.org](ftp://ftp.unicode.org/Public/UNIDATA/) website. + +There is a table in unicat.c which has the name of, pointer to and size of +each other table. + + struct unicat unicat[] = { + { "Co", 3, Co_table, 0 }, + { "Cs", 1, Cs_table, 0 }, + { "Zp", 1, Zp_table, 0 }, + ... + { "Domino Tiles", 1, uniblocks + 241, 0 }, + { "Mahjong Tiles", 1, uniblocks + 240, 0 }, + { "Arabic Mathematical Alphabetic Symbols", 1, uniblocks + 239, 0 }, + ... + +The function unicode looks up one of these tables and returns a struct +Cclass version of it: + + struct Cclass *unicode(const char *name); + +If a single letter name is passed to the above function, a Cclass containing +all two-letter named tables with the same matching first letter is returned. +So for example, unicode("L") returns a Cclass of all letters, including +"Lu", "Ll", "Lt", etc. + +Joe_iswinit initializes Cclasses for JOE's isw ctype functions. The +following functions are provided: + + int joe_iswupper(struct charmap *,int c); + int joe_iswlower(struct charmap *,int c); + + int joe_iswalpha(struct charmap *,int c); + int joe_iswalpha_(struct charmap *,int c); /* used for \i */ + + int joe_iswalnum(struct charmap *,int c); + int joe_iswalnum_(struct charmap *,int c); /* used for \c */ + + int joe_iswdigit(struct charmap *,int c); + int joe_iswspace(struct charmap *,int c); + int joe_iswctrl(struct charmap *,int c); + int joe_iswpunct(struct charmap *,int c); + int joe_iswgraph(struct charmap *,int c); + int joe_iswprint(struct charmap *,int c); + int joe_iswxdigit(struct charmap *,int c); + int joe_iswblank(struct charmap *,int c); + +Another table in unicat.c is the width_table. This indicates which +characters are double-wide on terminal emulators. It is used to implement +the joe_wcwidth function: + + int joe_wcwidth(int wide,int c); + +'wide' should be true if the character set of c is Unicode. Both the +terminal and the file must be Unicode (UTF-8 or UTF-16) or double-wide +characters to be printed. + +Another set of tables in unicat.c includes fold_table and fold_repl for case +folding for string comparisons. Fold_table is an array of ranges. If a +character is in one of these ranges, then the corresponding entry in +fold_repl is a string (of 1 to 3 characters) which should replace it for +case folding. The first character of the string is an offset which should +be added to the original character to get the first character of the +replacement. + +rtree_fold is an struct Rtree representation of the fold table. It returns +either a single character replacement offset, or an index into fold_repl if the +character is to be replaced by a string longer than one character. + +Lowerize can be called to convert a UTF-32 string into its case folded +version: + + int *lowerize( + int *d, ptrdiff_t len, /* Destination string and length */ + const int *s /* Source string */ + ); + +Unicat.c also provides simple case conversion tables: toupper_table, +tolower_table and totitle_table along with the corresponding replacement +tables: toupper_cvt, tolower_cvt and totitle_cvt. + +These are used to implement joe_towupper and joe_towlower: + + int joe_towupper(struct charmap *,int c); /* Convert to uppercase */ + int joe_towlower(struct charmap *,int c); /* Convert to lowercase */ + +Digval is provided to return the decimal value of any unicode digit: + + int digval(int ch) + +This function uses Nd_table from unicat.c. Nd_table has the property that +each range represents a single set of decimal digits. Normally adjacent +ranges would be combined together, but in this case they are separated to +support digval. + +Finally unicode.c provides the following function: + + int unictrl(int c); + +Which returns true if JOE should treat the character as a control character +which should not be sent directly to the terminal. Instead the character +value is displayed in hexadecimal: . Basically this function +returns true if the character is not printable- if it's not in cclass_print. + +## Character sets + +[charmap.c](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/charmap.c) and [charmap.h](http://sourceforge.net/p/joe-editor/mercurial/ci/default/tree/joe/charmap.h) implement JOE's representation of character +sets. + +Each character set is represented by a "struct charmap *". A charmap +provides information about a specific character set. It provides these +methods: + + /* True if character is punctuation */ + int joe_ispunct(struct charmap *map, int ch); + + /* True if character is printable */ + int joe_isprint(struct charmap *map, int ch); + + /* True if character is a space */ + int joe_isspace(struct charmap *map, int ch); + + /* True if character is first of an identifier */ + int joe_isalpha_(struct charmap *map, int ch); + + /* True if character is rest of an identifier */ + int joe_isalnum_(struct charmap *map, int ch); + + /* True if character is blank: space or tab */ + int joe_isblank(struct charmap *map, int ch); + + /* True if character is blank tab CR LF FF or NUL */ + int joe_isspace_eos(struct charmap *map, int ch); + + /* Convert to lowercase */ + int joe_tolower(struct charmap *map, int ch); + + /* Convert to uppercase */ + int joe_tolower(struct charmap *map, int ch); + + /* Convert from character set to Unicode */ + int to_uni(struct charmap *map, int ch); + + /* Convert from Unicode to character set */ + int from_uni(struct charmap *map, int ch); + +There are two types of character sets: Unicode and 8-bit. If the character +set is Unicode, then charmap->type will be true. + +Joe_locale intializes some global character maps: + + extern struct charmap *locale_map; /* Character map of terminal */ + extern struct charmap *utf8_map; /* UTF-8 character map */ + extern struct charmap *utf16_map; /* UTF-16 character map */ + extern struct charmap *utf16r_map; /* UTF-16 reversed character map */ + extern struct charmap *ascii_map; /* Plain ASCII map */ + +Find_charmap can be used to find a named character set: + + /* Find (load if necessary) a character set */ + struct charmap *find_charmap(const char *name); + +If the character set is not already built into JOE, find_charmap tries to +load it from a file. It looks in $HOME/.joe/charmaps and /usr/share/joe/charmaps. + +The following character sets are built into JOE: + + ASCII, ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, + ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, + ISO-8859-9, ISO-8859-10, ISO-8859-11, ISO-8859-13, + ISO-8859-14, ISO-8859-15, ISO-8859-16, ISO-8859-1, + KOI-8, KOI8-R, KOI8-T, KOI8-U, CP1251, CP1256, + CP1255, ARMSCII-8, TIS-620, GEORGIAN-PS + +Guess_map tries to determine the character map based on the contents of a +buffer: + + struct charmap *guess_map(const char *buf, ptrdiff_t len); + +It selects the locale_map unless it detects valid UTF-8 sequences in the +buffers. + +Finally, my_iconv is provided to convert from one character set to another: + + void my_iconv( + char *dest, ptrdiff_t destsiz, struct charmap *dest_map, + const char *src,struct charmap *src_map + ); + +This is used in a few places in JOE, but most of JOE uses to_uni and +from_uni to convert between character sets a character at a time. + +## Coroutines in JOE + +

JOE 3.6 now uses co-routines to help reduce the amount of event-driven +code which has to be written. All previous versions of JOE were entirely in +the event driven coding style, which made user dialog code a chore to write. +Now, with the help of co-routines, dialog code can be written as old +fashioned blocking code which is much cleaner, even though JOE can have +multiple un-finished dialogs on the screen.

+ +

The coroutine library has only three (now four) functions:

+ + + + + + + + + + + +
int co_call(int (*func)(va_list args),...);Call a function +as a co-routine.
int co_yield(Coroutine *t, int val);Suspend current +co-routine and return to caller with given return value.
int co_resume(Coroutine *t, int val);Suspend current +co-routine and resume specified one with given return value.
int co_suspend(Coroutine *u, int val);Suspend +current co-routine (remembering its suspended invoking coroutines) and +resume the top-level. The current coroutine is stored in u. When u is +resumed and returns, the suspended chain is resumed (the resumer is +continued when the chain tries to continue the top level.
+ +

co_call() invokes 'func' as a co-routine- it will run on its own stack. +'func' is called immediately upon the call to co_call. All of the arguments +after func are passed as a va_list to the function. co_call calls va_start +and va_end, 'func' should call va_arg once for each passed argument (see +stdarg.h). The co-routine should not yield before it has finished reading +all of the arguments, otherwise va_end will be called early. When 'func' +returns, the co-routine is destroyed and co_call() returns with the return +value of 'func'. If the co-routine yields by calling co_yield, co_call +returns with the return value specified in the call to co_yield. Note that +co_call only ever returns once for a particular call.

+ +

co_yield() suspends the current co-routine and returns with the specified +return value to the caller (either to co_call or co_resume). co_yield() +writes information about the co-routine to the 'Coroutine' structure whose +address is passed to co_yield. The Coroutine structure's address is used as +a handle for the co-routine and can be passed to co_resume().

+ +

co_resume() suspends the current co-routine (henceforth called the +original co-routine) and resumes the specified co-routine. When the +specified co-routine returns (when the function given in the co_call that +created the co-routine returns), the original co-routine is continued and +co_resume() returns with the function's return value. If the specified +co-routine yields, the original co-routine is continued and co_resume() +returns with the return value specified in the call to co_yield.

+ +

co_suspend() is like co_resume, except that the top-level task is resumed +instead of the calling co-routine. This has the effect of suspending the +entire chain of co-routines which invoked the caller of co_suspend. +Co_suspend stores the suspended co_routine in another co_routine. That +co_routine will resume this one when it finally returns.

+ +

The co-routine library is structured this way (which is different from +the usual way where you get a co-routine handle immediately upon creation, +for example see Knuth) to encourage proper stack un-winding. Basically, a +co-routine can not be forcibly destroyed. Instead, each created co-routine +is only destroyed when the initial function returns.

+ +

The co-routine library is based on ucontext.h and the getcontext, +swapcontext, makecontext and setcontext system calls. If the system does +not have these calls, it uses setjmp/longjmp tricks in a highly portable +way: the stacks for each co-routine are allocated off the top of the main +stack. The main stack grows after each allocation. The stacks are never +freed, but they are reused. This works for any machine with a single normal +stack. It will not work on IA64 (two stacks) or Cray (the stack is really a +linked list).

+ +

I was originally going to use simple cooperative multi-threading, with +only two basic calls: sleep_on() and wake_up() (inspired by old versions of +the Linux kernel) and a top-level scheduler. Sleep_on would suspend the +current thread, and create a new thread which runs just the scheduler. +Wake_up would mark a thread as ready to run, and on the next return to the +scheduler, it would be run.

+ +

This turns out to not be powerful enough to implement JOE's keyboard +macro language, at least without much rewriting and inelegance. It could be +done, but the keyboard macro player would have to feed events into the +top-level scheduler or would have to be integrated with it, whereas in older +versions of JOE (even without co-routines) the macro player just calls the +edit functions (more or less) directly. The problem is that sleep_on +(called by a function asking for user input) would suspend the task all the +way up to the scheduler including the macro player, thus preventing the +macro player from simulating user input.

+ +

On the other hand with real co-routines, the macro player will call each +edit function as a co-routine (which I like to think of as a task with a +very clear return point). If the edit function has to yield, it returns +immediately to the macro player for the next macro step. If the yield is +due to a request for input, the macro player supplies it by calling the +recorded edit functions. If the macro wants to allow the user to provide +input (using the "query" function, also known as an interactive macro), it +can itself yield (since it is also running in a coroutine) back to the +top-level edit loop (in actuality, the macro player calls a function which +calls co_suspend() to do this). The macro player is continued when the user +finishes supplying the input (hits the return key at a prompt). Several +interactive macros can be running at once with this scheme.

+ +## Semi-Automatic Variables + +

JOE 3.6 uses "semi-automatic" variables for strings. There is a global +"object-stack", accessed through these functions:

+ + +++ + + + + + + + +
void *obj_malloc(int size);Allocate a block of memory.
void *obj_realloc(void *ptr, int size);Change allocation size.
void obj_free(void *ptr);Free a specified block and all newer blocks.
void obj_perm(void *ptr);Mark a block as permanent, which in effect moves the block from the stack to the heap.
int obj_len(void *ptr);Access hidden "length" part of block (string length).
int obj_size(void *ptr);Access hidden "size" part of block (allocation size).
+ +

These functions remember the order of allocation. When an allocated +block is freed, it and all newer blocks are freed as well. For example, in:

+ +
+unsigned char *a = obj_malloc(10);
+unsigned char *b = obj_malloc(10);
+unsigned char *c = obj_malloc(10);
+unsigned char *d = obj_malloc(10);
+
+obj_free(b);
+
+ +

b, c, and d are all freed, but a remains allocated. The top-level edit +loop is structured to call obj_free after every editor command:

+ +
+unsigned char *gc = obj_malloc(1);
+execmd(...); /* Execute edit commands */
+obj_free(gc); /* Collect garbage */
+
+ +

Thus, you rarely have to call obj_free- the only time you might want to do +it is if you are calling obj_malloc in a loop. This could cause a large +amount of memory to be allocated, so obj_free() should be called at the +end of each loop iteration.

+ +

obj_perm() marks an object as a heap object instead of a stack object. +When a heap object is freed, only itself is freed- the stack is not +modified. Also when the stack is freed, heap objects are not touched.

+ +## Variable Strings + +

JOE uses dynamic strings built on top of the global object stack +functions. These strings automatically resize themselves to fit their +contents. They also know their own length, which allows you to have NULs in +the middle of a string. They also always have a terminating NUL to make +them compatible with C-strings. In fact they have (almost) the same type as +C-strings: unsigned char *. The length is hidden in the obj_malloc data +structure. These functions are provided:

+ + +++ + + + + + + + + + + + + + + + +
unsigned char *vsmk(int prealloc);Allocate a zero length string, but with enough space to grow to the specified length.
int vslen(unsigned char *s);Return string length or 0 if s is NULL.
unsigned char *vsensure(unsigned char *s, int len);Make sure there is enough space for a string of the specified length.
unsigned char *vstrunc(unsigned char *s, int len);Set length of string: the string is truncated or extended with spaces to the specified length.
unsigned char *vsncpy(unsigned char *s,int offset,unsigned char *block, int block_size);Copy a memory block to a string. The string is extended with spaces if offset > string length.
unsigned char *vsdupz(unsigned char *s);Duplicate a z-string to a variable string.
unsigned char *vsdup(unsigned char *s);Duplicate a variable string.
unsigned char *vscpyz(unsigned char *s,unsigned char *z);Copy a z-string to a variable string.
unsigned char *vscpy(unsigned char *s,unsigned char *block,int size);Copy a memory block to a variable string.
unsigned char *vscatz(unsigned char *s,unsigned char *z);Append a z-string to a variable string.
unsigned char *vscat(unsigned char *s,unsigned char *block,int size);Append a memory block to a variable string.
unsigned char *vsadd(unsigned char *s,unsigned char c);Append a single character to a string.
unsigned char *vsfmt(unsigned char *s,int offset,const char *format,...);Sprintf() to a variable string.
unsigned char *vsgets(unsigned char **sp,FILE *f);fgets() to a variable string (returns NULL on EOF, does not put '\n' in the string).
+ +

Note that it is OK to pass NULL in place of 's' in any of the above +functions. In this case, a new string is allocated.

+ +

Most of these function return the address of the variable string, in case +it was modified. One exception is vsgets()- it takes an address of a +variable holding the string. It returns the string address, but it also +writes it to the variable directly.

+ +

Many of the above functions take a memory block, which is specified by an +address and a length. These macros can be used to help construct these +arguments:

+ + +++ + + + + +
#define sc(s) (s), (sizeof(s)-1)For string constants.
#define sz(s) (s), zlen(s)For C-strings (zlen is the same as strlen).
#define sv(s) (s), vslen(s)For variable strings.
+ + +

So for example, vscatz is defined as:

+ +
+unsigned char *vscatz(unsigned char *s, unsigned char *z);
+{
+	return vsncpy(sv(s), sz(z));
+}
+
+ +## Variable arrays of variable strings + +

JOE also semi-automatic variable arrays of variable strings. These +functions are provided:

+ + +++ + + + + + + + + + + +
unsigned char *vamk(int prealloc);Allocate a zero length array, but with enough space to grow to the specified length.
void varm(unsigned char **a);Free an array.
int valen(unsigned char *a);Return array length or 0 if a is NULL.
unsigned char *vaensure(unsigned char *s, int len);Make sure there is enough space for an array of the specified length.
unsigned char *vatrunc(unsigned char *s, int len);Set length of array: the array is truncated or extended with NULLs to the specified length.
unsigned char *vaadd(unsigned char **a,unsigned char *s);Append a single string to an array.
unsigned char *vasort(unsigned char **a,int len);Sort an array.
unsigned char *vawords(unsigned char **a,unsigned char *s,int len, unsigned char *sep, int seplen);Convert a word list in s (words separated by characters given in sep/seplen) into an array of strings.
void vaperm(unsigned char **a);Mark an array as preferment (heap instead of stack).
+ +

When an array is marked as permanent, any strings in the array also +marked as permanent, and any string later added to the array are also marked +as permanent.

+ + +## Edit Buffers +

API: +

+

Look at the comments in b.h for more information. +

+

B *bfind(unsigned char *name); + Load disk file into memory buffer 'B'. +

+

bsave(P *p,unsigned char *name,int size); + Write size bytes from buffer beginning at p to disk file +

+

brm(b); Free data structure +

+

Once you have a B you can access the characters in it via P pointers (which +are like C++ STL iterators). +

+

B *b = bfind("foo"); Load file into memory +

+

P *p = pdup(b->bof); Get pointer to beginning of file (duplicate + b->bof which is a P). +

+

prm(p); Free p when we're done with it. +

+

int c=brch(p); Get character at p.

+

int c=pgetc(p); Get character at p and advance it.

+

int c=prgetc(p); Retract p, then return character at it.

+

+

- These return -1 (NO_MORE_DATA) if you try to read end of file or + before beginning of file. +

+

- A pointer can point to any character of the file and right after the + end of the file. +

+

- For UTF-8 files, character can be between 0 and 0x7FFFFFFF +

+

Publicly readable members of P:

+

p->byte The byte offset into the buffer

+

p->line The line number

+

p->xcol If P is the cursor, this is the column number + where the cursor will be displayed on the screen + (which does not have to match the column of the + character at P).

+

Some predicates:

+

pisbof(p); True if pointer is at beginning of buffer

+

piseof(p); True if pointer is at end of buffer

+

pisbol(p); True if pointer is at beginning of line

+

piseol(p); True if pointer is at end of line

+

pisbow(p); True if pointer is at beginning of a word

+

piseow(p); True if pointer is at end of a word

+ +

More information about character at p:

+

piscol(p); Get column number of character at p. +

+

Some other ways of moving a P through a B: +

+

pnextl(p); Go to beginning of next line

+

pprevl(p); Go to end of previous line

+

pfwrd(p,int n); Move forward n bytes

+

pbkwd(p,int n); Move backward n bytes

+

p_goto_bof(p);

+

p_goto_eof(p);

+

p_goto_bol(p);

+

p_goto_eol(p);

+

pset(p,q); Move p to same position as q. +

+

pline(p,n); Goto to beginning of a specific line.

+

pgoto(p,n); Goto a specific byte position.

+

pfind(P,unsigned char *s,int len); + Fast Boyer-Moore search forward.

+

prfind(P,unsigned char *s,int len); + Fast Boyer-Moore search backward.

+

These are very fast- they look at low level + data structure and don't go through pgetc(). Boyer-Moore + allows you to skip over many characters without reading + them, so you can get something like O(n/len).

+

Some facts:

+

Local operations are fast: pgetc(), prgetc().

+

Copy is fast: pset().

+

pline() and pgoto() are slower, but look for the closest existing + P to start from.

+

The column number is stored in P, but it is only updated if + it is easy to do so. If it's hard (like you crossed a line + boundary backward) it's marked as invalid. piscol() then has + to recalculate it. +

+

Modifying a buffer: +

+

binsc(p,int c); Insert character at p.

+

bdel(P *from,P *to); Delete character between two Ps.

+

Note that when you insert or delete, all of the Ps after the insertion/ + deletion point are adjusted so that they continue to point to the same + character before the insert or delete. +

+

Insert and Delete create undo records. +

+

Insert and Delete set dirty flags on lines which are currently being + displayed on the screen, so that when you return to the edit loop, these + lines automatically get redrawn. +

+

Internal: +

+

An edit buffer is made up of a doubly-linked list of fixed sized (4 KB) +gap buffers. A gap buffer has two parts: a ~16 byte header, which is always +in memory, and the actual buffer, which can be paged out to a swap file (a +vfile- see vfile.h). A gap buffer consists of three regions: text before +the gap, the gap and text after the gap (which always goes all the way to +the end of buffer). (hole and ehole in the header indicate the gap +position). The size of the gap may be 0 (which is the case when a file is +first loaded). Gap buffers are fast for small inserts and deletes when the +cursor is at the gap (for delete you just adjust a pointer, for insert you +copy the data into gap). When you reposition the cursor, you have to move +the gap before any inserts or deletes occur. If you had only one window and +a single large gap buffer for the file, you could always keep the gap at the +cursor- the right-arrow key copies one character across the gap. +

+

Of course for edits which span gap buffers or which are larger than a gap +buffer, you get a big mess of gap buffer splitting and merging plus +doubly-linked list splicing. +

+

Still, this buffer method is quite fast: you never have to do large memory +moves since the gap buffers are limited in size. To help search for line +numbers, the number of newlines '\n's contained in each gap buffer is stored +in the header. Reads are fast as long as you have a P at the place you +want to read from, which is almost always the case. +

+

It should be possible to quickly load files by mapping them directly into +memory (using mmap()) and treating each 4KB page as a gap buffer with 0 size +gap. When page is modified, use copy-on-write to move the page into the +swap file (change pointer in header). This is not done now. Instead the +file is copied when loaded. +

+## Windowing System +

There is a tiny object-oriented windowing system built into JOE. This is +the class hierarchy: +

+

SCRN + A optimizing terminal screen driver (very similar to 'curses'). + has a pointer to a CAP, which has the terminal capabilities read + from termcap or terminfo. +

+

writes output to screen with calls to the macro ttputc(). (tty.c is the + actual interface to the tty device). +

+

cpos() - set cursor position

+

outatr() - draw a character at a screen position with attributes

+

eraeol() - erase from some position to the end of the line

+

SCREEN + Contains list of windows on the screen (W *topwin). +

+

Points to window with focus (W *curwin). +

+

Contains pointer to a 'SCRN', the tty driver for the particular terminal + type. +

+

W + A window on a screen. +

+

Has position and size of window. +

+

Has: + void *object- pointer to a structure which inherits window (W should + really be a base class for these objects- since C doesn't have this + concept, a pointer to the derived class is used instead- the derived + class has a pointer to the base class: it's called 'parent'). +

+

Currently this is one of:

+

BW * a text buffer window (screen update code is here.)

+

QW * query window (single character yes/no questions)

+

MENU * file selection menu

+

BW * is inherited by (in the same way that a BW inherits a W):

+

PW * a single line prompt window (file name prompts)

+

TW * a text buffer window (main editing window).

+

WATOM *watom- Gives type of this window. The WATOM structure has + pointers to virtual member functions.

+

KBD *kbd- The keyboard handler for this window. When window has + focus, keyboard events are sent to this object. When key sequences + are recognized, macros bound to them are invoked.

+

Some window are operators on others. For example ^K E, load a file into a +window prompt operates on a text window. If you hit tab, a file selection +menu which operates on the prompt window appears below this. When a window +is the target of operator windows is killed, the operators are killed also.

+

Currently all windows are currently the width of the screen (should be fixed +in the future). The windows are in a big circular list (think of a big loop +of paper). The screen is small window onto this list. So unlike emacs, you +can have windows which exist, but which are not on the screen.

+

^K N and ^K P move the cursor to next or previous window. If the next +window is off the screen it is moved onto the screen, along with any +operator windows are target it.

+## Macros +

- add something here. +

+## Screen update +

- add something here. +

+## Syntax Highlighter + +

There are two parts to the syntax highlighter: the parser (in syntax.c) +and the line attribute database (in lattr.c). The parser is simple enough: +it is a finite state machine interpreter. You supply a line of text and the +starting state, and it returns the starting state of the next line and an +array containing the color to be used for each character. Each state has a +color. The line is scanned left to right, character by character: the state +and the character index a table, which gives an action, which includes the +next state.

+ +

The action specifies the next state, and also indicates whether some +previous N characters (including the current) should be "recolored" with the +color of the next state, or whether the color of the current state should be +used for the character. The action also indicates whether to move on to the +next character, or to stay put and re-evaluate the current character with +the new state. This leads to simpler hand-coding of the state machine, but +can create an infinite loop. The action also indicates if the character +should be added to a string buffer. The string buffer can be used (when +specified by an action) as a key for a hash table look-up (typically filled +with key-words). If there is a match, the hash-table entry supplies the +action instead of the state table.

+ +

This parser is fast and simple and powerful enough to lexically analyze +more than 40 languages. However a few enhancements were made to improve +both the class of languages which can be highlighted and to improve the ease +of writing the state machine. To support "here" documents in perl and sh, +as well as to simplify matching delimiters (like open with close +parenthesis), a string (from the string buffer) can be stored along with the +state. This can be matched against the string buffer. So first the +terminating word from the here document is stored in the string, and then +the state machine looks forward until it finds this string to determine the +end of the here document.

+ +

The state is only a single integer, not an entire stack. The parser can +therefore not handle recursive grammars. Unfortunately, some languages have +recursive elements in their lexical structure. One way to deal with this is +to support only a very limited recursion depth by tediously repeating a set +of states in the hand written state machine N times, where N is your maximum +recursion depth. To ease writing this type of thing, and also to allow +state machine to be reused in cases where one language is embedded within +another (PHP in HTML, for example), a macro system was added to the state +machine loader. Recursion is allowed in the macro calls, but is limited to +a depth of 5.

+ +

As of JOE 3.6, the macro instantiation was replaced with a real stack, so +now there is no recursion depth limit.

+ +## Line attribute cache + +

The second part of the syntax highlighter is the line attribute cache. +In the original implementation, the state of the first line of each window +is maintained and the parser is invoked during the screen update algorithm +to highlight all of the lines on the screen. This works well when the +window remains in place or when it scrolls forward through the file. +However, if the window scrolls backward you may have to reparse the entire +file or from the nearest previous window if there happens to be one. This +can be slow for large files, and certainly wastes a lot of CPU time when +scrolling backward through a file.

+ +

One attempt to solve this was to instead of starting at the beginning of +the file, to instead assume that the line 200 lines (a configurable option) +back was at the initial state, parse forward from there and hope for the +best. Sometimes the state machine would find itself back in the proper +state, but not always- to the point where most syntaxes had specified to +just always reparse from the beginning of the file.

+ +

Finally, the line attribute cache was added. It stores the parser state +at the beginning of each line, from the beginning of the file to last line +actually displayed on the screen. This solves the scrolling problem, but +introduces a new one: how to keep the line attribute cache up to date. This +turns out to not be so difficult. First of all, the states are stored in a +gap-buffer, which makes it easy to perform insertions and deletions. +Whenever lines are inserted or deleted in the file, the line attribute cache +is expanded or contracted to keep in sync. Now, when any change is made to +the file, we reparse from just before the start of the change until the +state of the beginning of a line again matches the corresponding entry in +the cache. If a match is found, the rest of the cache is assumed to be +correct. Some changes will require a large amount of reparsing, but many +will not. In any case, the the highlighting on the screen is always +correct.

+ +## Files + + +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
b.cText buffer management
blocks.cLibrary: fast memcpy() functions (necessary on really old versions of UNIX).
bw.cA class: text buffer window (screen update code is here)
charmap.cUNICODE to 8-bit conversion functions
cmd.cTable of user edit functions
coroutine.cCoroutine library
dir.cDirectory reading functions (for old UNIXs).
hash.cLibrary: automatically expanding hash table functions.
help.cImplement the on-line help window
i18n.cUnicode character type information database
kbd.cKeymap data structure (keysequence to macro bindings).
lattr.cLine attribute cache
macro.cKeyboard and joerc file macros
main.cHas main() and top level edit loop
menu.cA class: menu windows
obj.cSemi-automatic objects, plus dynamic string and array library
path.cLibrary: file name and path manipulation functions
poshist.cCursor position history
pw.cA class: prompt windows
queue.cLibrary: doubly linked lists
qw.cA class: single-key query windows
rc.cJoerc file loader
regex.cRegular expressions
scrn.cTerminal update functions (like curses)
selinux.cSecure linux (for RedHat) functions
syntax.cSyntax highlighter
tab.cTab completion for file selection prompt
termcap.cLoad terminal capabilities from /etc/termcap file or terminfo database
tw.cA class: main text editing window
ublock.cUser edit functions: block moves
uedit.cUser edit functions: basic edit functions
uerror.cUser edit functions: parse compiler error messages and goto next error, previous error
ufile.cUser edit functions: load and save file
uformat.cUser edit functions: paragraph formatting, centering
uisrch.cUser edit functions: incremental search
umath.cUser edit functions: calculator
undo.cUndo system
usearch.cUser edit functions: search & replace
ushell.cUser edit functions: subshell
utag.cUser edit functions: tags file search
utf8.cUTF-8 to unicode coding functions
utils.cMisc. utilities
vfile.cLibrary: virtual memory functions (allows you to edit files larger than memory)
w.cA class: base class for all windows
diff --git a/joe/usr/share/doc/joe/man.md b/joe/usr/share/doc/joe/man.md new file mode 100644 index 0000000..53c8d58 --- /dev/null +++ b/joe/usr/share/doc/joe/man.md @@ -0,0 +1,3994 @@ +# JOE - Joe's Own Editor + +[TOC] + +## Syntax + +__joe [global-options] [ [local-options] filename ]...__ +
+__jstar [global-options] [ [local-options] filename ]...__ +
+__jmacs [global-options] [ [local-options] filename ]...__ +
+__rjoe [global-options] [ [local-options] filename ]...__ +
+__jpico [global-options] [ [local-options] filename ]...__ + +## Description + +JOE is a powerful console screen editor. It has a "mode-less" user +interface which is similar to many user-friendly PC editors. Users of +Micro-Pro's WordStar or Borland's "Turbo" languages will feel at home. JOE +is a full featured UNIX screen-editor though, and has many features for +editing programs and text. + +JOE also emulates several other editors. JSTAR is a close imitation of +WordStar with many "JOE" extensions. JPICO is a close imitation of the +Pine mailing system's PICO editor, but with many extensions and +improvements. JMACS is a GNU-EMACS imitation. RJOE is a restricted +version of JOE, which allows you to edit only the files specified on the +command line. + +Although JOE is actually five different editors, it still requires only one +executable, but one with five different names. The name of the editor with +an "rc" appended gives the name of JOE's initialization file, which +determines the personality of the editor. + +JOE is free software; you can distribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation. JOE is available over the Internet from +. + +## Usage + +To start the editor, type __joe__ followed by zero or more names of files +you want to edit. Each file name may be preceded by a local option setting +(see the local options table which follows). Other global options, which +apply to the editor as a whole, may also be placed on the command line (see +the global options table which follows). If you are editing a new file, you +can either give the name of the new file when you invoke the editor, or in +the editor when you save the new file. A modified syntax for file names is +provided to allow you to edit program output, standard input/output, or +sections of files or devices. See the section [Filenames](#filenames) below for +details. + +Once you are in the editor, you can type in text and use special +control-character sequences to perform other editing tasks. To find out +what the control-character sequences are, read the rest of this man page or +type __^K H__ for help in the editor. + +Now for some obscure computer-lore: + +The __^__ means that you hold down the __Control__ key while pressing +the following key (the same way the __Shift__ key works for uppercase +letters). A number of control-key sequences are duplicated on other keys, +so that you don't need to press the control key: __Esc__ will work in +place of __^\[__, __Del__ will work in place of __^?__, __Backspace__ +will work in place of __^H__, __Tab__ will work in place of __^I__, +__Return__ or __Enter__ will work in place of __^M__ and +__Linefeed__ will work in place of __^J__. Some keyboards may give you +trouble with some control keys. __^___, __^^__ and __^@__ can usually +be entered without pressing shift (i.e., try __^-__, __^6__ and +__^2__). Other keyboards may reassign these to other keys. Try: +__^.__, __^,__ and __^/__. __^Space__ can usually be used in place +of __^@__. __^\\__ and __^\]__ are interpreted by many communication +programs, including telnet and kermit. Usually you just hit the key twice +to get it to pass through the communication program. + +On some keyboards, holding the __Alt__ key down while pressing another key +is the same as typing __Esc__ before typing the other key. + +Once you have typed __^K H__, the first help window appears at the top of +the screen. You can continue to enter and edit text while the help window +is on. To page through other topics, hit __Esc ,__ and __Esc .__ (that is, +__Esc ,__ and __Esc .__). Use __^K H__ to dismiss the help window. + +You can customize the keyboard layout, the help screens and a number of +behavior defaults by copying JOE's initialization file (usually +__/etc/joe/joerc__) to __.joerc__ in your home directory and then +by modifying it. See the section [joerc](#joerc) below. + +To have JOE used as your default editor for e-mail and News, you need to set +the __EDITOR__ and __VISUAL__ environment variables in your shell +initialization file (__.cshrc__ or __.profile__) to refer to JOE (JOE +usually resides as __/usr/bin/joe__). + +There are a number of other obscure invocation parameters which may have to +be set, particularly if your terminal screen is not updating as you think it +should. See the section [Environment variables](#evariables) below. + + +## Command Line Options + +These options can also be specified in the joerc file. Local options can be +set depending on the file-name extension. Programs (.c, .h or .p extension) +usually have autoindent enabled. Wordwrap is enabled on other files, but rc +files have it disabled. + +An option is enabled when it's given like this: + + -wordwrap + +An option is disabled when it's given like this: + + --wordwrap + +Some options take arguments. Arguments are given like this: + + -lmargin 5 + +The following global options may be specified on the command line: + +* asis
+Characters with codes above 127 will be sent to the terminal as-is, instead +of as inverse of the corresponding character below 128. If this does not +work, check your terminal server. This option has no effect if UTF-8 +encoding is used. +
+ +* assume_256color
+Assume ANSI-like terminal emulator supports 256 colors even if termcap entry +says it doesn't. +
+ +* assume_color
+Assume ANSI-like terminal emulator supports color even if termcap entry says +it doesn't. +
+ +* autoswap
+Automatically swap __^K B__ with __^K K__ if necessary to +mark a legal block during block copy/move commands. +
+ +* backpath path
+Sets path to a directory where all backup files are +to be stored. If this is unset (the default) backup files are stored in the +directory containing the file. +
+ +* baud nnn
+Set the baud rate for the purposes of terminal screen optimization +(overrides value reported by stty). JOE inserts delays for baud rates below +19200, which bypasses tty buffering so that typeahead will interrupt the +screen output. Scrolling commands will not be used for 38400 baud and +above. This is useful for X-terms and other console ttys which really +aren't going over a serial line. +
+ +* beep
+Enable beeps when edit commands return errors, for example when the cursor +goes past extremes. +
+ +* break_links
+When enabled, JOE first deletes the file before +writing it in order to break hard-links and symbolic-links. +
+ +* break_hardlinks
+When enabled, and the file is +not a symbolic links, JOE first deletes the file before +writing it in order to break hard-links. +
+ +* brpaste
+When JOE starts, send command to the terminal emulator that +enables "bracketed paste mode" (but only if the terminal +seems to have the ANSI command set). In this mode, text +pasted into the window is bracketed with ESC \[ 2 0 0 ~ and +ESC \[ 2 0 1 ~. +
+ +* colors __scheme__
+Sets the color scheme. +
+ +* columns nnn
+Set number of columns in terminal emulator (in case +termcap entry is wrong). This is only useful on old system which don't have +the "get window size" ioctl. +
+ +* csmode
+Enable continued search mode: Successive +__^K F__s repeat the current search instead of prompting for a new one. +
+ +* dopadding
+Enable JOE to send padding NULs to the terminal (for very old terminals). +
+ +* exask
+When set, __^K X__ prompts for a new name before saving the file. +
+ +* floatmouse
+When set, mouse clicks can position the cursor +beyond the ends of lines. +
+ +* guess_crlf
+When set, JOE tries to guess the file format +MS-DOS or UNIX. +
+ +* guess_indent
+When set, JOE tries to guess the indentation character and indentation +step based on the contents of the file. The algorithm is to find the +greatest common factor of the three most common indentations found in the +file. +
+ +* guess_non_utf8
+When set, enable guessing of non-UTF-8 files +in UTF-8 locales. +
+ +* guess_utf8
+When set, enable guessing of UTF-8 files in +non-UTF-8 locales. +
+ +* guess_utf16
+When set, enable guessing of UTF-16 files. If a UTF-16BE or UTF-16LE file +is detected, it is converted to UTF-8 during load, and converted back to +UTF-16 during save. +
+ +* helpon
+When set, start off with the on-line help enabled. +
+ +* help_is_utf8
+When set, the help text in the joerc file is +assumed to be UTF-8. +
+ +* hiline
+When set, the current line is highlighted. The current color scheme must +support this. +
+ +* icase
+Search is case insensitive by default when set. +
+ +* joe_state
+Enable reading and writing of ~/.joe_state file +
+ +* joexterm
+Set this if xterm was configured with --paste64 +option for better mouse support. +
+ +* keepup
+The column number on the status line is updated constantly when +this is set, otherwise it is updated only once a second. +
+ +* language __language__
+Sets language for aspell. +
+ +* lightoff
+Automatically turn off __^K B__ __^K K__ highlighting after a +block operation. +
+ +* lines nnn
+Set number of lines in terminal emulator (in case termcap entry is wrong). +This is only useful on old system which don't have the "get window size" +ioctl. +
+ +* marking
+Enable marking mode: highlights between __^K B__ and cursor. +
+ +* menu_above
+Put menus above prompt instead of below them. +
+ +* menu_explorer
+Stay in menu when a directory is selected (otherwise the directory is added +to the path and the cursor jumps back to the prompt). +
+ +* menu_jump
+Jump into the file selection menu when __Tab__ __Tab__ is hit. +
+ +* mid
+If this option is set and the cursor moves off the window, the window will +be scrolled so that the cursor is in the center. This option is forced on +slow terminals which don't have scrolling commands. +
+ +* left nn
+This sets the number of columns the screen scrolls to the left when cursor +moves past the left edge or when the crawll command is issued. If nn is +negative, then it's the fraction of the screen to scroll. For example, -2 +means scroll 1/2 the screen. +
+ +* right nn
+This sets the number of columns the screen scrolls to the right when cursor +moves past the right edge or when the crawlr command is issued. If nn is +negative, then it's the fraction of the screen to scroll. For example, -3 +means scroll 1/3 the screen. +
+ +* mouse
+Enable xterm mouse support. +
+ +* nobackups
+Disable backup files. +
+ +* nocurdir
+Disable current-directory prefix in prompts. +
+ +* noexmsg
+Disable exiting message ("File not changed so no update needed") +
+ +* nolinefeeds
+Disable sending linefeeds to +preserve screen history in terminal emulator's scroll-back buffer (only +relevant when notite mode is enabled). +
+ +* nolocks
+Disable EMACS compatible file locks. +
+ +* nomodcheck
+Disable periodic file modification check. +
+ +* nonotice
+This option prevents the copyright notice from being displayed when the +editor starts. +
+ +* nosta
+This option eliminates the top-most status line. It's nice for when you +only want to see your text on the screen or if you're using a vt52. +
+ +* notagsmenu
+Disable selection menu for tags search with multiple results. +
+ +* notite
+Disable ti and te termcap sequences which are usually +set up to save and restore the terminal screen contents when JOE starts and +exits. +
+ +* pastehack
+If keyboard input comes in as one block assume it's a mouse +paste and disable autoindent and wordwrap. +
+ +* noxon
+Disable __^S__ and __^Q__ flow control, possibly allowing __^S__ and __^Q__ to be used as +editor keys. +
+ +* orphan
+Orphan extra files given on the command line instead of creating windows for +them (the files are loaded, but you need to use switch-buffer commands to +access them). +
+ +* pg nnn
+Set number of lines to keep during Page Up and Page Down (use -1 for 1/2 +window size). +
+ +* regex
+Use standard regular expression syntax by default, instead of the JOE syntax +(where special characters have their meaning only when preceded with +backslash). +
+ +* restore
+Set to have cursor positions restored to last positions of previously edited +files. +
+ +* rtbutton
+Swap left and right mouse buttons. +
+ +* search_prompting
+Show previous search string in search command (like in PICO). +
+ +* skiptop nnn
+When set to N, the first N lines of the terminal screen are not used by JOE +and are instead left with their original contents. This is useful for +programs which call JOE to leave a message for the user. +
+ +* square
+Enable rectangular block mode. +
+ +* transpose
+Transpose rows with columns in all menus. +
+ +* title
+Display context (titles) in status line. When enabled this shows the first +line of the function that the cursor is in on the status line. The syntax +file context.jsf identifies which lines are title lines. +
+ +* type
+Select file type, overriding the automatically determined type. The file +types are defined in the __ftyperc__ file. +
+ +* undo_keep nnn
+Sets number of undo records to keep (0 means infinite). +
+ +* usetabs
+Set to allow rectangular block operations to use +tabs. +
+ +* wrap
+Enable search to wrap to beginning of file. +
+ +The following local options may be specified on the command line: + +* +nnn
+The cursor starts on the specified line. +
+ +* autoindent
+Enable auto-indent mode. When you hit __Enter__ on an indented line, the +indentation is duplicated onto the new line. +
+ +* c_comment
+Enable __^G__ skipping of C-style comments /* ... */ +
+ +* cpara __characters__
+Sets list of characters which can indent paragraphs. +
+ +* cnotpara __characters__
+Sets list of characters which begin lines which are definitely not part of +paragraphs. +
+ +* cpp_comment
+Enable __^G__ skipping of C++-style comments // ... +
+ +* crlf
+JOE uses CR-LF as the end of line sequence instead of just LF. This is for +editing MS-DOS or VMS files. +
+ +* encoding __encoding__
+Set file encoding (like utf-8 or 8859-1). +
+ +* flowed
+Set to force an extra space after each line of a paragraph but the last. +
+ +* force
+When set, a final newline is appended to the file if +there isn't one when the file is saved. +
+ +* french
+When set, only one space is inserted after periods in paragraph reformats +instead of two. +
+ +* hex
+Enable hex-dump mode. +
+ +* highlight
+Enable syntax highlighting. +
+ +* highlighter_context
+Enable use of syntax file to identify comments and strings which should be +skipped over during __^G__ matching. +
+ +* indentc nnn
+Sets the indentation character for shift left and shift right (__^K ,__ and +__^K .__). Use 32 for __Space__, 9 for __Tab__. +
+ +* indentfirst
+When set, the smart home key jumps to the indentation point first, otherwise +it jumps to column 1 first. +
+ +* istep nnn
+Sets indentation step. +
+ +* linums
+Enable line number display. +
+ +* lmargin
+Set left margin. +
+ +* lmsg
+Define left-side status bar message. +
+ +* overwrite
+Enable overtype mode. Typing overwrites existing characters instead of +inserting before them. +
+ +* picture
+Enable "picture" mode- allows cursor to go past ends of lines. +
+ +* pound_comment
+__^G__ ignores # ... comments. +
+ +* purify
+Fix indentation if necessary before shifting or smart backspace. For +example, if indentation uses a mix of tabs and spaces, and indentc is +space, then indentation will be converted to all spaces before the shifting +operation. +
+ +* rdonly
+Set read-only mode. +
+ +* rmargin nnn
+Set right margin. +
+ +* rmsg __string__
+Define right-side status bar message. +
+ +* semi_comment
+__^G__ ignores ; ... comments. +
+ +* single_quoted
+__^G__ ignores '...' +
+ +* smartbacks
+Enable smart backspace and tab. When this mode is set backspace and tab +indent or unindent based on the values of the istep and indentc options. +
+ +* smarthome
+Home key first moves cursor to beginning of line, then if hit again, to +the first non-blank character. +
+ +* smsg __string__
+Define status command format when cursor is on a character. +
+ +* spaces
+Insert spaces when __Tab__ key is hit. +
+ +* syntax __syntax__
+Set syntax for syntax highlighting. +
+ +* tab nnn
+Set tab stop width. +
+ +* text_delimiters __word delimiter list__
+Give list of word delimiters which __^G__ will step through. + +For example, "begin=end:if=elif=else=endif" means that __^G__ will jump +between the matching if, elif, else and endif. + +* vhdl_comment
+__^G__ ignores -- ... comments +
+ +* wordwrap
+JOE wraps the previous word when you type past the right margin. +
+ +* zmsg __string__
+Define status command format when cursor is at end of file. +
+ +* xmsg __string__
+Define startup message (usually the copyright notice). +
+ +* aborthint __string__
+Give the key sequence to show in prompts for abort (usually ^C). +
+ +* helphint __string__
+Give the key sequence to show in prompts for help (usually ^K H). +
+ +### Colors and attributes + +Combine attributes and up to one foreground color and one background color +to create arguments for color options like text_color. For example: +bold+bg_green+blue + +* Attributes: bold, inverse, blink, dim, underline, italic, stricken (strike out) and dunderline (double-underline) + +* Foreground colors: white, cyan, magenta, blue, yellow, green, red, or black + +* Background colors: bg_white, bg_cyan, bg_magenta, bg_blue, bg_yellow, bg_green, bg_red or bg_black + +With a 16 color or 256 color terminal emulator (export TERM=xterm-16color), these +brighter than normal colors become available: + +> Note that you need an xterm which was compiled to support 16 or 256 colors +> and a matching termcap/terminfo entry for it. + +* Foreground: WHITE, CYAN, MAGENTA, BLUE, YELLOW, GREEN, RED or BLACK + +* Background: bg_WHITE, bg_CYAN, bg_MAGENTA, bg_BLUE, bg_YELLOW, bg_GREEN, bg_RED or bg_BLACK + +With a 256 color terminal emulator (export TERM=xterm-256color), these become available: + +> Note that you need an xterm which was compiled to support 256 colors and a +> matching termcap/terminfo entry for it. + +* fg_RGB and bg_RGB, where R, G and B rand from 0 - 5. So: fg_500 is bright red. + +* fg_NN and bg_NN give shades of grey, where the intensity, NN, ranges from 0 - 23. + +### Status line definition strings + +-lmsg defines the left-justified string and -rmsg defines the +right-justified string. The first character of -rmsg is the background fill +character. + +-smsg defines the status command (__^K Space__). -zmsg defines it when the cursor +is at the end of the file. The last character of smsg or zmsg is the fill character. + +The following escape sequences can be used in these strings: + + %t 12 hour time + %u 24 hour time + %T O for overtype mode, I for insert mode + %W W if wordwrap is enabled + %I A if autoindent is enabled + %X Rectangle mode indicator + %n File name + %m '(Modified)' if file has been changed + %* '*' if file has been changed + %R Read-only indicator + %r Row (line) number + %c Column number + %o Byte offset into file + %O Byte offset into file in hex + %a Ascii value of character under cursor + %A Ascii value of character under cursor in hex + %w Width of character under cursor + %p Percent of file cursor is at + %l No. lines in file + %k Entered prefix keys + %S '*SHELL*' if there is a shell running in window + %M Macro recording message + %y Syntax + %e Encoding + %x Context (first non-indented line going backwards) + %dd day + %dm month + %dY year + %Ename% value of environment variable + %Tname% value of option (ON or OFF for Boolean options) + +These formatting escape sequences may also be given: + + \i Inverse + \u Underline + \b Bold + \d Dim + \f Blink + \l Italic + \s Strikeout + \z Double underline +
+ + +## Basic Editing + +When you type characters into the editor, they are normally inserted into +the file being edited (or appended to the file if the cursor is at the end +of the file). This is the normal operating mode of the editor. If you want +to replace some existing text, you have to delete the old text before or +after you type in the replacement text. The __Backspace__ key can be used +for deleting text: move the cursor to right after the text you want to +delete and hit __Backspace__ a number of times. + +Hit the __Enter__ or __Return__ key to insert a line-break. For +example, if the cursor was in the middle of a line and you hit __Enter__, +the line would be split into two lines with the cursor appearing at the +beginning of the second line. Hit __Backspace__ at the beginning of a +line to eliminate a line-break. + +Use the arrow keys to move around the file. If your keyboard doesn't have +arrow keys (or if they don't work for some reason), use __^F__ to move +forwards (right), __^B__ to move backwards (left), __^P__ to move to the +previous line (up), and __^N__ to move to the next line (down). The right +and left arrow keys simply move forwards or backwards one character at a +time through the text: if you're at the beginning of a line and +you press left-arrow, you will end up at the end of the previous line. The +up and down arrow keys move forwards and backwards by enough characters so +that the cursor appears in the same column that it was in on the original +line. + +If you want to indent the text you enter, you can use the __Tab__ key. +This inserts a special control character which makes the characters which +follow it begin at the next tab stop. Tab stops normally occur every 8 +columns, but this can be changed with the __^T D__ command. PASCAL and C +programmers often set tab stops on every 4 columns. + +If for some reason your terminal screen gets messed up (for example, if +you receive a mail notice from biff), you can have the editor refresh the +screen by hitting __^R__. + +There are many other keys for deleting text and moving around the file. For +example, hit __^D__ to delete the character the cursor is on instead of +deleting backwards like __Backspace__. __^D__ will also delete a +line-break if the cursor is at the end of a line. Type __^Y__ to delete +the entire line the cursor is on or __^J__ to delete just from the cursor +to the end of the line. + +Hit __^A__ to move the cursor to the beginning of the line it's on. Hit +__^E__ to move the cursor to the end of the line. Hit __^U__ or +__^V__ for scrolling the cursor up or down 1/2 a screen's worth. +"Scrolling" means that the text on the screen moves, but the cursor stays at +the same place relative to the screen. Hit __^K U__ or __^K V__ to move +the cursor to the beginning or the end of the file. Look at the help +screens in the editor to find even more delete and movement commands. + +If you make a mistake, you can hit __^\___ to "undo" it. On most keyboards +you hit just __^-__ to get __^\___, but on some you might have to hold +both the __Shift__ and __Control__ keys down at the same time to get it. +If you "undo" too much, you can "redo" the changes back into existence by +hitting __^^__ (type this with just __^6__ on most keyboards). + +### Cursor position history + +If you were editing in one place within the file, and you then temporarily +had to look or edit some other place within the file, you can get back to +the original place by hitting __^K -__. This command actually returns you +to the last place you made a change in the file. You can step through a +history of places with __^K -__ and __^K =__, in the same way you can +step through the history of changes with the "undo" and "redo" commands. + +### Save and exit + +When you are done editing the file, hit __^K X__ to exit the editor. You +will be prompted for a file name if you hadn't already named the file you +were editing. + +When you edit a file, you actually edit only a copy of the file. So if you +decide that you don't want the changes you made to a file during a +particular edit session, you can hit __^C__ to exit the editor without +saving them. + +If you edit a file and save the changes, a backup copy of that file is +created in the current directory, with a __~__ appended to the name, which +contains the original version of the file. + +### File operations + + +You can hit __^K D__ to save the current file (possibly under a different +name from what the file was called originally). After the file is saved, +you can hit __^K E__ to edit a different file. + +If you want to save only a selected section of the file, see the section on +[Blocks](#blocks) below. + +If you want to include another file in the file you're editing, use __^K +R__ to insert it. + + +### Filenames + +Wherever JOE expects you to enter a file name, whether on the command line +or in prompts within the editor, you may also type: + +* !command + +To read or write data to or from a shell command. For example, +use __joe '!ls'__ to get a copy of your directory listing to edit or from +within the editor use __^K D !mail jhallen@world.std.com__ to send the +file being edited to me. + +* >>filename + +Use this to have JOE append the edited text to the end of the file +"filename." + +* filename,START,SIZE + +Use this to access a fixed section of a file or device. __START__ and +__SIZE__ may be entered in decimal (ex.: 123) octal (ex.: 0777) or +hexadecimal (ex.: 0xFF). For example, use __joe /dev/fd0,508,2__ to edit +bytes 508 and 509 of the first floppy drive in Linux. + +* - + +Use this to get input from the standard input or to write output to the +standard output. For example, you can put JOE in a pipe of commands: +__quota -v | joe | mail root__, if you want to complain about your low +quota. + +### Using JOE in a shell script + +JOE used to use /dev/tty to access the terminal. This caused a problem with +idle-session killers (they would kill JOE because the real tty device was +not being accessed for a long time), so now JOE only uses /dev/tty if you +need to pipe a file into JOE, as in: + + echo "hi" | joe + +If you want to use JOE in a shell script which has its stdin/stdout +redirected, but you do not need to pipe to it, you should simply redirect +JOE's stdin/stdout to /dev/tty: + + joe filename /dev/tty + + +

+ +### Word wrap and formatting + +If you type past the right edge of the screen in a C or PASCAL language +file, the screen will scroll to the right to follow the cursor. If you type +past the right edge of the screen in a normal file (one whose name doesn't +end in .c, .h or .p), JOE will automatically wrap the last word onto the +next line so that you don't have to hit __Enter__. This is called +word-wrap mode. Word-wrap can be turned on or off with the __^T W__ +command. JOE's initialization file is usually set up so that this mode is +automatically turned on for all non-program files. See the section below on +the [joerc](#joerc) file to change this and other defaults. + +Aside for Word-wrap mode, JOE does not automatically keep paragraphs +formatted like some word-processors. Instead, if you need a paragraph to be +reformatted, hit __^K J__. This command "fills in" the paragraph that the +cursor is in, fitting as many words in a line as is possible. A paragraph, +in this case, is a block of text separated above and below by a blank line. + +The margins which JOE uses for paragraph formatting and word-wrap can be set +with the __^T L__ and __^T R__ commands. If the left margin is set to +a value other than 1, then when you start typing at the beginning of a line, +the cursor will immediately jump to the left margin. + +There are a number of options which control the paragraph reformatter and +word wrapper: + +* The __cpara__ option provides a list of characters which can indent a + paragraph. For example, in e-mail quoted matter is indicated by __\>__ + at the beginnings of line, so this character should be in the cpara list. + +* The __cnotpara__ option provides a list of characters which, if they are + the first non-whitespace character of a line, indicate that the line is not + to be included as part of a paragraph for formatting. For example, lines + beginning with '.' in nroff can not be paragraph lines. + +* Autoindent mode affects the formatter. If autoindent is disabled, only + the first line will be indented. If autoindent is enabled, the entire + paragraph is indented. + +* __french__ determines how many spaces are inserted after periods. + +* When __flowed__ is enabled, a space is inserted after each but the + last line of the paragraph. This indicates that the lines belong together + as a single paragraph in some programs. + +* When __overtype__ is enabled, the word wrapper will not insert lines. + +### Centering + +If you want to center a line within the margins, use the __^K A__ +command. + +### Spell checker + +Hit __Esc N__ to check the spelling of the word the cursor is on using the +aspell program (or ispell program if you modify the joerc file). Hit +__Esc L__ to check the highlighted block or the entire file if no block is +highlighted. + +JOE passes the language and character encoding to the spell checker. To +change the language, hit __^T V__. For example, use en_US for English. + +### Overtype mode + +Sometimes it's tiresome to have to delete old text before or after you +insert new text. This happens, for example, when you are changing a table +and you want to maintain the column position of the right side of the table. +When this occurs, you can put the editor in overtype mode with __^T T__. +When the editor is in this mode, the characters you type in replace existing +characters, in the way an idealized typewriter would. Also, __Backspace__ +simply moves left instead of deleting the character to the left, when it's +not at the end or beginning of a line. Overtype mode is not the natural +way of dealing with text electronically, so you should go back to +insert-mode as soon as possible by typing __^T T__ again. + +If you need to insert while you're in overtype mode, hit __^@__. This +inserts a single __Space__ into the text. + +### Control and Meta characters + +Each character is represented by a number. For example, the number for 'A' +is 65 and the number for '1' is 49. All of the characters which you +normally see have numbers in the range of 32 - 126 (this particular +arbitrary assignment between characters and numbers is called the ASCII +character set). The numbers outside of this range, from 0 to 255, aren't +usually displayed, but sometimes have other special meanings. The number +10, for example, is used for the line-breaks. You can enter these special, +non-displayed __control characters__ by first hitting __^Q__ and then +hitting a character in the range __@ A B C ... X Y Z [ ^ ] \\ \___ to get +the number 0 - 31, and ? to get 127. For example, if you hit __^Q J__, +you'll insert a line-break character, or if you hit __^Q I__, you'll insert +a __Tab__ character (which does the same thing the __Tab__ key does). A useful +control character to enter is 12 (__^Q L__), which causes most printers to +advance to the top of the page. You'll notice that JOE displays this +character as an underlined L. You can enter the characters above 127, the +__meta characters__, by first hitting __^\\__. This adds 128 +to the next (possibly control) character entered. JOE displays characters +above 128 in inverse-video. Some foreign languages, which have more letters +than English, use the meta characters for the rest of their alphabet. You +have to put the editor in __asis__ mode to have these +passed untranslated to the terminal. + +__Note:__ JOE now normally passes all 8-bits to the terminal unless the +locale is set to C or POSIX. If the locale is C or POSIX, then the __asis__ +flag determines if __meta characters__ are shown in inverse video or passed +directly to the terminal. + +__Note:__ In older version of JOE, you had to use __Esc '__ to enter control +characters. + +## Character sets and UTF-8 + +JOE natively handles two classes of character sets: UTF-8 and byte coded +(like ISO-8859-1). For these character sets, the file is loaded as-is into +memory, and is exactly preserved during save, even if it contains UTF-8 +coding errors. + +It can not yet natively handle other major classes such as UTF-16 or GB2312. +There are other restrictions: character sets must use LF (0x0A) or CR-LF +(0x0D - 0x0A) as line terminators, space must be 0x20 and tab must be 0x09. +Basically, the files must be UNIX or MS-DOS compatible text files. + +This means EBCDIC will not work properly (but you would need to handle fixed +record length lines anyway) and character sets which use CR terminated lines +(MACs) will not yet work. + +JOE now supports UTF-16 (both big endian and little endian). It supports +UTF-16 by converting to UTF-8 during load, and converting back to UTF-16 +during save. + +The terminal and the file can have different encodings. JOE will translate +between the two. Currently, one of the two must be UTF-8 for translation to +work. + +The character set for the terminal and the default character set assumed for +files is determined by the 'LC_ALL' environment variable (and if that's not +set, LC_CTYPE and LANG are also checked). + +For example, if LC_ALL is set to: + + de_DE + +Then the character set will be ISO-8859-1. + +If LC_ALL is set to: + + de_DE.UTF-8 + +The character set will be UTF-8. + +Hit __^T E__ to change the coding for the file. Hit __Tab__ __Tab__ at +this prompt to get a list of available codings. There are a number of +built-in character sets, plus you can install character sets in the +~/.joe/charmaps and /usr/share/joe/charmaps directories. + +Check: /usr/share/i18n/charmaps for example character set files. Only +byte oriented character sets will work. Also, the file should not be +gzipped (all of the charmap files in /usr/share/i18n/charmaps on my computer +were compressed). The parser is very bad, so basically the file has to look +exactly like the example one in /usr/share/joe/charmaps. + +You can hit __^K Space__ to see the current character set. + +You can hit __^Q x__ to enter a Unicode character if the file coding is +UTF-8. + +## Prompts + +Most prompts record a history of the responses you give them. You can hit +up and down arrow to step through these histories. + +Prompts are actually single line windows with no status line, so you can use +any editing command that you normally use on text within the prompts. The +prompt history is actually just other lines of the same "prompt file". Thus +you can can search backwards though the prompt history with the normal __^K +F__ command if you want. + +Since prompts are windows, you can also switch out of them with __^K P__ +and __^K N__. + +### Completion and selection menus + +You can hit __Tab__ in just about any prompt to request JOE to complete the +word you are typing. If JOE beeps, there are either no completions or many. +As with the "bash" shell, hit __Tab__ twice to bring up a list of all the +possibilities. This list is actually a menu, but by default, the cursor +does not jump into it since it is usually easier to just type in your +selection. You can, however, jump into the menu window with __^K P__ (move to +previous window) and use the arrow keys and <Enter> to make your +selection. Also in a menu, you can hit the first letter of any of the items +to make the cursor jump directly to it. The __^T__ option menu works like +this. + +If the menu is too large to fit in the window, you can hit Page Up and +Page Down to scroll it (even if you have not jumped into it). + +__Tab__ completion works in the search and replace prompts as well. In this +case, JOE tries to complete the word based on the contents of the buffer. +If you need search for the __Tab__ character itself, you can enter it with __^Q +Tab__. + +Also, you can hit __Esc Enter__ in a text window to request JOE to +complete the word you are typing. As with the search prompt, JOE tries to +complete the word based on the contents of the buffer. It will bring up a +menu of possibilities if you hit __Esc Enter__ twice. + + +## Where am I? + + +Hit __^K Space__ to have JOE report the line number, column number, and +byte number on the last line of the screen. The number associated with the +character the cursor is on (its ASCII code) is also shown. You can have the +line number and/or column number always displayed on the status line by +placing the appropriate escape sequences in the status line setup +strings. Edit the joerc file for details. + +## What if I hit __^K__ by accident? + +Hit the space bar. This runs an innocuous command (it shows the line +number on the status bar). + +## Temporarily suspending the editor + + +If you need to temporarily stop the editor and go back to the shell, hit +__^K Z__. You might want to do this to stop whatever you're editing and +answer an e-mail message or read this man page, for example. You have to +type __fg__ or __exit__ (you'll be told which when you hit __^K Z__) +to return to the editor. + +## Searching for text + + +Hit __^K F__ to have the editor search forwards or backwards for a text +fragment (__string__) for you. You will be prompted for the text to +search for. After you hit __Enter__, you are prompted to enter options. +You can just hit __Enter__ again to have the editor immediately search +forwards for the text, or you can enter one or more of these options: + +* __b__
+ +Search backwards instead of forwards. + +* __i__
+ +Treat uppercase and lower case letters as the same when searching. Normally +uppercase and lowercase letters are considered to be different. + +* __nnn__
+ +(where __nnn__ is a number) If you enter a number, JOE searches for the +Nth occurrence of the text. This is useful for going to specific places in +files structured in some regular manner. + +* __r__
+ +Replace text. If you enter the __r__ option, then you will be further +prompted for replacement text. Each time the editor finds the search text, +you will be prompted as to whether you want to replace the found search text +with the replacement text. You hit: __y__ to replace the text and then +find the next occurrence, __n__ to not replace this text, but to then find +the next occurrence, __r__ to replace all of the remaining occurrences of +the search text in the remainder of the file without asking for confirmation +(subject to the __nnn__ option above), or __^C__ to stop searching and +replacing. + +You can also hit __B__ or __Backspace__ to back up to the previously +found text (if it had been replaced, the replacement is undone). + +* __a__
+ +The search covers all loaded buffers. So to replace all instances of "foo" +with "bar" in all .c files in the current directory: + + joe *.c + ^K F + foo + ra + bar + +* __e__
+ +The search covers all files in the grep or make error list. You can use a +UNIX command to generate a list of files and search and replace through the +list. So to replace all instances of "foo" with "bar" in all .c files which +begin with f. You can also use "ls" and "find" instead of grep to create +the file list. + + + Esc G + grep -n foo f*.c + ^K F + foo + re + bar + +* __x__
+ +JOE will use the standard syntax for regular expressions if this option is +given. In the standard syntax, these characters have their special +meanings directly, and do not have to be escaped with backslash: ., \*, \+, ?, +\{, \}, (, ), |, ^, $ and \[. + +* __y__
+ +JOE will use the JOE syntax for regular expressions instead of the standard +syntax. This overrides the "-regex" option. + +* __v__
+ +JOE will send debug information about the regular expression to the startup +log. The log can be viewed with the showlog command. + +You can hit __^L__ to repeat the previous search. + +You can hit __^K H__ at the search and replace options prompt to bring up a list +of all search and replace options. + +### Regular Expressions + +A number of special character sequences may be entered as search +text: + +* __\\\*__
+ +This finds zero or more of the item to the left. For example, if you give +__AB\\\*C__ as the search text, JOE will try to find an A followed by any +number of Bs, and then a C. + +* __\\\+__
+ +This finds one or more of the item to the left. For example, if you give +__AB\\\+C__ as the search text, JOE will try to find an A followed by one +or more Bs, and then a C. + +* __\\?__
+ +This indicates that the item to the left is optional. For example, if you give +__AB\\?C__ as the search text, JOE will find AC or ABC. + +* __\\\{min,max\}__
+ +This indicates that JOE should try to find a string with a specific number +of occurrences of the item to the left. For example, __AX\\\{2,5\}B__ will +match these strings: AXXB, AXXXB, AXXXXB, and AXXXXXB. Min can be left out +to indicate 0 occurrences. Max (and the comma) can be left out to indicate +any number of occurrences. + +* __\\.__
+ +This finds exactly one character. For example, if you give __A\\.B__ as +the search text, JOE will find AXB, but not AB or AXXB. + +* __\\!__
+ +This works like __\.__, but matches a balanced C-language expression. +For example, if you search for __malloc(\\!\\\*)__, then JOE will find all +function calls to __malloc__, even if there was a __)__ within the +parenthesis. + +* __\\|__
+ +This finds the item on the left or the item on the right. For example, if +you give __A\\|B__ as the search text, JOE will try to find either an A or +a B. + +* __\\( \\)__
+ +Use these to group characters together. For example, if you search for +__\\(foo\\)\\\+__, then JOE will find strings like "foo", and "foofoofoo". + +* __\^ \$__
+ +These match the beginnings and endings of lines. For example, if you give +__\^test\$__, then JOE with find __test__ on a line by itself. + +* __\< \\\>__
+ +These match the beginnings and endings of words. For example, if you give +__\__, then JOE will find the word "is" but will not find the "is" in +"this". + +* __\\\[...]__
+ +This matches any single character which appears within the brackets. For +example, if __\\\[Tt]his__ is entered as the search string, then JOE finds +both __This__ and __this__. Ranges of characters can be entered within +the brackets. For example, __\\\[A-Z]__ finds any uppercase letter. If +the first character given in the brackets is __^__, then JOE tries to find +any character not given in the the brackets. To include __-__ itself, include +it as the last or first character (possibly after __^__). + +* __\\\\__
+ +Matches a single \\. + +* __\n__
+ +This finds the special end-of-line or line-break character. + + +A number of special character sequences may also be given in the replacement +string: + +* __\\&__
+ +This gets replaced by the text which matched the search string. For +example, if the search string was __\<\\\*\\\>__, which matches words, and +you give __"\\&"__, then JOE will put quote marks around words. + +* __\1 - \9__
+ +These get replaced with the text which matched the Nth grouping; the text +within the Nth set of \\( \\). + +* __\\l, \\u__
+ +Convert the next character of the replacement text to lowercase or uppercase. + +* __\\L, \\U__
+ +Convert all following replacement text to lowercase or uppercase. Conversion +stops when \\E is encountered. + +* __\\\\__
+ +Use this if you need to put a __\\__ in the replacement string. + +* __\n__
+ +Use this if you need to put a line-break in the replacement string. + +Some examples: + +Suppose you have a list of addresses, each on a separate line, which starts +with "Address:" and has each element separated by commas. Like so: + +Address: S. Holmes, 221b Baker St., London, England + +If you wanted to rearrange the list, to get the country first, then the +city, then the person's name, and then the address, you could do this: + +Type __^K F__ to start the search, and type: + +__Address:\\(\\.\\\*\\),\\(\\.\\\*\\),\\(\\.\\\*\\),\\(\\.\\\*\\)\$__ + +to match "Address:", the four comma-separated elements, and then the end of +the line. When asked for options, you would type __r__ to replace the +string, and then type: + +__Address:\4,\3,\1,\2__ + +To shuffle the information the way you want it. After hitting return, the +search would begin, and the sample line would be changed to: + +Address: England, London, S. Holmes, 221b Baker St. + + +### Escape sequences + +JOE understands the following escape sequences withing search and +replacement strings: + +* \\x{10ffff}
+ +This matches a specific Unicode code point given in hexadecimal. + +* \\xFF
+ +This matches a specific character specified in hexadecimal. + +* \\377
+ +This matches a specific character specified in octal. + +* \\p{Ll}
+ +This matches any character in the named Unicode category or block. + +The block names, such as "Latin-1 Supplement" or "Arabic" can be found here: + +[Unicode Blocks](ftp://ftp.unicode.org/Public/8.0.0/ucd/Blocks.txt) + +The category names such as "Ll" can be found here: + +[Unicode Categories](ftp://ftp.unicode.org/Public/5.1.0/ucd/UCD.html#General_Category_Values) + +Note that a single letter matches all of the category names which start with +that letter. For example, \\p{N} (any number) include \\p{Nd} (decimal +digit), \\p{Nl} (letter number) and \\p{No} (other number). + +* \\d
+ +This matches any Unicode digit. This is the same as \\p{Nd}. + +* \\D
+ +This matches anything except for a Unicode digit. This is the same as +\\\[^\\p{Nd}]. + +* \\w
+ +This matches any word character. This is the same as +\\\[^\\p{C}\\p{P}\\p{Z}]. + +* \\W
+ +This matches anything except for a word character. This is the same +as \\\[\\p{C}\\p{P}\\p{Z}]. + + +* \\s
+ +This matches any space character. This is the same as +\\\[\\t\\r\\f\\n\\p{Z}]. + +* \\S
+ +This matches anything except for a spacing character. This is the +same as \\\[^\\t\\r\\f\\n\\p{Z}]. + + +* \\i
+ +This matches an identifier start character. This is the same as +\\\[\\p{L}\\p{Pc}\\p{Nl}]. + +* \\I
+ +This matches anything except for an identifier start character. This is the +same as \\\[^\\p{L}\\p{Pc}\\p{Nl}]. + +* \\c
+ +This matches an identifier continuation character. This is the same as +\\\[\\i\\p{Mn}\\p{Mc}\\p{Nd}\\x{200c}\\x{200d}]. + +* \\C
+ +This matches anything except for an identifier continuation character. This +is the same as \\\[^\\i\\p{Mn}\\p{Mc}\\p{Nd}\\x{200c}\\x{200d}]. + +* \\t Tab +* \\n Newline +* \\r Carriage return +* \\b Backspace +* \\a Alert +* \\f Formfeed +* \\e Escape +* \\\\ Backslash + +## Incremental search + +Use __Esc S__ to start an increment search forwards, or __Esc R__ to start +an incremental search backwards. As you type the search string, the cursor +will jump to the first text that matches the regular expression you have +entered so far. + +Hit __Esc S__ or __Esc R__ again to find the next occurrence of the text or +to switch the direction of the search. + +__^S__, __^\\__ and __^L__ have the same effect as __Esc S__. __^R__ has the same +effect as __Esc R__. These keys are to support JMACS. + +Hit __Backspace__ to undo the last incremental search action. The last +action could be a repeat of a previous search or the entering of a new +character. + +Use __^Q__ to insert control characters into the search text. Previously, +\` could also be used for this. + +Hit any other key to exit the increment search. + +## Goto matching delimiter + +Hit __^G__ to jump between matching delimiters. This works on both +character delimiters (like '(' and ')') and word delimiters for languages +like Pascal and Verilog which use "begin" and "end" to delimit blocks. It +also works for matching start and end tags in XML. If a word is not known, +__^G__ starts a search with the word moved into the search prompt. + +For __^G__ to work on word delimiters, the cursor must be positioned +on the first letter of the word. So in XML, if the cursor is on the < in +<foo>, it will jump to the >. But if it is one the 'f', it will +jump to the matching </foo>. Likewise, in C, __^G__ will jump between #if, #else +and #endif, but you need to position the cursor on the letter, +not the '#'. + +__^G__ is smart enough to skip delimiters found in quoted or +commented-out matter. You need to tell JOE how your language indicates +this: see the __ftyperc__ file for examples of how this is done. + +The are a number of options which control the behavior of __^G__. These +options control which kinds of comments __^G__ can skip over: + +* c_comment +* cpp_comment +* pount_comment +* semi_comment +* vhdl_comment + +These options determine which kinds of strings __^G__ can skip over: + +* single_quoted +* double_quoted + +This option allows an annotated syntax file to determine which text can be +counted as comments or strings which can be skipped over by __^G__: + +* highlighter_context + +This option enables the use of syntax files to identify comments and strings +which should be skipped over during __^G__ matching. The syntax file states +should be annotated with the __string__ and __comment__ keywords for this to +work. + +* text_delimiters + +This option provides a list of word delimiters to match. For example, +"begin=end:if=elif=else=endif" means that __^G__ will jump between the +matching if, elif, else and endif. It will also jump between begin and end. + +__^G__ has a built-in table for matching character delimiters- it knows that +__(__ goes with __)__. + +__^G__ has a built-in parser to handle start/end tag matching for XML. + + + +## Regions + +If you want to move, copy, save or delete a specific section of text, you +can do it with highlighted blocks. First, move the cursor to the start of +the section of text you want to work on, and press __^K B__. Then move +the cursor to the character just after the end of the text you want to +affect and press __^K K__. The text between the __^K B__ and __^K K__ +should become highlighted. Now you can move your cursor to someplace else +in your document and press __^K M__ to move the highlighted text there. +You can press __^K C__ to make a copy of the highlighted text and insert +it to where the cursor is positioned. __^K Y__ to deletes the highlighted +text. __^K W__, writes the highlighted text to a file. + +A very useful command is __^K /__, which filters a block of text through a +UNIX command. For example, if you select a list of words with __^K B__ +and __^K K__, and then type __^K / sort__, the list of words will be +sorted. Another useful UNIX command for __^K /__, is __tr__. If you +type __^K / tr a-z A-Z__, then all of the letters in the highlighted block +will be converted to uppercase. + +### How do I deselect a highlighted region? + +After you are finished with some region operations, you can just leave the +highlighting on if you don't mind it (but don't accidentally hit __^K Y__). +If it really bothers you, however, just hit __^K B ^K K__, to turn the +highlighting off. + +Beginning with JOE 4.2, you can hit __^C__ to cancel the region selection. + +### New ways of selecting regions + +The classic way is to hit __^K B__ at the beginning and __^K K__ at the +end. These set pointers called markb and markk. Once these are set you +can jump to markb with __Esc B__ and jump to markk with __Esc K__. + +New way: hit Ctrl-__Right Arrow__ to start selecting rightward. Each time +you hit Ctrl-__Right Arrow__, the block is extended one more to the right. +This uses a simple macro: "begin_marking,rtarw,toggle_marking". + +Unfortunately, there is no standard way to get the keysequence given by the +terminal emulator when you hit Ctrl-__Right Arrow__. Instead you have to +determine this sequence yourself and enter it directly in the joerc file. +Some examples are given for Xterm and gnome-terminal. Hit __^Q__ +Ctrl-__Right Arrow__ within JOE to have the sequence shown on your screen. +Note that Putty uses __Esc Esc \[ C__ which will not appear with __^Q +Right Arrow__ (also __Esc Esc__ is the set bookmark command, so you need to +unbind it to do this in Putty). + +Also you can hit Ctrl-__Delete__ to cut and Ctrl-__Insert__ to paste if the +sequence for these keys are known. + +The mouse can also be used to select text if mouse support is enabled in +JOE. + +## Indenting program blocks + +Auto-indent mode is toggled with the __^T I__ command. The __joerc__ file +is normally set up so that files with names ending with .p, .c or .h have +auto-indent mode enabled. When auto-indent mode is enabled and you hit +__Enter__, the cursor will be placed in the same column that the first +non-whitespace character was on in the original line. + +You can use the __^K ,__ and __^K .__ commands to shift a block of text to +the left or right. If no highlighting is set when you give these commands, +the program block (as indicated by indentation) that the cursor is located in +will be selected, and will be moved by subsequent __^K ,__ and __^K .__ +commands. + +The number of columns these commands shift by and the character used for +shifting can be set through the istep and indentc options. These options +are available in the __^T__ menu. Also, __^T =__ can be used to quickly +select from a number of common values for indentation step and character. + +JOE has a number of additional options related to indenting programs: + +* smartbacks
+Enable smart backspace and tab. When this mode is set __Backspace__ and __Tab__ +indent or unindent based on the values of the istep and indentc options. +
+ +* smarthome
+The __Home__ and __^A__ keys first move the cursor to the beginning of the +line, then if hit again, to the first non-blank character. +
+ +* indentfirst
+Smart home goes to first non-blank character first, instead of going +to the beginning of the line first. +
+ +* purify
+Fix indentation if necessary before shifting or smart backspace. For +example, if indentation uses a mix of tabs and spaces, and indentc is +space, then indentation will be converted to all spaces before the shifting +operation. +
+ +* guess_indent
+When set, JOE tries to guess the indentation character and indentation +step based on the contents of the file. The algorithm is to find the +greatest common factor of the three most common indentations found in the +file. +
+ +## Rectangle mode + +Type __^T X__ to have __^K B__ and __^K K__ select rectangular blocks +instead of stream-of-text blocks. This is also known as columnar mode. +This mode is useful for moving, copying, deleting or saving columns of text. +You can also filter columns of text with the __^K /__ command- if you want +to sort a column, for example. The insert file command, __^K R__ is also +affected. + +When rectangle mode is selected, overtype mode is also useful +(__^T T__). When overtype mode is selected, rectangles will replace +existing text instead of getting inserted before it. Also the delete block +command (__^K Y__) will clear the selected rectangle with __Spaces__ and __Tabs__ +instead of deleting it. Overtype mode is especially useful for the filter +block command (__^K /__), since it will maintain the original width of the +selected column. + +## Picture mode + +Use __^T P__ to enter or exit picture mode. Picture mode helps with ASCII +drawings. + +Picture mode controls how JOE handles the case where the cursor is past the +ends of lines. This happens when you use the up or down arrow keys to move +the cursor from the end of a long line to a short line. + +If you attempt to type a character in this case: + +If picture mode is off, the cursor will jump to the end of the line and +insert it there. + +If picture mode is on, the line is filled with spaces so that the character +can be inserted at the cursor position. + +## Windows + +You can edit more than one file at the same time or edit two or more +different places of the same file. To do this, hit __^K O__, to split the +screen into two windows. Use __^K P__ or __^K N__ to move the cursor +into the top window or the lower window. Use __^K E__ to edit a new +file in one of the windows. A window will go away when you save the file +with __^K X__ or abort the file with __^C__. If you abort a file which +exists in two windows, one of the window goes away, not the file. + +You can hit __^K O__ within a window to create even more windows. If you +have too many windows on the screen, but you don't want to eliminate them, +you can hit __^K I__. This will show only the window the cursor is in, or +if there was only one window on the screen to begin with, try to fit all +hidden windows on the screen. If there are more windows than can fit on +the screen, you can hit __^K N__ on the bottom-most window or __^K P__ +on the top-most window to get to them. + +If you gave more than one file name to JOE on the command line, each file +will be placed in a different window. + +You can change the height of the windows with the __^K G__ and __^K T__ +commands. + +### Windowing system model + +JOE has an unusual model for its windowing system. Basically you have a ring +of windows, but only a section of this ring may fit on the screen. The windows +not on the screen still exist, they are just scrolled off. When you hit +__^K N__ on the bottom window of the screen, it scrolls further windows from +the ring onto the screen, possibly letting the top window scroll out of +view. + +Native JOE tries to keep each loaded buffer in a window, so users can find +all of the buffers by scrolling through the windows. The __explode__ +command (__^K I__) either expands all windows to the size of the screen so +that only one window can fit on the screen, or shrinks them all as much as +possible to fit many on the screen. + +On the other hand, JOE supports "orphan" buffers- files loaded into the +editor, but which are not in a window. __^C__ normally closes a window and +discards the buffer that was in it. If you hit __^C__ on the last remaining +window, it will normally exit the editor. However, if there are orphan +buffers, __^C__ will instead load them into this final window to give you +a chance to explicitly discard them. If the __orphan__ option is given on +the command line, as in __joe -orphan *.c__, then JOE only loads the first +file into a window and leaves all the rest as orphans. + +__orphan__ also controls whether the edit command __^K E__ creates a new +window for a newly loaded file, or reuses the current window (orphaning its +previous occupant). + +The __bufed__ command prompts for a name of a buffer to switch into a window. +Its completion list will show all buffers, including orphans and buffers +which appear in other windows. __Esc V__ and __Esc U__ (__nbuf__ and +__pbuf__ commands) allow you to cycle through all buffers within a single +window. + +Windows maintain a stack of occupants to support the pop-up shell window +feature. When a pop-up window is dismissed, the previous buffer is returned +to the window. + +## Scratch buffers + +Scratch buffers are buffers which JOE does not worry about trying to +preserve. JOE will not ask to save modified scratch buffers. Pop-up shell +windows, the startup log and compile and grep message windows are scratch +buffers. You can create your own scratch buffer with the __scratch__ +command. + +The following commands load scratch buffers: + +* __showlog__ Show startup log +* __mwind__ Show message window (compile / grep messages from __Esc C__ and + __Esc G__ commands). + +## Keyboard macros + +Macros allow you to record a series of keystrokes and replay them with the +press of two keys. This is useful to automate repetitive tasks. To start a +macro recording, hit __^K \[__ followed by a number from 0 to 9. The +status line will display (Macro n recording...). Now, type in the series of +keystrokes that you want to be able to repeat. The commands you type will +have their usual effects. Hit __^K ]__ to stop recording the macro. Hit +__^K__ followed by the number you recorded the macro in to execute one +iteration of the key-strokes. + +For example, if you want to put "**" in front of a number of lines, you can +type: + +__^K \[ 0 ^A \*\* __ __^K ]__ + +Which starts the macro recording, moves the cursor to the beginning of the +line, inserts "\*\*", moves the cursor down one line, and then ends the +recording. Since we included the key-strokes needed to position the cursor +on the next line, we can repeatedly use this macro without having to move +the cursor ourselves, something you should always keep in mind when +recording a macro. + +### Keyboard macro subroutines + +If you find that the macro you are recording itself has a repeated set of +key-strokes in it, you can record a macro within the macro, as long as you +use a different macro number. Also you can execute previously recorded +macros from within new macros. + +### Query suspend + +If your macro includes a prompt for user input, and you want the user to +fill in the prompt every time the macro is executed, hit __^K ?__ at the +point in the macro recording where the user action is required. Keyboard +input will not be recorded at this point. When the user completes the +prompt, macro recording will continue. + +When the macro is executed, the macro player will pause at the point where +__^K ?__ was entered to allow user input. When the user completes the +prompt, the player continues with the rest of the macro. + +### Repeat + +You can use the repeat command, __^K \\__, to repeat a macro, or any other +edit command or even a normal character, a specified number of times. Hit +__^K \\__, type in the number of times you want the command repeated and +press __Enter__. The next edit command you now give will be repeated +that many times. +For example, to delete the next 20 lines of text, type: + +__^K \\ 20____^Y__ + +## Macros and commands + +A macro is a comma separated list of commands. When the macro is executed, +each command is executed until either the end of the list is reached, or one +of the commands fails (non-zero return value from the command). Failed +commands beep if you have beeps enabled (__^T B__). + +Hit __Esc D__ to insert the current set of keyboard macros as text into the +current buffer. For example, the "\*\*" insert macro above looks like this: + + home,"**",dnarw ^K 0 Macro 0 + +You could insert this into your .joerc file and change the key sequence (the +__K 0__) to something more permanent. + +### Define your own + +You can bind macros to key sequences or define your own named macros in the +joerc file. For example, this will define a macro called __foo__: + + :def foo eof,bol + +__foo__ will position the cursor at the beginning of the last line of the +file. __eof__ jumps to the end of the file. __bol__ jumps to the beginning +of a line. Once a macro has been named this way it will show up in the +completion list of the __Esc X__ command prompt. + +### Command prompt + +You can execute a macro directly by typing it into the command prompt. Hit +__Esc X__ to bring up the command prompt. Hit __Tab__ at this prompt for a +completion list of all available commands. + +Here is a [complete list of commands](#list). + +### Macro don't stop modifier + +Sometimes, you expect commands to sometimes fail, but want the rest of the +commands in the list to be executed anyway. To mark a command which is +allowed to fail, postfix it with '!'. For example, here a macro which hits +down page in the window above: + + prevw,pgdn!,nextw + +If prevw fails, the macro is aborted as usual. Even if pgdn fails (already +at end of buffer), nextw will be executed so that the cursor is returned to +the original window. + +### Macro repeat argument modifiers + +Repeat arguments can be specified with __^K \\__. When a command is executed +with a repeat argument, it is repeatedly executed the specified number of +times. If the repeat argument is negative, an opposite command (if one +exists) is executed instead. For example, if you repeat "rtarw" -3 times, +"ltarw" will be repeated 3 times. If a negative argument is given for a +command which does not have an opposite, the repeat argument is ignored. + +Normally, if a repeat argument is specified for a macro, the macro is simply +repeated the given number of times. If a negative argument is given, the +argument is ignored. + +Sometimes you want to allow negative arguments for macros and have their +behavior modified. To do this, postfix each command within the macro which +should be switched to its opposite for negative arguments with '-'. For +example, here is the page down other window macro: + + prevw,pgdn-!,nextw + +Now if you execute this with an argument of -2, it will be repeated twice, +but pgup will be executed instead of pgdn. (note that several postfix +modifiers can be placed after each command). + +Sometimes when a repeat argument is given to macro, you want only one of the +commands in the list to be repeated, not the entire macro. This can be +indicated as follows: + + prevw,pgdn#!,nextw + +If this is executed with an argument of 2, prevw is executed once, pgdn is +executed twice, and nextw is executed once. + +Finally, even more complex semantics can be expressed with the "if" command: + + if~,"arg<0",then, + ltarw, + else, + rtarw, + endif + +When the macro is executed, the "arg" math variable is set to the given +repeat argument. The "argset" variable is set to true if the user set an +argument, even if it's 1. If no argument was given, argset is false. + +If any command in the list is postfixed with ~ (if above), the macro is not +repeated, even if there is an argument. 'arg' is still set to the given +repeat count, however. + +### 'psh'/'query' interaction + +The 'psh' command saves the __^K B__ and __^K K__ positions on a stack. When the +macro completes, (or when the 'pop' command is called) the positions are +restored. + +The 'query' command suspends macro execution until the current dialog is +complete. It also suspends the automatic 'pop' which happens at the end +of a macro- so if the macro ends in a dialog you often want to call 'query' +to prevent the __^K B__ __^K K__ positions from being restored too early. + + + +## Tags search + +If you are editing a large C program with many source files, you can use the +__ctags__ program to generate a __tags__ file. This file contains a +list of program symbols and the files and positions where the symbols are +defined. + + +First, create the tags file with the "ctags" program. For example: + + ctags *.c *.h + +This will create a file called "tags" in the current directory. + +JOE looks for the "tags" file in the current directory. If there is none, +it will try to open the file specified by the TAGS environment variable. + +Paths in the tags file are always relative to location of the tags file +itself. + +The tags file contains a list of identifier definition locations in one of +these formats: + + identifier filename /search-expression/[;comments] + + identifier filename ?search-expression?[;comments] + + identifier filename line-number[;comments] + +Some versions of ctags include class-names in the identifiers: + + class::member + +In this case, JOE will match on any of these strings: + + member + ::member + class::member + +Some versions of ctags include a filename in the identifier: + + filename:identifier + +In this case JOE will only find the identifier if the buffer name matches +the filename. + +The search-expression is a vi regular expression, but JOE only supports the +following special characters: + + ^ at the beginning means expression starts at beginning of line + + $ at the end means expression ends at end of line + + \x quote x (suppress meaning of /, ?, ^ or $) + +Type __^K ;__ to bring up a tags search prompt. If the cursor had been on an +identifier, the prompt is pre-loaded with it. Tab completion works in this +prompt (it uses the tags file to find completions). + +When you hit __Enter__, the tags search commences: + +If there is one and only one match, JOE will jump directly to the +definition. + +If there are multiple matches, then the behavior is controlled by the +notagsmenu option. If notagsmenu is enabled JOE jumps to the first +definition. If you hit __^K ;__ again before hitting any other keys, JOE jumps +to the next definition, and so on. The "tagjump" command also performs this +function. + +If notagsmenu is disabled, JOE brings up a menu of all the matches. You +select the one you want and JOE jumps to it. If you hit __^K ;__ again before +hitting any other keys, the same menu re-appears with the cursor left in the +original location. + +You can hit __^K -__ to move the cursor back to the original location before the +tags search (often __^C__ will work as well). + +Since __^K ;__ loads the definition file into the current window, you +probably want to split the window first with __^K O__, to have both the +original file and the definition file loaded. + +## Calculator + +JOE has a built-in calculator which can be invoked with __Esc M__. + +### Math functions + +sin, cos, tan, exp, sqrt, cbrt, ln, log, +asin, acos, atan, sinh, cosh, tanh, asinh, acosh, +atanh, int, floor, ceil, abs, erf, erfc, j0, +j1, y0, y1 + +### Variables + +* e
+Set to 'e' +
+ +* pi
+Set to 'pi' +
+ +* top
+Set to line number of top window line +
+ +* lines
+Set to number of lines in file +
+ +* line
+Set to current line number +
+ +* col
+Set to current column number +
+ +* byte
+Set to current byte number +
+ +* size
+Set to buffer size +
+ +* height
+Set to window height +
+ +* width
+Set to window width +
+ +* char
+Set to ASCII val of character under cursor +
+ +* markv
+True if there is a valid block set (^KB ... ^KK) +
+ +* rdonly
+True if file is read-only +
+ +* arg
+Current repeat argument +
+ +* argset
+True if a repeat argument was given +
+ +* is_shell
+True if executed in an active shell window +
+ +* no_windows
+No. buffer windows on the screen +
+ +* ans
+Result of previous expression +
+ + +### Commands + +* hex
+Hex display mode +
+ +* dec
+Decimal display mode +
+ +* ins
+Insert 'ans' into buffer +
+ +* sum
+Sum of numbers in block +
+ +* cnt
+Count numbers in block +
+ +* avg
+Average value of numbers in block +
+ +* dev
+Standard deviation of numbers in block +
+ +* eval
+Evaluate math expressions in block (or whole file if no block set). +
+ +* joe(...)
+Execute a JOE macro (argument in same format as joerc file macros). Return value of JOE macro is returned (for macro success, return true (non-zero)). +
+ + +For example: + + joe(sys,"[ 1 == 1 ]",rtn) + +([ 1 == 1 ]) is a shell command. "[" is a synonym for +the "test" UNIX command. + +Returns true. + +Remember: argument for JOE macro command +"if" is a math expression. So for example, the +macro: + + if,"joe(sys,\"[ 1 == 1 ]\",rtn)",then,"TRUE",endif + +Types TRUE into the buffer. + +### Operators: + +* !x
+Logical not of x. +
+ +* x^y
+Raise x to power of y. +
+ +* a*b
+Multiply. +
+ +* a/b
+Divide. +
+ +* a%b
+Modulus. +
+ +* a+b
+Add. +
+ +* a-b
+Subtract. +
+ +* a<b
+True if a is less than b. +
+ +* a<=b
+True if a is less than or equal to b. +
+ +* a>b
+True if a is greater than b. +
+ +* a>=b
+True if a is greater than or equal to b. +
+ +* a==b
+True if a equals b. +
+ +* a!=b
+True if a does not equal b. +
+ +* a&&b
+True if both a and b are true. +
+ +* a||b
+True if ether a or b are true. +
+ +* a?b:c
+If a is true return b, otherwise return c. +
+ +* a=b
+Assign b to a. +
+ +* a:b
+Execute a, then execute b. +
+ +&&, || and ? : work as in C and sh as far as side effects: if the +left side of && is false, the right side is not evaluated. + +: is expression separator. + +## Shell windows + +Hit __^K '__ to run a command shell in one of JOE's windows. When the +cursor is at the end of a shell window (use __^K V__ if it's not), +whatever you type is passed to the shell instead of the buffer. Any output +from the shell or from commands executed in the shell is appended to the +shell window (the cursor will follow this output if it's at the end of the +shell window). This command is useful for recording the results of shell +commands- for example the output of __make__, the result of __grep__ping +a set of files for a string, or directory listings from __FTP__ sessions. +Besides typeable characters, the keys __^C__, __Backspace__, __Del__, __Return__ and +__^D__ are passed to the shell. Type the shell __exit__ command to stop recording +shell output. If you press __^C__ in a shell window, when the cursor is +not at the end of the window, the shell is __kill__ed. + +If you use Bash, you can hit: __^Q Up Arrow__ and __^Q Down Arrow__ to +scroll through Bash's history buffer. Other keys work as well: try +__^Q ^A__ to go to beginning of line or __^Q ^E__ to go to end of line. +Unfortunately JOE only emulates a dumb terminal, so you have to use a lot of +imagination to do any editing beyond hitting backspace. + +In general, any character quoted with __^Q__ is sent to the shell. + +Also sent to the shell: __Tab__, __Backspace__, __Enter__, __^C__ and __^D__. + + +## Pop-up shell windows + +Hit F1 - F4 to open and switch between shell windows. + +Pop-up shell windows use a full terminal emulator so that when you type "man ls" it's +formatted correctly (it works well enough so that some interactive programs +can be used). Even so, the shell window is still an edit buffer. + +The old shell window (with no terminal emulation) still exists: use __^K '__ to +invoke it as usual. This is useful to see control sequences emitted by a +program. + +More of the keys get passed to the running program in pop-up shell windows +compared with the older one. There is a :vtshell section of the joerc file to +control which ones. In particular arrow keys and Ctrl-C are passed to the +program. It means you can easily step through bash history with the arrow +keys, or abort programs the normal way with Ctrl-C. + +On the other hand, loss of Ctrl-C means it's less obvious how to close the +window. One way is to move the cursor off of the shell data entry point +(with Ctrl-P), and then hit Ctrl-C. Another is to hit __^K Q__. Finally, you +can type 'pop' at the command prompt. + +If you need to pass a key to the shell that JOE normally uses, quote it. For +example, if you invoke "emacs -nw" in the shell window, you can exit it with: + + ^Q ^X ^C + +To quickly position the cursor back to the point where data is entered into +the shell, hit __^K V__. + +When you open a shell window, a JOE-specific startup-script is sourced. +It's located in /etc/joe/shell.sh (also /etc/joe/shell.csh). It contains +some aliases which allow you to control JOE with fake shell commands. I +have these commands so far: + +* clear
+erase shell window (delete buffer contents) +
+ +* joe file
+edit a file in JOE +
+ +* math 1+2
+evaluate equation using JOE's calculator +
+ +* cd xyz
+change directory, keep JOE up to date +
+ +* markb
+same as ^KB +
+ +* markk
+same as ^KK +
+ +* mark command
+execute shell command, mark it's output +
+ +* parse command
+execute shell command, parse it's output for file names and line numbers (for find or grep) +
+ +* parser comman
+execute shell command, parse it's output for errors (for gcc) +
+ +* release
+release parsed errors +
+ +* pop
+dismiss shell window (same as ^K Q) +
+ + +These work by emitting an escape sequence recognized by the terminal +emulator: __Esc { joe_macro }__. When this is received, the macro is executed. +For security, only macros defined in the joerc file which begin with +"shell_" can be executed this way. + +### Use cases + +Pop-up shell windows have a number of nice use cases: + +* Use it to browse manual pages + + Hit F1 and type "man fopen". Use 'b' ('u') and space to control + _more_ (or _less_) while viewing the manual. You can leave the manual + on the screen in one window while editing in another window. + +* Use it to switch directories + + Hit F1 and navigate to the directory while using _cd_. Once + you are in the right place, hit __^K E__ to load a file (or type "edit file" + from the shell). + +* Use it in conjunction with the error parser to find files + + Hit F1 and navigate to a directory. Use grep or find (or both) + to generate a list of files): + +~~~~ + parse grep -n FIXME *.c +~~~~ + +Or: + +~~~~ + markb; find . | xargs grep -n FIXME; markk; parse +~~~~ + +(Note that you can't say this: + +~~~~ + parse find . | xargs grep -n FIXME +~~~~ + +...the issue is that only the words to the left of the pipe symbol +are passed as arguments to the parse command). + +Now use __^P__ to position the cursor on one of the lines of the list. Hit +__Esc Space__ to have JOE edit the file and jump to the specified line (also +you can use __Esc -__ and __Esc =__ to step through the list). + +* Use it in conjunction with search and replace to edit many files + + Once JOE has a list of files (from above), use search and replace + with the 'e' option to visit all of them: + +~~~~ + ^K F + Find: + Options: re + Replace: +~~~~ + +* Build your project + +Easily capture errors from a build with: + +~~~~ + parserr make +~~~~ + +Hit __Esc =__ and __Esc -__ to step through the errors. + + +### How it works.. + +* There is a new mode "ansi". (__Esc X__ mode ansi). When this mode is +enabled, the screen updater hides escape sequences which are in the +buffer. Otherwise you get a big mess from the sequences surrounding +colored output from 'ls'. + +* There is a new built-in syntax: "ansi". (__^T Y__ ansi). This syntax +parses the ANSI color control sequences so that text gets colored. + +* There is a terminal emulator to interpret control sequences from the +shell program. It emulates a terminal by modifying the contents of an +edit buffer. + +* When the edit window is resized we tell the shell by issuing the +TIOCSSIZE or TIOCSWINSZ ioctl. This way, the program running in the +shell knows the window size. + +## Compiler and grep/find parsers + +JOE has two parsers which can be used to generate the error list (list of +file names / line numbers). + +The "parserr" command parses the entire buffer, or if the block is set, just +the highighted block for compiler error messages. The messages should be in +this format: + + file.name line-number : + +The file name needs to be made of numbers, letters, '/', '.' and '-'. It +must have at leat one '.' in it. There needs to be a colon somewhere after +the line number. Lines not in this format are ignored. + +The "gparse' command parses the entire buffer, or if the block is set, just +the highlighted block for a list of filenames or filenames with line numbers +from "grep -n", "find" and similar programs. + + filename + + filename: + + filename:line-number: + +Once JOE has the error list, there are a number of things you can do with +it: + +* Visit the files/locations in the list with __Esc -__ and __Esc =__ + +* Search and replace across all files in the list by using the 'e' search + and replace option. + +* Clear the list by using the "release" command. + +Also, you can use __Esc Space__ ('jump' command) to parse the line the cursor is +on and jump to the parsed filename and line number. 'jump' uses the +grep/find parser unless 'parserr' had been previously issued in the buffer. + +### Grep-find + +Hit __Esc G__ to bring up the prompt. Enter a command which results in file +names with line numbers, for example: 'grep -n fred \*.c'. This will list all +instances of 'fred' in the \*.c files. You need the '-n' to get the line +numbers. + +Now you can hit __Esc Space__ on one of the lines to jump to the selected +file. Also, you can use __Esc =__ and __Esc -__ to step through each line. + +### Compile + +Hit __Esc C__ to save all modified files and then bring up the compile prompt. +Enter the command you want to use for the compiler (typically "make -w"). The +compiler will run in a shell window. When it's complete, the results are +parsed. + +The '-w' flag should be given to "make" so that it prints messages whenever +it changes directories. The message are in this format: + + make[1]: Entering directory `/home/jhallen/joe-editor-mercurial/joe' + +If there are any errors or warnings from the compiler you can hit +__Esc Space__ on one of the lines to jump to the selected file. Also, +you can use __Esc =__ and __Esc -__ to step through each line. + +## Syntax highlighting + +To enable highlight use __^T H__. + +To select the syntax, use __^T Y__. You can hit __Tab__ __Tab__ at the prompt for a +completion list. + +JOE tries to determine the syntax to use based on the name and contents of +the file. The configuration file /etc/joe/ftyperc contains the definitions. + +Each syntax is defined by a file located /usr/share/joe/syntax/. + +## How JOE syntax highlighting works + +*from [c.jsf](http://joe-editor.hg.sourceforge.net/hgweb/joe-editor/joe-editor/file/tip/syntax/c.jsf.in), +slightly modified* + +A deterministic state machine that performs lexical analysis of the target +language is provided in a syntax file. (This is the "assembly language" of +syntax highlighting. A separate program could in principal be used to +convert a regular expression NFA syntax into this format). + +Each state begins with: + + : + + is the state's name. + + is the color used for characters eaten by the state +(really a symbol for a user definable color). + + tells JOE if the current character is part of a comment or a +string. This allows JOE to skip over comments and strings when matching +characters such as parentheses. To use this feature, the +highlighter_context option must be applied to the files highlighted by the +corresponding syntax. To apply the option, add it to ftyperc for those file +entries. + +The valid contexts are: + + * comment This character is part of a comment. Example: /\* comment \*/ + + * string This character is part of a string. Examples: "string" 'c' 'string' + +The comment and string delimiters themselves should be marked with the +appropriate context. The context is considered to be part of the color, so +the recolor=-N and recolormark options apply the context to previous +characters. + +The first state defined is the initial state. + +Within a state, define transitions (jumps) to other states. Each +jump has the form: + + [