Настройка joe
Как я уже говорил, некоторые настройки joe можно выполнить интерактивно (вызвав их комбинацией Control+T). Однако они весьма ограничены и к тому же будут иметь силу только в текущем сеансе. Более интересные и богатые возможности открываются при редактировании конфигурационного файла joerc.
Пример такого файла обнаруживается в каталоге /usr/local/etc/joerc. Перво-наперво его надлежит скопировать с свой домашний каталог и переименовать в ~/.joerc - именно этот файл ищется в первую очередь при загрузке редактора. А затем он открывается в любом текстовом редакторе - лучше всего в самом же joe и, после соответствующего изучения, правится вручную.
В экранной документации синтаксис конфигурационного файла не описан, что мотивируется его простотой и понятностью. Это действительно почти так - смысл практически всех настроек можно понять из контекста (и комментариев).
Файл joerc разбит на четыре секции. Первая - это глобальные опции редактора, большая часть которых может быть задана также параметрами командной строки. Все они - односложные и имеют вид -имя_опции (установить данную опцию) или --имя_опции (отменить ее). Опция является установленной (или, напротив, отмененной), если ею начинается строка (первая колонка, в терминологии программы - это относится и ко всем остальным секциям .joerc). Если строка начинается с пробела или табуляции, дальнейшее ее содержание рассматривается как комментарий и не учитывается. Комментарием является и все, отделенное пробелом от имени опции.
Описание всех опций заняло бы слишком много места, поэтому обращу внимание только на некоторые ключевые моменты. Обязательно следует включить (то есть удалить пробел в начале строки, если он имеет место быть) опцию
-asis
Это необходимо для правильного отображения символов кириллицы - иначе они будут показаны латинской транслитерацией.
Полезным представляется также установка опций:
-lightoff
обеспечивающей выключение подсветки выделенного блока после его перемещения или копирования, - иначе выделение это будет постоянно маячить перед глазами;
-marking
дающей подсветку текста между началом выделяемого блока и текущей позицией курсора. Можно отменить также создание страховых копий или, напротив, определить место для их помещения, отличное от исходных файлов. Это достигается включением опций
-nobackups
или
-backpath path
соответственно.
Интересная возможность - задание количества строк и колонок (знаков в строке) на экране, отличное от определенных для текущего терминала (виртуальной консоли) в целом, что задается опциями
-lines # -columns #
где # - количество строк и знаков, соответственно.
В этой же секции настраивается вид статусной строки (вывод которой, впрочем, можно и отключить опцией -nosta). Он определяется двумя опциями -lmsg и -rmsg. Первая определяет компоненты, выводимые в левой части строки, вторая - в правой. В любой из них можно вывести индикацию режимов (забивки или вставки, переноса слов, автоотступов), имя файла и показатель его изменения, текущее положение курсора (в строках, колонках или знаках), и т.д. Первый знак левой части статусной строки - escape-последовательность, определяющая ее общий вид: инвертирование цветов, выделение подчеркнутым или полужирным начертанием, мерцание.
Например, строка вида
-lmsg \i%k%T%W%I%X %n %m%R %M
указывает, что в левой части статусной строки в инвертированном виде (черным по белому, \i) должны быть выведены
Строка же вида
-rmsg Row %r Col %c %o %O %u
выводит в правой части статусной линии номер текущей строки (Row %r) и колонки (Col %c) файла, смещение от начала в байтах (в десятичной, %o, и шестнадцатеричной, %O, формах, и системное время в 24-часовом формате (%u).
Возможен вывод и иной информации, как то:
Кроме того, внешний вид статусной строки можно изменить, придав ему, вместо или помимо инверсии, атрибуты подчеркивания (\u), полужирного начертания (\b), мерцания (\f).
Вторая секция конфигурационного файла - это локальные опции, которые можно определить отдельно для файлов различных типов. Для этого в ее составе создаются субсекции вида
* все файлы *.html документы HTML *.c программы на C *rc конфигурационные файлы
и так далее. Напомню здесь, что знак маски (*) должен обязательно начинаться с начала строки, то есть занимать первую колонку.
Для каждой субсекции можно независимо задать такие параметры, как перенос слов (или его отключение), автоматический отступ, величину табуляции и т.д., а также, что интересно, назначить собственную раскладку клавиатуры, отличную от определенной для консоли в целом. Кроме того, с файлами любого типа можно связать макросы, выполняемые при их загрузке или записи.
Третья секция описывает вид экранов помощи, выводимых клавишной комбинацией Control+K - H. Экраны эти могут быть изменены как с позиций внешнего вида (инверсия цветов, выделение или подчеркивание и т.д.), так и по существу. В частности, здесь можно задать специальные экраны помощи для собственных макрокоманд. Более того, редактированием этой секции можно выводить и подсказки на русском (или каком-либо еще) языке. В частности, для макросов ввода тэгов html, описанных в одном из предыдущих разделов, можно создать экран помощи вида:
{HTML \i Help Screen turn off with ^KH more help with ESC . (^[.) \i \i\uGeneral\u \uBody Text\u \uList&Table\u \u \i \i^KF1 Blank F5 P F7 Pre ^KF8 Div ^KF2 UL ^KF3 OL ^KF4 LI F10 Href ^KF9 \i \iF1-F4 H1-H4 F6 Br F8 Strong F9 Em ^KF5 Tab ^KF6 TR ^KF7 TD ^KF10 Name }
Каждый такой экран заключается в фигурные скобки, предваряется собственным идентификатором (в примере - HTML), ему придаются атрибуты внешнего вида (в примере - инвертирование рамки, \i), задается строка подсказки, после чего следует просто перечисление клавишных комбинаций и их описание.
Четвертая секция - разного рода ключевые последовательности, или связки (key bindings), в том числе и макрокоманды. Они могут быть определены отдельно для всех окон (субсекция :windows, опять же начиная с первой колонки), окна редактируемого текста (субсекция :main), и так далее.
Внимательное рассмотрение секции показывает, что все описанные выше (и перечисленные в приложении) клавишные комбинации joe представляют собой макрокоманды, именно здесь и определенные. Из чего следует два вывода.
Первый - возможность переопределения клавиатурных комбинаций, назначенных для штатных команд joe по умолчанию. Например, если вам не нравится, что пролистывание экрана осуществляется комбинациями Control+U (назад) и Control+V (вперед), можно присвоить им иные значения (из числа свободных, разумеется).
Второй вывод - штатные команды joe могут быть (почти) неограниченно наращены собственными макрокомандами. Для чего достаточно их запротоколировать и поместить (напомню, посредством Escape - D) в соответствующее место четвертой секции (скорее всего, в раздел :windows или :main) файла ~/joerc. Более того, здесь же им можно присвоить и членораздельные имена (вместо данных по умолчанию Macro 1, Macro 2 и т.д.), во-первых, и изменить закрепленные клавишные комбинации (по умолчанию - Control+K - 0 и т.д.) - во-вторых. То есть полностью индивидуализировать редактор, не прибегая ни к каким сильнодействующим средствам.
Пользовательские макросы следует помещать в одну из субсекций - :window или :main. В последней, кроме этого, целесообразно отредактировать имеющиеся там по умолчанию макросы проверки орфографии для работы с русским словарем. По умолчанию эти макросы описываются строками вида:
:def spellfile
:def spellword
для спеллинга всего текста и отдельных слов, соответственно. Они просто описывают параметры вызова внешней программы проверки орфографии (по умолчанию - ispell). И подключение русского словаря при этом, разумеется, не предусмотрено. Чтобы осуществить это, следует просто добавить к обеим строкам после вызова исполнимой команды ispell опцию -d russian, в результате чего строки эти примут вид:
:def spellfile filt,"cat >ispell.tmp;ispell -d russian ispell.tmp \ </dev/tty >/dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype :def spellword psh,nextword,markk,prevword,markb,filt,"cat \
>ispell.tmp;ispell -d russian ispell.tmp </dev/tty >/dev/tty;tr -d \<ispell.tmp '\\012';/bin/rm ispell.tmp",rtn,retype,nextword
Символы обратного слэша в конце строк означают только то, что каждая строка на самом деле не должна прерываться - вносить их в тело макроса не следует (нужно только позаботиться, чтобы опция переноса слов в редакторе была отключена).