Настройка Joe

Как я уже говорил, некоторые настройки joe можно выполнить интерактивно (вызвав их комбинацией Control+T). Однако они весьма ограничены и к тому же будут иметь силу только в текущем сеансе. Более интересные и богатые возможности открываются при редактировании конфигурационного файла joerc.

Пример такого файла обнаруживается в каталоге /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) должны быть выведены

  • префиксные ключи (%k), маркирующие включение режимов вставки/замены (%T), переноса слов (%W), автоотступа (%I), прямоугольного выделения (%X);
  • имя редактируемого файла (%n);
  • указание на модификацию файла (%m) и на режим “только для чтения”
    (%R);
  • индикатор включения протоколирования макросов (%M).

Строка же вида

-rmsg  Row %r Col %c %o %O %u

выводит в правой части статусной линии номер текущей строки (Row %r) и колонки (Col %c) файла, смещение от начала в байтах (в десятичной, %o, и шестнадцатеричной, %O, формах, и системное время в 24-часовом формате(%u).

Возможен вывод и иной информации, как то:

  • системного времени в 12-часовом формате (%t);
  • индикации измененного файла символом *;
  • ASCII-кода символа под курсором в десятичной (%a) или шестнадцатеричной
    (%A) форме;
  • процента просмотра файла до позиции курсора (%p);
  • общего количества строк в файле (%l);
  • индикации запуска встроенной оболочки (%S).

Кроме того, внешний вид статусной строки можно изменить, придав ему, вместо или помимо инверсии, атрибуты подчеркивания (\u), полужирного начертания (\b), мерцания (\f).

Вторая секция конфигурационного файла — это локальные опции, которые можно определить отдельно для файлов различных типов. Для этого в ее составе создаются субсекции вида

* все файлы
*.html документы HTML
*.c программы на C
*rc конфигурационные файлы

и так далее. Напомню здесь, что знак маски (*) должен обязательно начинаться с начала строки, то есть занимать первую колонку.

Для каждой субсекции можно независимо задать такие параметры, как перенос слов (или его отключение), автоматический отступ, величину табуляции и т.д., а также, что интересно, назначить собственную раскладку клавиатуры, отличную от определенной для консоли в целом. Кроме того, с файлами любого типа можно связать макросы, выполняемые при их загрузке или записи.

Третья секция описывает вид экранов помощи, выводимых клавишной комбинацией Control+KH. Экраны могут быть изменены как с позиций внешнего вида (инверсия цветов, выделение или подчеркивание и т.д.), так и по существу. В частности, здесь можно задать специальные экраны помощи для собственных макрокоманд. Более того, редактированием этой секции можно выводить и подсказки на русском (или каком-либо еще) языке. Каждый такой экран заключается в фигурные скобки, предваряется собственным идентификатором (в примере — HTML), ему придаются атрибуты внешнего вида (в примере — инвертирование рамки, \i), задается строка подсказки, после чего следует просто перечисление клавишных комбинаций и их описание.

Четвертая секция — разного рода ключевые последовательности, или связки (key bindings), в том числе и макрокоманды. Они могут быть определены отдельно для всех окон (субсекция :windows, опять же начиная с первой колонки), окна редактируемого текста (субсекция :main), и так далее.

Внимательное рассмотрение секции показывает, что все описанные выше (и перечисленные в приложении) клавишные комбинации joe представляют собой макрокоманды, именно здесь и определенные. Из чего следует два вывод.

Первый — возможность переопределения клавиатурных комбинаций, назначенных для штатных команд joe по умолчанию. Например, если вам не нравится, что пролистывание экрана осуществляется комбинациями Control+U (назад) и Control+V (вперед), можно присвоить им иные значения (из числа свободных, разумеется).

Второй вывод — штатные команды joe могут быть (почти) неограниченно наращены собственными макрокомандами. Для чего достаточно их запротоколировать и поместить (напомню, посредством EscapeD) в соответствующее место четвертой секции (скорее всего, в раздел :windows или :main) файла ~/joerc. Более того, здесь же им можно присвоить и членораздельные имена (вместо данных по умолчанию Macro 1, Macro 2 и т.д.), во-первых, и изменить закрепленные клавишные комбинации (по умолчанию — Control+K0 и т.д.) — во-вторых. То есть полностью индивидуализировать редактор, не прибегая ни к каким сильнодействующим средствам (вроде перекомпиляции исходных текстов).

Пользовательские макросы следует помещать в одну из субсекций — :window или :main. В последней, кроме этого, целесообразно отредактировать имеющиеся там по умолчанию макросы проверки орфографии для работы с русским словарем. По умолчанию эти макросы описываются строками вида:

:def spellfile
:def spellword

для спеллинга всего текста и отдельных слов, соответственно. Они просто описывают параметры вызова внешней программы проверки орфографии (по умолчанию — ispell). И подключение русского словаря при этом, разумеется, не предусмотрено. Чтобы осуществить это, следует просто добавить к обеим строкам после вызова исполнимой команды ispell опцию -d russian.

. .