Текстовый редактор joe

Текстовый редактор joe — типичный представитель консольных редакторов командного стиля. В отличие от vi , он имеет более простую систему команд и предоставляет ряд дополнительных возможностей, в частности, удобные и развитые средства создания пользовательских макросов. Кроме того, joe способен эмулировать команды других распространенных на LINUX-платформах текстовых редакторов — vi , emacs , pico и кросс-платформенного редактора WordStar.

Редактор joe представлен в пяти вариантах: собственно joe , rjoe — версия с ограниченными возможностями, jmacs — эмулятор редактора emacs , jpico — эмулятор редактора pico , jstar — эмулятор редактора WordStar, старейшего из полноэкранных текстовых редакторов, система команд которого в дальнейшем использовалась во многи хинтегрированных средах программирования.

Рис. 10.4: Вид редактора joe по умолчанию

Каждая из этихверсий, кроме rjoe, представляет полнофункциональный текстовый редактор со своими особенностями. Но ниже будет описан только собственно joe.

Запускается joe из командной строки оболочки в консоли или эмуляторе терминала одноименной командой, можно с именем файла, предназначенного для редактирования. В случае если файла с таким именем не существует, создается новый пустой файл.

Кроме этого, при запуске joe можно использовать ряд опций командной строки. Представление о нихдает чтение страниц экранной документации (man joe).

После запуска joe выглядит следующим образом (рис. 10.4): экран с текстом, строка заголовка в верхней его части и строка с указанием авторства — в нижней.

Подсказка строки заголовка указывает на способ выведения системы помощи (комбинацией клавиш Ctrl|+K|+H|) и просмотра ее: посредством Esc|+. |— вперед или Esc +, | — назад (рис. 10.5).

Изучение страниц помощи дает представление о возможностяхредактора для навигации по тексту и его редактированию. Основными средствами для этого являются внутренние команды joe, выполняемые в большинстве случаев нажатием комбинации клавиш Ctrl (изредка - Esc|)+[символьная клавиша|, что эквивалентно переходу в командный режим vi. Навигация и редактирование могут выполняться и стандартными клавишами PC-клавиатуры, однако использование внутреннихкоманд, как и в случае с vi, предпочтительнее.

Рис. 10.5: Редактор joe: первая страница системы помощи

Кроме преимущества в скорости, это обеспечивает идентичность действий на любыхтипахтерминалов.

Мышь в joe поддерживается стандартным для Linux-консоли образом, то есть не как указательное устройство, а как средство выделения и копирования экранныхблоков. Это относится и к текстовой консоли (даже при подключении gpm ), и к эмуляторам терминалов графического режима.

Редактор joe допускает выделение блоков и отдельныхзнаков, ихкопиро-вание, перемещение и удаление, форматирование абзацев (центрирование, лево- и правостороннее выравнивание и т.д.), вставку существующихфай-лов в текущий документ и запись выделенныхфрагментов в виде отдельных файлов (см. рис. 10.5).

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

В joe имитируется многооконный режим: поле текущего документа может быть разбито пополам, и далее каждое из них также может делиться сколь угодно дробно (правда, только по горизонтали). Обеспечена также одновременная работа со многими документами, каждый из которыхможет быть выведен в оконном или полноэкранном виде (рис. 10.6).

Количество одновременно открытыхфайлов, ограничено только ресурсами компьютера. Более того, joe позволяет работать с документами, объем ко-торыхпревышает объем всей доступной (то есть физической + виртуальной)

Рис. 10.6: Работа с двумя документами в оконном режиме

памяти.

В joe поддерживается собственный макроязык с достаточно прозрачным синтаксисом. Кроме того, имеется режим протоколирования макросов, что позволяет быстро наращивать его возможности.

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

Редактор joe корректно работает с кириллицей при правильно русифицированной консоли. Более того, все клавишные комбинации работают и при латинской, и при русской раскладке клавиатуры. Правда, в последнем случае часто требуется дополнительное нажатие управляющей клавиши Ctrl|.

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

Структура закрепленныхза командами по умолчанию клавишныхкомбинаций проста и очень логична. За самыми простыми и частыми действиями для навигации и редактирования закреплены двухклавишные комбинации. Это, как правило, сочетание одновременно нажатыхклавиш Ctrl и буквенной, имеющей обычно мнемонический смысл.

Полный список встроенныхкоманд и привязанных к ним клавишныхкомбина-

Рис. 10.7: Окно помощи с дополнительными возможностями (вверху), система интерактивной настройки (внизу)

ций можно посмотреть в экранной документации. Приведем только основные примеры.

Так, комбинация Ctrl + B (от backward ) перемещает курсор на один знак влево, Ctrl + F (от forward ) — на один знак вправо, Ctrl + Z — переход к предыдущему слову, Ctrl + X — к последующему слову и так далее (см. рис. 10.5).

В некоторыхслучаяхв качестве управляющей клавиши используется Esc : если после ее нажатия набрать литеру W — курсор переместится на строку вверх, литеру Z — на строку вниз. Кроме того, Esc служит для вызова проверки правописания для слова ( Esc + N ) и всего файла ( Esc + L ). Нажатие Esc два раза подряд приводит к установке закладки ( bookmark ), которая маркируется произвольным числом, а Esc плюс этот номер вызывает переход к установленной закладке. Правда, очевидно, что закладок не может быть больше 10; и к тому же по завершении сеанса они не сохраняются.

Все клавишные комбинации в joe не чувствительны к регистру, причем не только для буквенных, но и символьных клавиш. Так, для отмены последней операции (как уже говорилось, многоуровневой) зарезервирована комбинация Ctrl +_ (знак подчеркивания), а для возврата отмененного действия — Ctrl + ^ ; однако можно использовать также иханалоги для нижнего регистра — (дефис или минус) в первом случае, и 6 — во втором.

Кроме того, двухклавишные комбинации не чувствительны и к раскладке клавиатуры: сочетание Ctrl + T (латинское) будет вызывать систему настройки joe и при кириллической раскладке. Интересно, что для пролистывания страниц помощи (показанных, например, на рис. 10.2, рис. 10.3 и рис. 10.3) вперед и назад при кириллической раскладке следует нажимать Esc и.

(или, соответственно, запятую) также в ее положении на русифицированной клавиатуре (то есть в нижнем правом углу для win-клавиатур и на верхнем регистре цифр 5 и 7 — для DOS-раскладок).

Для более сложныхили редкихдействий используются трехклавишные комбинации.

Это почти исключительно одновременно нажатые Ctrl|+ркГ~|, после чего нажимается литерная клавиша. Так, операции с блоками осуществляются следующим образом: Ctrl|+рк^—рв~] отмечает начало выделяемого блока,

Ctrl|+[к~|-|~к~| — его конец, Ctrl|+[к~|-|~сГ| — копирует, Ctrl|+|~к~|-[м] — перемещает выделенный блок в позицию курсора и так далее.

Трехклавишные комбинации также не чувствительны к регистру. И работают также и при кириллической раскладке клавиатуры. В этом случае необходимо только нажимать вторую литерную клавишу вместе с той же клавишей Ctrl|: то есть запись текущего файла потребует комбинации Ctrl\+[Щ+ Ctrl|+|~D~|, вызов нового файла — Ctrl|+ркГ~|+ Ctrl\+\Щи так далее.

В joe нет отдельной функции для переименования файла. Но при любой записи текущего документа следует запрос на подтверждение имени файла, которое может быть изменено. Следует только помнить, что дальнейшая работа происходит с исходным, а не переименованным файлом.

Кроме того, в joe доступны еще некоторые действия с файлами. Так, комбинация Ctrll+pK^-pFT] вставляет текст из существующего файла в позицию курсора, Ctrl|+ркГ|—ркГ| — записывает выделенный блок в виде нового файла (разумеется, запросив предварительно его имя). С помощью комбинации Ctrl|-ЬркГ[—ПеГ~| можно открыть для редактирования другой существующий файл. При этом следует предложение ввести путь и имя, причем и для того, и для другого клавиша Tab выводит список файлов и подкаталогов текущего (на момент запуска joe) каталога.

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

Одновременно открытые файлы могут быть представлены как в полноэкранном виде, так и каждый в своем окне. Для переключения между режимами служит комбинация Ctrl|+ПкГ|~^П. Размер каждого из выведенныхокон может быть увеличен или уменьшен (|Ctrl|+pK^-[cF] и Ctrl|+[к~|-|~т~|, соответственно), правда, только с шагом в одну экранную строку. Переключение между открытыми документами, вне зависимости от режима, осуществляется комбинациями Ctrl|+ркГ|—pN7 ] (вперед или вниз) и Ctrl|+ркГ|—рр~] (назад или вверх).

Рис. 10.8: Окно командной среды внутри joe

Возможен в joe и независимый просмотр разныхчастей документа в отдель-ныхокнах, для чего предназначена функция расщепления окна ( Ctrl + K - O ). Фрагменты из одной части файла могут быть перенесены в другую.

Универсальной комбинацией для окончания любой операции в joe является Ctrl + C . С ее помощью закрывается окно с текущим документом; если он был единственным в данном сеансе, одновременно происходит и выход из редактора. В обоихслучаяхследует запрос на сохранение выполненных изменений. Отказаться от выхода или закрытия файла можно повторным нажатием той же комбинации Ctrl + C . Она же используется для прекращения любой длящейся во времени (автоматическа проверка правописания, поиск) или требующей подтверждения операции.

Кроме этого, непосредственно из joe , без выхода, можно обращаться к командам оболочки, причем различными способами. Так, комбинация Ctrl + K - Z обеспечивает временный выход в оболочку, где можно вводить любые ее команды. А по завершении операций вернуться в joe можно командой fg . Единичную же команду из joe можно ввести, нажав Esc , а затем — ! (восклицательный знак).

Кроме этого, есть и более интересная возможность: открытие внутри joe , посредством комбинации Ctrl + K - ’ (апостроф), самостоятельного окна с командной оболочкой (рис. 10.8). Здесь можно выполнять любые команды с выводом ихрезультатов на экран. После чего стандартной командой exit осуществляется выход из среды, а все результаты сохраняются обычным для joe образом в виде текстового файла.

Наконец, в joe обеспечивается ввод специальныхсимволов. Так, нажатие клавиши ‘ (обратный апостроф) приводит к предложению ввести первый знак десятичного (0-9), шестнадцатиричного ( x ) или восьмеричного ( o ) кода символа. Если же вместо кода нажать Esc — можно ввести любую esc-

последовательность.

Таковы основные возможности joe для редактирования текстов общего характера.

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

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

Кроме того, в joe существует режим протоколирования макрокоманд (см. рис. 10.6). Включается он комбинацией клавиш Ctrl|+K - [~|(открывающая квадратная скобка), вслед за чем следует ввести номер макроса (от 0 до 9), выступающий как в качестве его имени, так и в роли запускающей клавиши.

Далее просто выполняются необходимые действия, после чего запись макроса останавливается комбинацией Ctrl|+[K~|-]|(закрывающая квадратная скобка).

Для воспроизведения запротоколированного макроса используется комбинация Ctrl|+K~|-|цифра (где цифра — указанный при записи номер макрокоманды).

С помощью протоколирования макросов можно автоматизировать ввод наиболее нужныхдля конкретной задачи символов и их наборов, не предусмотренныхштатным образом. Например, основныхтэгов html для разметки web-страниц, таких, как параграф, разрыв строки, заголовки нескольких уровней, таблицы и списки. Запротоколированные в данном сеансе макросы могут быть помещены в тело существующего или нового документа (комбинацией клавиш Esc|+|~D]) и в дальнейшем отредактированы в текстовом редакторе (том же joe, например).

За один сеанс можно запротоколировать не более 10 макросов (маркированныхцифрами от 0 до 9). Более того, они будут действовать только в течении данного сеанса: по выходе из редактора записанные макросы сами собой не сохраняются. Однако есть средство сохранить их для дальнейшего использования, и при этом в неограниченном количестве. Для этого ихследует поместить в соответствующую секцию конфигурационного файла .joerc.

Назначенные по умолчанию клавишные комбинации (включающие цифры от 0 до 9) не являются обязательными, ихможно вручную заменить на любые другие, из числа не использованныхранее. После чего можно начать протоколирование команд сначала, повторно используя ту же нумерацию, снова

встроить ихв joerc и так далее.

Таким образом можно легко автоматизировать процесс ввода тэгов HTML или XML, конструкций JavaScript, сценариев командной оболочки, разметки документов TEX, превратив joe в специализированный инструмент для решения почти любыхзадач.

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

Файл .joerc разбит на четыре секции. Первая — это глобальные опции редактора, большая часть которыхможет быть задана также параметрами командной строки. Все они — односложные и имеют вид -имя_опции (установить данную опцию) или --имя_опции (отменить ее). Опция является установленной (или, напротив, отмененной), если ею начинается строка (это относится и ко всем остальным секциям .joerc ). Если строка начинается с пробела или табуляции, дальнейшее ее содержание рассматривается как комментарий.

Комментарием является и все, отделенное пробелом от имени опции.

Остановимся на некоторыхключевыхопцияхпервой секции. Обязательно следует включить (то есть удалить пробел в начале строки, если он имеет место быть) опцию -asis . Это необходимо для правильного отображения символов кириллицы — иначе они могут показаны латинской транслитерацией. Полезна также установка опций -lightoff - выключение подсветки выделенного блока после его перемещения или копирования, -marking — подсветка текста между началом выделяемого блока и текущей позицией курсора. Можно отменить также создание страховых копий или, напротив, определить место для ихпомещения, отличное от исходныхфайлов (опции --nobackups и -backpath path соответственно).

Есть возможность задания количество строк и колонок (знаков в строке) на экране, отличное от заданныхдля текущего терминала (виртуальной консоли) в целом, что задается опциями -lines 999 и -columns 999, где 999 — количество строк и знаков соответственно.

В этой же секции настраивается вид статусной строки (вывод которой можно отключить опцией -nosta ). Он определяется двумя опциями -lmsg и -rmsg .

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

вый знак левой части статусной строки — escape-последовательность, определяющая ее общий вид: инвертирование цветов, выделение подчеркнутым или полужирным начертанием, мерцание.

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

•* — все файлы,

•*.html — документы HTML,

•*.с— программы на языке C,

•*гс— конфигурационные файлы

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

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

Третья секция описывает вид экранов помощи, выводимыхклавишной комбинацией Ctrl|+[к~|-|~н~|(см. приложение). Экраны эти могут быть изменены как с позиций внешнего вида (инверсия цветов, выделение или подчеркивание и т.д.), так и по существу. В частности, здесь можно задать специальные экраны помощи для собственныхмакрокоманд. Более того, редактированием этой секции можно выводить и подсказки на русском (или каком-либо еще) языке.

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

Рассмотрение секции показывает, что все клавишные комбинации joe представляют собой макрокоманды, именно здесь и определенные. Поэтому, во-первых, имеется возможность переопределения клавиатурных комбинаций, назначенныхдля штатныхкоманд joe по умолчанию. Во-вторых, штатные команды joe могут быть пользовательскими макрокомандами. Для чего достаточно ихзапротоколировать и встроить в какой-либо раздел (например, :windows или :main) четвертой секции файла .joerc, одновременно изменив ихимена и закрепленные клавишные комбинации.

Рис. 10.9: Текстовый редактор mcedit — вид по умолчанию

Еще материалы по теме: