Введение в POSIX'ивизм

       

Настройка 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) должны быть выведены

  • префиксные ключи (%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+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

    Символы обратного слэша в конце строк означают только то, что каждая строка на самом деле не должна прерываться - вносить их в тело макроса не следует (нужно только позаботиться, чтобы опция переноса слов в редакторе была отключена).


    Содержание раздела