Emacs для начинающих

         

Песнь о Joe



Автор: Алексей Федорчук, alv@newmail.ru
Опубликовано: 05.03.2002
Оригинал: http://www.softerra.ru/freeos/16431/

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

И не случайно текстовые редакторы среди Unix-пользователей стали чуть ли не предметом религиозных войн. Немало копий (и клавиатур) было сломано вокруг темы emacs vs. vi, сопоставимой по накалу страстей только с антитезой «мастдай» — «банзай».

Действительно, оба гиганта мира текстовых редакторов, и vi (вернее, его современное воплощение — Vim), и (особенно) Emacs по своим функциональным возможностям далеко вышли за рамки программ этого класса [1]. Они подробно описываются в любой толстой книге про Unix/Linux, им посвящена многочисленная специальная литература, существуют тематические сайты и конференции, где обсуждаются детали конфигурирования этих редакторов и различные аспекты их применения.

Однако в дыму этих баталий затерялись иные представители славного клана редакторов. И один из них — скромный труженик Joe. Он не претендует, как Emacs, на роль операционной среды, не покидая которую, можно получать и отправлять почту, просматривать новости и web-страницы, составлять программы и верстать в TeX'е. В отличие от Vim, не рассчитывает он и на признание в качестве универсальной среды программирования на любых изобретенных человечеством языках. Однако он честно выполняет свой долг на ниве сочинения повествовательных текстов, особенно если они требуют некоторого оформления.

Обоснованию этого я и посвящаю свою заметку. Однако прежде — пара слов о том, каким видится идеальный текстовый редактор [2]. Перво-наперво не худо, если он позволяет вводить текст и осуществлять навигацию по нему, желательно — простым и интуитивно понятным способом. Далее, требуются возможности собственно редактирования — выделения, копирования, вставки, перемещения текстовых фрагментов любого объема. И желательно — в нескольких одновременно открытых документах. Затем — функции поиска и замены, в том числе — и многострочных фрагментов. Наконец, для полного счастья — средства автоматизации, то есть встроенный язык макросов/скриптов/сценариев. Причем — достаточно простой в освоении и использовании, во-первых [3]. А во-вторых, чтобы эти самые макросы/скрипты/сценарии можно было бы при необходимости слепить на скорую руку, а уж потом доводить до кондиции по потребностям. Иными словами — требуется средство протоколирования действий пользователя.


Так вот, если обратиться к Joe — то все это в нем есть. Более того, его средства представляют собой разумный компромисс между функциональным богатством Vim и простотой ee. Он не сложней в освоении, чем редакторы типа le или mcedit, обеспечивая, при минимальном навыке, много большую скорость обработки текста [4].

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

Последнее, впрочем — не нужно: структура предопределенных по умолчанию клавишных команд проста и логична. За простыми и частыми действиями для навигации и редактирования закреплены двухклавишные комбинации — как правило, Control (изредка — Escape) плюс литера (последняя — обычно с мнемоническим смыслом). Для более сложных или редких действий (например, операций с блоками) используются трехклавишные комбинации — Control+K с последующей литерной.

Все клавишные комбинации не чувствительны к регистру и (что особенно важно в наших условиях) — к раскладке клавиатуры (латиница/кириллица, например). Единственное усилие для трехклавишных комбинаций — дополнительное нажатие Control'а одновременно с литерной при русской раскладке.

Я не буду останавливаться на описании клавиатурных команд — исчерпывающую справку по ним можно получить из Help-системы, выводимой на экран комбинацией Control+K -> H (рис. 1). Посмотрим лучше на другие возможности Joe.


Рисунок 1. Редактор Joe с системой помощи

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



Непосредственно из Joe, без выхода, можно обращаться к командам Shell'а, причем — различными способами. Можно перевести его в фоновый режим (комбинация Control+K -> Z) и выполнять любые действия в командной строке. А можно — прямо в редакторе выполнить единичную команду (после нажатия клавиш Escape -> ! -> команда.

Есть и более интересная возможность: открытие внутри Joe, посредством комбинации Control+K — ' (апостроф), самостоятельного окна с полноценной командной средой (рис. 2). Здесь можно выполнять любые команды с выводом их результатов на экран и последующим сохранением в виде текстового файла: неоценимо как при создании всякого рода скриптов, так и при файловых операциях.


Рисунок 2. Редактор Joe с окном командной среды

Если штатных возможностей редактора Joe оказывается недостаточно, их можно нарастить с помощью внутреннего языка макрокоманд. При этом изучать его для начала не обязательно — достаточно включить режим протоколирования (комбинацией клавиш Control+K -> [), выполнить интерактивно все требуемые действия и присвоить созданному макросу номер (от 0 до 9), который и используется для его воспроизведения (комбинацией Control+K -> #).

Далее, раз запротоколированные макрокоманды можно сохранить для на века. Для чего их следует просто поместить в соответствующую секцию конфигурационного файла (~/.joerc) и закрепить за каждым любую свободную клавишу или их комбинацию. Таким образом можно легко автоматизировать процесс ввода тэгов HTML или XML, конструкций JavaScript, скриптов командной среды, разметки документов TeX, а также всего, что потребуется впредь. Превратив Joe в специализированный инструмент для решения почти любых задач.



Если добавить, что глобальные опции Joe (переносы слов, автоматические отступы, условия маркирования блоков и многое другое) могут быть установлены ключами при его запуске, настроены интерактивно во время сеанса или заданы раз и навсегда в конфигурационном файле (причем — для разных типов документов по разному), вывод становится очевидным: он отличается близким к оптимальному соотношением простоты, функциональности и настраиваемости. Благодаря чему его можно найти в любом дистрибутиве Linux, в виде порта или пакета для FreeBSD или OpenBSD (имеются даже DOS- и Windows-версии). Я же, со своей стороны, беру на себя смелость рекомендовать его всем любителям работы в текстовом режиме, буде до сего времени они не приобрели иных пристрастий.



[1] —  Относительно Emacs мне встречалось даже выражение «операционная среда». Если вы помните, именно этим термином величалась Windows до 95-й своей ипостаси…
[обратно к тексту]

[2] — Подчеркну еще раз — редактор именно текстов, а не исходников.
[обратно к тексту]

[3] — Не секрет, что для использования Emacs на полную катушку очень желательно умение программировать на LISP. Что, согласитесь, далеко не каждому юзеру по силам (да не каждому-то и нужно).
[обратно к тексту]

[4] — В этом отношении он практически не уступает Vim, считающемуся эталоном быстроты (имеется в виду именно быстрота обработки, а не быстродействие программы).
[обратно к тексту]

[5] — Впрочем, много ли есть программ, не требующих изучения вообще? Весь вопрос только в адекватности усилий результату. Так вот, Joe за прилежность в учении с лихвой отплатит эффективностью в деле.
[обратно к тексту]

Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с правилами использования материалов сайта «Софтерра» (http://www.softerra.ru/site/rules/)


Пишем заметку


С помощью DocBook можно разметить два вида документов : заметки и книги. Из-за схожести в структуре этих документов, я буду использовать заметку. Перед написанием примера документа рассмотрим основы DocBook.

DocBook это SGML - приложение, такое же как HTML. Но существует и XML версия DocBook. XML - версия более строгая, но более легкая в понимании и изучении. Так как XML также является SGML - приложением, все программые средства SGML могут быть использованы. Основное различие между SGML и XML состоит в следующем (применимо для всех XML - приложений).

XML элементы должны быть всегда закрыты XML элементы должны иметь правильную вложенность Это означает, что вы не можете использовать <BR> как в HTML, вы должны использовать <BR></BR>. Второе требование означает, что вы не можете использовать следующую конструкцию : <B><AHREF="some_url">click here</B></A>, вы должны использовать правильную вложенность : <B><A HREF="some_url">click here</A></B>.

Теперь, после рассмотрения этих деталей, мы можем приступить к разработке DocBook документа. <?xml version="1.0"?> <article> <title>Writing DocBook articles</title> <artheader> <abstract> This article describes how you can use DocBook to develop PDF documents and will cover tools you need to edit DocBook articles and tools to translate them to PDF documents. </abstract> <author> <firstname>Egon</firstname> <surname>Willighagen</surname> </author> <date></date> </artheader> </article>

Ничего сложного - мы начали заметку с заголовка, короткого резюме, даты написания и имени автора.

Далее добавляем разделы заметки, используя соответствующие элементы : <?xml version="1.0"?> <article> <title>Writing DocBook articles</title> <artheader> ... the articles header ... </artheader>

<section> <title>Introduction</title> </section>

... other sections ...

</article>

Мы добавили раздел Введение. Дополнительные элементы могут быть использованы для добавления разделов - Результаты, Выводы и т.д.



+ПячЮК вщпзчр тшО БузАБп


бузАБ р яЦДуЮпЕ Emacs -- МБч ъчАшутчрпБушЛщчАБЛ рчАЛэьяьБщКЕ япыБ. ¦пжтКы япыБ эчжуБ АчтуЮжпБЛ чтьщ вщпз ASCII. ¦чъЦАБьэК зпз ЦъЮпршОНИьу вщпзь ASCII (А рчАЛэуЮьГщКэь зчтпэь чБ 000 тч 037, ь 0177), Бпз ь ъуГпБщКу ASCII-вщпзь (А зчтпэь чБ 040 тч 0176); чтщпзч, ЦъЮпршОНИьу вщпзь щу ьв ASCII щу эчсЦБ ъчОрьБЛАО р яЦДуЮу. ¦ЮЦсьу Дшпсь-эчтьДьзпБчЮК, ьАъчшЛвЦуэКу ъЮь ррчту А зшпрьпБЦЮК, Бпзьу зпз Meta, Бпзжу щутчъЦАБьэК р яЦДуЮпЕ.

+узчБчЮКу ЦъЮпршОНИьу вщпзь ASCII АшЦжпБ р БузАБу тшО чАчяКЕ Фушуы ь ьэуНБ чАчяКу щпврпщьО. +пъЮьэуЮ, вщпз щчрчы АБЮчзь (рчАЛэуЮьГщКы зчт 012) ьАъчшЛвЦуБАО р яЦДуЮу тшО впруЮХущьО АБЮчзь, п Аьэрчш БпяЦшОФьь (рчАЛэуЮьГщКы зчт 011) ьАъчшЛвЦуБАО тшО АчвтпщьО чБАБЦъп тч АшутЦНИуы ъчвьФьь БпяЦшОФьь (чяКГщч ГуЮув зпжтКу 8 АБчшяФчр). аэчБЮьБу Юпвтуш .

©уГпБщКу вщпзь, щу рЕчтОИьу р ASCII, Бпзжу эчсЦБ ъчОршОБЛАО р яЦДуЮпЕ. ¦чстп рзшНГущК эщчсчяпыБщКу вщпзь, рК эчжуБу ьАъчшЛвчрпБЛ шНяКу ъуГпБщКу щу-ASCII-вщпзь, зчБчЮКу Emacs ъчттуЮжьрпуБ. +щь ьэуНБ зчтК, щпГьщпНИьуАО чБ 256, ьшь рчАЛэуЮьГщчсч 0400, ь зпжтКы ьв щьЕ ъЮутАБпршОуБАО зпз ъчАшутчрпБушЛщчАБЛ трЦЕ ьшь ячшуу япыБ. аэчБЮьБу Юпвтуш .

¦Ашь рК рКзшНГьБу ъчттуЮжзЦ эщчсчяпыБщКЕ вщпзчр, Бч АэчжуБу ьАъчшЛвчрпБЛ БчшЛзч чтьщ пшДпрьБ щу-ASCII-вщпзчр, зпжтКы ьв зчБчЮКЕ рэуИпуБАО р чтьщ япыБ. ¦шО щьЕ ьАъчшЛвЦНБАО зчтК чБ 0200 тч 0377. аэчБЮьБу Юпвтуш .

[]   []   [ъЮутКтЦИьы]   [рруЮЕ]   [АшутЦНИьы]   []  



План действий.


С чего начать? Конечно же с настройки MySQL и установки словарей. А далее по необходимости доустановить J2RE 1.4 и/или Apache. Последовательность необходимых операций выглядит следующим образом:

Установка и настройка MySQL. Установка словарей. Установка и настройка PtkDic(*). Установка и настройка GtkDic(*). Установка J2RE 1.4 и JaLingo(*). Установка и настройка Apache с поддержкой PHP и phpMyLingvo(*). * -- опционально



Плюсы и минусы


За

Формат Texinfo: определяемые пользователем макросы (в этой статье не обсуждались) Вывод в формате TeX: совершенство верстки, фантастическое качество печатной версии Формат Info: альтернатива вездесущему HTML Программы просмотра Info: стандартизированная, быстрая и удобная навигация

Против

Формат исходного текста документов Texinfo:

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

Сам формат Info: Info отображается статически, то есть браузеры не переформатируют абзацы если длина строк в браузере отличается от длины строк, использованной при создании страницы Info. Браузеры HTML обычно автоматически справляются с этой проблемой.



Плюсы и минусы latex2html


Плюсы

Определяемые пользователям команды и окружения LaTeX дают возможность настроить все в соответствии с вашими требованиями. Вывод на печать максимально возможного качества. Позволяет работать с таблицами и графикой (в этой статье не рассматривается)

Минусы

"Несоответствие входных сопротивлений" между LaTeX и HTML, которое не может быть полностью устранено с помощью latex2html. Трудности и длительность усвоения LaTeX



Почему SGML?


Почему не Word? Потому, что это закрытый формат. Потому, что это формат одного приложения. Потому, что этого приложения нет под юниксами, с которыми я работаю. Потому, что это не текстовый формат. Потому, что нет средств автоматической генерации таких документов. Потому, что нет толковых средств управления версиями и коллективной работы. Потому, что это формат разметки печати, а не смысловой структуры, и нет возможности их соотносить. Потому, что при экспорте получается совершенно неудовлетворительный HTML. Потому, что качество верстки и печати ниже среднего.

      Почему не TEX? Потому, что это слишком низкоуровневый язык. Его не дашь в руки начинающему. Потому, что это формат разметки печати, а не смысловой структуры. Потому, что мало TEX-ориентированных редакторов. Потому, что нет удовлетворительных средств экспорта в Word.

      Почему не HTML? Потому, что само понятие HTML сильно размыто гонкой WWW за коммерцией и войной производителей браузеров друг с другом. Потому, что HTML страдает все тем же недостатком: ориентирован на представление, а не на структуру. Потому, что он очень беден выразительными средствами, и отсутствуют возможности его расширения. Потому, что не решена проблема корректной русификации. Потому, что нет удовлетворительных средств экспорта в Word.



Почему SGML а не HTML или какой нибудь другой формат ?


SGML предоставляет не только форматирование. Вы можете автоматически генерировать индексы, оглавления, и ссылки внутри документа или на внешние источники. Пакеты Jade и OpenJade позволяют вам экспортировать (далее это называется "визуализацией") SGML в LaTeX,info,text,HTML и RTF. Из этих базовых форматов вы можете затем создать другие, такие как : MS Word,PostScript,PDF и т.д. . Программы подобные Lyx, позволяют вам писать документы в формате TeX, затем экспортировать их в SGML и визуализировать из него в любой другой формат. SGML описывает как элементы работают а не на том как они выглядят. Он позволит вам писать документы быстрее, т.к. вам не нужно заботиться о размещении параграфов, размерах шрифтов и тому подобных вещах.



Почитать на ту же тему на сайте «Софтерра»:


LyX и LaTeX: организация взаимодействия. Часть 2(http://www.softerra.ru/freeos/16959/)

Вторая часть статьи, посвящена собственно взаимодействию с LaTeX, работе с несколькими кодировками и выбору шрифтов. Так же несколько слов о KLyX.

Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с (http://www.softerra.ru/site/rules/)


LyX и LaTeX: организация взаимодействия. Часть 1(http://www.softerra.ru/freeos/16826/)

Первая часть статьи о подготовке текстов в LyX. Отличиях документов LyX и LaTeX. Настройке LyX.

Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с (http://www.softerra.ru/site/rules/)




Vim. [Быть] [М|м]ожет он действительно - лучший?(http://www.softerra.ru/freeos/12402/)

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

Vim-2 или "что может быть проще?"(http://www.softerra.ru/freeos/12607/)

Продолжение разговора об отличном редакторе vim. С дополнениями и развернутыми примерами настройки.

Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с (http://www.softerra.ru/site/rules/)



ПОИСК , И ЗАМЕНА


^S/^R Мягкий поиск вперед/назад DEL Вернуться ^G Прервать поиск ^S Повторить поиск M-% Поиск и замена query-display " " - выполнять замену, DEL прерваться



Поиск и замена текста


Команда поиска в большинстве версий Emacs реализована в виде, так называемого, "инкрементного поиска" ("incremental search"). Нажмите C-s и введите образец для поиска в строку минибуфера "n". По мере ввода текста курсор будет перемещаться по тексту выделяя обнаруженные с образцом совпадения.

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


Результаты инкрементного поиска после ввода первого символа.

После того, как будет набрана следующая буква - "a", курсор перепрыгнет в "n" слова "than" - следующую позицию после обнаруженного образца "ha" (см. рис. Результаты инкрементного поиска после ввода второго символа.).


Результаты инкрементного поиска после ввода второго символа.

Напечатайте "z" и курсор перейдет в "e" после фрагмента "haz" в слове "hazel" (см. рис. ).


Результаты инкрементного поиска после ввода третьего символа.

Если Emacs не смог найти образец в тексте, то в окне минибуфера появится соответствующее сообщение. Например, если вместо "haz" набрать "hazx", то в окне минибуфера появится сообщение:

Failing I-search: hazx

Если искомый фрагмент найден и нужно найти следующий, нажмите C-s еще раз. Чтобы остановить процесс поиска нажмите Enter.

Другая полезная клавиша при поиске - это клавиша Backspace. Ее используют, чтобы удалить последствия последней нажатой в окне минибуфера. Например, в рассмотренной выше ситуации если нажать Backspace после нажатия "z", когда Emacs нашел фрагмент "haz", курсор перепрыгнет обратно в слово "than", обнаруженное по фрагменту "ha".

Поиск по тексту в обратном направлении осуществляется точно также, как поиск в прямом направлении, с той лишь разницей, что для запуска команды поиска нужно нажать C-r. Точно так же поиск будет осуществляться в соответствии с вводимыми в образец буквами, пока либо Emacs не сможет найти образец в тексте, либо пользователь не прервет операцию поиска нажатием клавиши Enter. Точно также для поиска в обратном направлении работает клавиша Backspace.


В редакторе Emacs есть несколько команд осуществляющих операции замены (Search and Replace). Наиболее универсальная команда query-replace запускается при нажатии комбинации M-% или из пункта меню Query Replace... (меню Edit). При нажатии M-% в окне минибуфера появляется сообщение:

Query replace:
Введите строку, которую нужно заменить и нажмите Enter. Допустим нужно заменить фразу "my fault" на фразу "your fault". После того, как введена строка для поиска - "my fault" - и нажат ввод, в окне минибуфера появится следующее сообщение:

Query replace my fault with:
Введите строку для замены - "your fault" и нажмите Enter. После этого Emacs попытается сначала найти строку в соответствии со строкой для поиска. Если образец не найден, то в окне минибуфера появится сообщение: Replaced 0 occurrences. Если образец обнаружен, то появится сообщение:

Query replacing my fault with your fault: (? for help)
Нажмите ?, и на экране появится список опций. Наиболее важные из них следующие:
y Заменить найденный фрагмент и искать следующий. Тот же эффект дает нажатие пробела.
n Замену не проводить, искать следующий.
q Замену не проводить. Прекратить операцию поиска.
! Заменить все обнаруженные в тексте фрагменты без дополнительного подтверждения.

Поиск текста


Редактор vi предоставляет два вида поиска : строк и символов. Команды "\" и "?" для поиска строк. При выполнении этих команд в нижней части экрана отображается строка введенная вами для поиска. Различие между командами "\" и "?" : "\" осуществляет поиск вниз по файлу, а "?" - вверх. Команды "n" и "N" повторяют поиск в том же или противоположном направлении соответственно. Некоторые символы имеют специальное значение в редакторе vi - поэтому перед ними должен быть введен символ \.

Специальные символы :

^ начало строки. . любой один символ. * любое число символов. $ конец строки. [ определяет набор символов для поиска. Например : /f[iae]t определит любую комбинацию из следующих : fit fat fet или /a[^bcd] определит любую комбинацию кроме : ab ac ad. < начало или конец слова. Например : /\<the\> определит только слово the, но не there and other. > смотри описание выше.

Символьный поиск осуществляется в текущей строке командами "f" и "F". Команда "f" осуществляет поиск вперед, "F" - назад, курсор перемещается в позицию найденного символа.

Действие команд "t" и "T" аналогично действию "f" и "F". Различие между ними в положении курсора : после выполнения команды "t" курсор перемещается в позицию перед найденным символом, после выполнения команды "T" - после найденного символа.

Повтор поиска осуществляется командами ";" и ",". Команда ";" повторяет поиск в том же направлении, команда "," - в противоположном.

Установка переменной "ic" (:set ic) позволяет осуществить поиск не учитывая регистр.


, Повторить последнюю команду "f", "F", "t" или "T" в обратном направлении. / Искать определенную строку вперед по файлу. ; Повторить последнюю команду "f", "F", "t" или "T". ? Искать определенную строку назад по файлу F Искать определенный символ вперед в текущей строке. При успешном выполнении - курсор перемещается в позицию найденного символа. N Повторить последний поиск "/" или "?" исключая обратное направление. T Искать определенный символ вперед в текущей строке. При успешном выполнении - курсор перемещается в позицию после найденного символа. f Искать определенный символ в текущей строке. При успешном выполнении - курсор перемещается в позицию найденного символа. n Повторить последний поиск "/" или "?". t Искать определенный символ в текущей строке. При успешном выполнении - курсор перемещается в позицию перед найденным символом.



Полезные тэги


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



Политика


Осенью 2002 года RedHat выпустил в свет свой новый дистрибутив. Революционным в нем было равнение на кодировку UTF-8 (этакий Unicode начального уровня). Этот шаг был воспринят весьма неоднозначно в кругах российских гуру. Многие из них считают, что в Linux'e можно прекрасно жить и работать в koi8-r или в cp1251. Эта статья для тех, кто так не считает и по каким-либо причинам (это модно/можно открывать один и тот же файл в MS Notepad и в GNOME gedit/это что-то новенькое/и т.д.) хочет начать использовать эту кодировку.

Я не создатель дистрибутивов, а простой (довольно ламернутый) пользователь Linux, который хочет просто удобно работать и быть совместимым с внешним миром. Поэтому я могу себе позволить быть сколь угодно критичным и высказывать мнения, от которых обычный UNIX-гуру начнет метать искры направо и налево. Честно говоря меня уже давно начал бесить зоопарк в различных кодировках. Тебе присылают документ в одной кодировке - надо перекодировать его в другую. Unicode как раз и нужен для того, чтобы исключить такие ситуации, ибо эта кодировка хоть и медленно, но таки становится стандартом (не без помощи XML, кстати).

Перед тем, как читать документ дальше, давайте остановимся на постулатах, на которых основывается этот документ:
1. koi8-r/cp1251/cp866/translit - полный отстой для старых перцев. Их (кодировки) надо "резать к чертовой матери, не дожидаясь перетонитов!"
2. UTF-8 и Unicode вообще - рулят адназначна.
3. (Опционально и на любителя) GNOME рулит!

Если вы согласны с 1 и 2 - читаем дальше.



Поля


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

На поля можно ссылаться из AWK программы следующим образом:

$1 - Первое поле;

$2 - Второе поле;

... и так далее...

$0 - Ссылается на всю строку целиком.

Строка может содержать максимально до 100 полей.



Полноэкранный редактор vi


Редактор vi - универсальный полноэкранный текстовый редактор в среде UNIX. Универсальность означает, что, во-первых, этот редактор есть во всех UNIX-подобных ОС и, во-вторых, этот редактор работает с практически любым видом терминала (ANSI, VT100, VT220, VT320, DEC, и т. д.).(База данных, содержащая описание известных системе терминалов находится в файле /etc/termcap.) Эта универсальность обернулась несколько непривычным (для пользователей DOS) пользовательским интерфейсом: для управления редактором используются лишь ``обычные'' кнопки клавиатуры (алфавитно-цифровые символы и знаки препинания).

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



Получение значений атрибутов


конструкция @att возвращает значение атрибута att. Например:

<!-- hello_style.xml -->

<hello> <text color="red">Hello World!</text> </hello>

XSLT-преобразование:

<!-- hello_style.xsl --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/"> <html> <head> <title> <xsl:value-of select="//text"/> </title> </head>

<body> <p> Содержимое узла <b>text</b> корневого элемента: <b><xsl:value-of select="//text"/></b> и его атрибут <b>color</b> : <xsl:value-of select="//text/@color"/> </p> </body> </html> </xsl:template>

</xsl:stylesheet>

Результирующий HTML-документ:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Hello World! </title> </head> <body> <p> Содержимое узла <b>text</b> корневого элемента: <b>Hello World!</b> и его атрибут <b>color</b> : red </p> </body> </html>

Если вы задумаете использовать атрибут color для вывода текста Hello World! соответствующим цветом, то сделать это можно двумя способами: создать переменную и использовать ее для задания цвета шрифта или воспользоваться элементом xsl:attribute.



Помощь при вводе ссылок на объект


Команда sgml-complete (М-Tab) помогает завершить ссылку на объект, тэг, или любой заранее определенный набор слов и символов. Ранее было показано, что PSGML может "дописывать" названия типа элемента. Аналогичный режим возможен при вводе ссылок.

PSGML распознает режим ввода ссылок, когда пользователь вводит амперсанд. После этого можно M-Tab, и в отдельном окне появится список всех допустимых объекты. Если после амперсанда введено достаточное количество символов, то PSGML "допишет" название ссылки, как это происходит в случае с названиями элементов.

Команда sgml-complete "дописывает" также объявления разметки, которые чаще всего используются в DTD, чем в тексте документа. Например, введите "<!" и нажмите M-Tab. Откроется новое окно, содержащее следующий список возможных завершений:

sgml doctype
element entity
usemap shortref
notation attlist
uselink linktype
link idlink



Посчитать количество строк (input)


SED: $= (10.2 c.)

AWK: END { PRINT NR } (15.0 c.)


SED: $= (10.2 c.)

AWK: END { PRINT NR } (15.0 c.)



POSIX


    Сначала - немного ... 

    Теперь по делу.

    Для установки в POSIX-системе новой locale c другим набором символов (charset) применяется утилита

для  компиляции Файла Описания Локализации и Файла Описания Набора Символов ().

$ localedef -c -i ru_RU -f KOI8-R ru_RU.KOI8-R

    Для проверки установленных в POSIX-системе charset-ов применяется утилита :

$ locale -m $ locale charmap

    Для преобразования потока символов из одного charset в другой, в стандарте POSIX

существуют утилита  и функция .

    В системе существует утилита tcs.

   

Содержание

Last change : 08-10-1999



POSIX locale


    В POSIX

(Portable Operating System) были определены средства локализации, названные locale

(к сожалению, не существует адекватного русского перевода этого термина). Locale (англ.) - местные особенности.

   Locale - это такое системное средство (фича ;-) позволяющее настроить систему на работу с данными в конкретном национальном (местном) представлении. Отдаленно напоминает средство CodePage в MS-DOS или OS/2.

    Средства POSIX locale охватывает немого больший круг понятий, чем просто работа с национальными .

    Зачем ? Дело в том, что кроме собственно языка общения и алфавита, в разных странах различаются такие обычаи, как представление даты, времени, финансовых величин и т.д. Эти "культурные правила"

уже закреплены традицией и национальными стандартами, иногда довольно давно, поэтому при "локализации" программных продуктов существует необходимость в настройке их еще и на эти "культурные правила". В стандарте POSIX

культурные правила объединены в группы - категории локализации.

 * ПРИМЕЧАНИЕ : В принципе, каких "культурных нюансов" можно найти много. См. например статью : Colors, Buttons, Words and Culture: Designing Software for the Global Community (копия здесь) или Internationalization. Но в большинстве случаев, для машинной обработки информации вполне хватает понятий POSIX  locale.

    Структурно, средства POSIX locale

состоят из следующих компонентов :

Набор библиотечных (libc) вызовов (locale API): , isalpha(), , e.t.c.

Переменные окружения, для управления средствами locale : , LC_CTYPE. e.t.c.

Утилита для получения информации о средствах locale

:

Исходные тексты описания locale : locale definitions,

Утилита для изготовления (компиляции) объектов локализации :

Собственно объекты локализации (наборы данных locale) : /usr/share/locale/*

*    *    *

    Существующая также "система управления сообщениями на национальном языке" : (Native Language Support) формально не входит в POSIX locale, хотя во многом дополняет функции locale.

    Также довольно тесно пересекаются с locale

такие механизмы POSIX как поддержка многобайтных (multibyte) и "широких" (wide-char) символов. Эта связь не очень заметна для европейских языков, но в для поддержки алфавитов с большим числом знаков (японский ~2000, китайский ~8000, UNICODE ~25000) это становится жизненно необходимо.

* ПРИМЕЧАНИЕ : POSIX locale HЕ ИМЕЕТ накакого отношения к физическому в UNIX и к проблемам работы терминала, клавиатуры и печатающих устройств с национальными символами.


В первую очередь, конечно, необходимо читать man

:) по функциям POSIX.1 :

, /isxxxx(),,

и т.д.

Также man по утилитам POSIX.2 и .

И конечно их исходные тексты (начиная с версии Linux libc 5.3.x или GNU libc 2.0.x).

Сведения по : man ,,

В исходных текстах libc, man - примеры message catalog-ов.

Также неплохо посмотреть GNU info-pages по теме libc / Locales.

HTML-версия GNU info есть например на

Документы группы JTC1/SC22/WG15 - POSIX

Различные документы GNU , в частности:

или локально : .

Перевод: (хост умер ?)

Страничка от - главного идеолога и разработчика средств

locale в библиотеке GNU libc и Linux libc :

и его доклад :

Спецификации POSIX.1 и POSIX.2 .

(ISO/IEC 9945-2:1988, 1990, 1992, 1996 от

* ISO и

* IEC или, что то же самое,

IEEE Std. 1003.2-1992) и POSIX.2a, POSIX.2b .

* IEEE

Hа утверждается, что это стоит денег, поэтому лучше всего поглядеть на

(там правда draft версии)

или соответственно, через WWW. Например :

- он же, через WWW виден как :

, далее :

e.t.c.

Спецификации XPG3/XPG4 от X/Open Co Ltd. (за деньги :(( ) на :

Коллекция locales и charmaps в исходном виде для POSIX.2

и прочие документы пограммы i18n. Ведет ее Keld Simonsen <> :

Русскиe charset  ISO_8859-5, KOI8-R, CP1251, e.t.c.

Русская locale ru_RU.

World Currencies and Abbreviations. По мотивам ISO 4712 :



Последние советы


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

GTK1-приложения: я использую два таких приложения - Ximian Evolution и Gimp. В Ximian Evolution русский язык включается так:
Tools -> Settings -> Fonts Preferences, где нужно выбрать любые шрифты на ваш вкус (я вот выбрал Arial) и указать кодировку ISO10646-1.
В gimp при нанесении текста на рисунок возникает практически такой же диалог, где нужно выбрать все тоже самое , что и в случае с Evolution.

GTK2-приложения: самое главное приложение - это gnome-terminal: Edit -> Current Profile -> Font и далее выбрать любой юникодный шрифт, содержащий русские буквы (я предпочитаю Lucida Console).

Web site engine's code is Copyright © 2002 by . All Rights Reserved. PHP-Nuke is Free Software released under the .
Page Generation: 0.174 Seconds



Последовательность вызова утилит LaTeX


Обычно файлы LaTeX имеют расширениеtex. Эти tex-файлы преобразуются в так называемые файлы, не зависящие от устройства (dvi). dvi файлы являются двоичным представлением исходного текста. Их можно просмотреть в консольном режиме с помощью dvisvga (при условии, что терминал поддерживает графику высокого разрешения), или, например, с помощью xdvi в среде X11. Часто файлы dvi преобразуют в Postscript с помощью dvips. Если предпочтителен формат PDF, то утилита pdflatex может создать pdf из tex за один шаг.



Повторители


Командам и движениям курсора можно давать повторители (числа), например

2w - передвинуть курсор на два слова вперед

10l - передвинуть курсор на десять символов вправо

d10l - стереть десять символов справа от курсора

2d10l - стереть двадцать символов справа от курсора

5J - слить пять последующих строк в одну

4. - повторить последнюю введенную команду четыре раза



Пользователи ОС Linux, использующие новые


Пользователи ОС Linux, использующие новые терминальные эмуляторы такие как xterm gnome-terminal, kvt, aterm, могут пропустить этот раздел. Переменная "$TERM" у них всегда по умолчанию имеет правильное значение.
Редактор Vi работает в полноэкранном режиме, поэтому использует информацию о типе терминала. Когда вы соединяетесь с "wiliki" ("wiliki" - имя главного инженерного сервера в Гавайском университете) он требует указания типа вашего терминала. Например : TERM = (vt100)
Если у вас данный тип терминала (или эмулятор поддерживающий этот тип) просто нажмите клавишу "Enter". Если у вас термнал hp, введите hp и нажмите клавишу "Enter". Если вам не известен тип терминала - спросите совет у лаборанта.
Если вы допустили ошибку указав неверный тип терминала - ничего страшного, просто завершите сеанс работы. Следующие команды помогут исправить установки системы :
Во-первых установите переменную TERM (если вы не знаете какая оболочка используется в системе выполните команду echo $SHELL). В примерах подразумевается тип терминала vt100. Замените его при необходимости используемым вами. Для оболчки C (/bin/csh) используйте следующую команду : set term=vt100 Для оболочек Bourne (/bin/sh) или Korn (/bin/ksh) :
export TERM TERM=vt100 Далее перезапустите ваш терминал : tset
Теперь, после правильной установки типа терминала, начнем изучение редактора Vi.

Предупреждения для использования VI на рабочих станциях


При использовании рабочих станций для работы с редактором vi необходимо помнить следующее : многократное одновременное редактироване одного и того же файла и изменение размера экрана.

Vi использует копию файла для редактирования и сохраняет изменения в существующий файл. Поэтому если редактируется один и тот же файл одновременно несколько раз - при сохранении результатов одна копия может переписать другую. Будьте уверены, что используется один сеанс для редактирования файла.

При работе с терминальной программой можно изменить размеры экрана. Если возникли проблемы с экраном, что является редкостью, выполните команду :
eval `resize` или :
eval `/usr/bin/X11R6/resize`



Preferences


Содержание его вполне понятно, что это настройки, среди которых:

включение/выключение строки состояния (Statistic Line, Alt+A) и строки поиска (Incremental Search Line); выведение/скрытие нумерации строк (Show Line Number); выбор языкового режима (Launguage Mode, в смысле - языка программирования, а не человечьего); включение/выключение автоматических отступов в тексте (Auto Indent); настройка режима переноса строк (Wrap); установка величины табуляции (Tabs); выбор экранного шрифта (Text Font); включение/выключение подсветки синтаксиса (Highlight Suntax); разрешение (или запрещение) создания резервных копий редактируемого документа при записи (Make Backup Copy, *.bck); включение/выключение Incremental Backup и Show Matching (...), смысл которых остался для меня не вполне ясным; включение/выключения забоя при наборе (Overtype, Ctrl+B); установка запрета изменения (Read Only) текущего документа.

Уже из этого краткого перечня можно представить себе возможности настройки редактора NEdit, о чем я подробнее буду говорить в следующем разделе. Пока же отмечу только, что все эти настройки имеют силу только в текущем сеансе. Чтобы сделать их перманентными, требуется внести соотвесттвующие изменения в пунктах Default Setting (о чем - ниже), и сохранить их (Save Default). Пункт пятый меню - не национальность, и даже не "На что жалуетесь"; напротив, это -



Преобразование документа в формат PDF


Документ DocBook можно преобразовать к другим форматам. Кроме PDF мы можем преобразовать к следующим форматам : веб, PostScript, Tex, RTF - который может быть прочитан такими редакторами как WordPerfect, Word, StarWriter и др. Но в этой заметке мы рассмотрим преобразование только в PDF формат.

Документы DocBook могут быть созданы с помощью любых текстовых редакторов, например Vi или Nedit. Но лучше использовать Emacs : Norman Walsh написал "Emacs major mode for docbook" [3], содержащий полезные дополнения : завершение имен элементов, вставка шаблонов.
Кроме того, могу предложить примеры, используемые в данной заметке.

Как было сказано раньше - нам необходим шаблон и программное средство, которое использует данный шаблон для преобразования DocBook документа в PDF формат. В действительности шаблон не преобразует DocBook документ в формат PDF, но создает TeX файл. Мы используем шаблон Norman Walsh's Modular DocBook Stylesheets, написанный на DSSSL.

Для использования шаблона DSSSL необходим редактор DSSSL. Я использую Jade, разработанный Джеймсом Кларком (поддержка продукта прекращена). Замена - OpenJade, но я его не использовал.

Обратите внимание - программные пакеты (Modular Stylesheets, Jade и JadeTex) входят в состав дистрибутивов, использующих пакетную установку (RedHat, Suse, Corel, Debian)! Поэтому сначала посмотрите вашу инсталляционную программу, CD или веб сайт дистрибьютора.

Я использую Debian и Walsh's Modular Stylesheets у меня инсталлированы в /usr/lib/sgml/stylesheets/dsssl/docbook/nwalsh/print/ и используют параметр "-d" для Jade и "-t" для TeX расширения файла : egonw@localhost> ls -al total 3 -rw-r--r-- 1 egonw egonw 2887 Apr 8 22:06 docbook_article.xml egonw@localhost> jade -t tex -d /usr/lib/sgml/stylesheets/dsssl/docbook/nwalsh/print/docbook.dsl docbook_article.xml egonw@localhost> ls -al total 21 -rw-r--r-- 1 egonw egonw 2887 Apr 8 22:06 docbook_article.xml -rw-r--r-- 1 egonw egonw 17701 Apr 8 22:29 docbook_article.tex Jade создает TeX файл. Этот файл можно преобразовать в PDF формат используя утилиту pdfjadetex, входящую в пакет JadeTeX:

egonw@localhost> ls -al total 21 -rw-r--r-- 1 egonw egonw 2887 Apr 8 22:06 docbook_article.xml -rw-r--r-- 1 egonw egonw 17701 Apr 8 22:29 docbook_article.tex egonw@localhost> pdfjadetex docbook_article.tex Получаем файлdocbook_article.pdf. Обратите внимание на добавление множества служебной информации - заголовок в начале каждой страницы, использование различных шрифтов. В начале изучения DocBook я тратил много времени на составление подходящих сочетаний. Эта заметка показывает только одно из таких сочетаний.



Преобразование файлов в другие форматы в Linux


Автор: Сергей Яремчук, grinder@ua.fm
Опубликовано: 27.11.2002

© 2002, Издательский дом «КОМПЬЮТЕРРА» | http://www.computerra.ru/
Журнал «СОФТЕРРА» | http://www.softerra.ru/
Этот материал Вы всегда сможете найти по его постоянному адресу: http://www.softerra.ru/util/22068/

Краткое резюме:

PS (PostScript) в BMP: gs -sDEVICE=bmp16m -sOutputFile=test.bmp test.ps PS в TXT a2ps --columns=4 --font-size=10 -j -encoding=koi8 shpora.txt -o shpora.ps или ps2pdf ps2ascii

SGML в HTML, RTF, TXT: linuxdoc --bakend=format(html, rtf, text ...) --papersize=size --language=ru file_name.sgml или sgml2html file_name.sgml

SGML в PDF: gml2latex --output=pdf file_name.sgml

DOC в HTML: wvHtml --charset=koi8-r test.doc test.html

Перекодировка из WINDOWS-1251 в KOI8R: iconv -f WINDOWS-1251 -t KOI8R cp1251.txt > koi8r.txt

Очень часто при работе с файлами приходится преобразовывать их в другой формат. Особенно этот вопрос актуален для пользователей Linux, потому что в этой системе еще со времен первых Unix'ов сложились свои форматы файлов и при переносе их на компьютеры работающие под управлением Windows возникает проблема работы с файлами этих форматов, которая решается как правилом путем поиска соответствующих программ просмотра. Как вы понимаете, данный вариант не всегда приемлем, так как нужную программу еще надо найти, и еще не будешь же таскать все эти программы с собой и устанавливать на каждом компьютере. Самый простой вариант решения этой проблемы это преобразовать файлы к требуемому формату, который может быть прочитан на нужном компьютере.

В данной статье будут рассмотрены варианты преобразования только текстовых файлов из одного формата в другой, не будет затронуты вопросы преобразования графических, звуковых файлов и варианты преобразования с одного языка программирования на другой. Хочу еще предупредить, что все эти программы консольные. Что, отстой! Кричат некоторые пользователи. Да, я в принципе согласен, недостатки на лицо. Необходимо помнить не только название программы (впрочем, не совсем так, автодополнение в bash еще ни кто не отменял), но и различные параметры и опции. Но, есть и положительные стороны. К ним относится малый размер программ, малое время загрузки в оперативную память, отсюда и меньшее время выполнения, отсюда и меньшие требования к системным ресурсам (не у всех же Атлоны и четвертые пеньки).

А еще представьте такую ситуацию, что вам надо преобразовать сразу несколько файлов и еще сменить некоторые параметры, вручную через «Сохранить как …» не совсем удобно да и время, понимаете ли, а в консоли это возможно. Также в программах большинство опций унифицировано, и запомнив параметры одной, научится работать в аналогичной не составит большого труда. И еще, практически все рассмотренные программы входят в стандартную поставку так, что искать их по Интернету не придется.

Итак, по порядку. С первой проблемой с которой я столкнулся была необходимость перенести документ в формате PostScript на компьютер работающий под Windows с этого пожалуй и начнем. Итак, первая программа вызывается gs. Просто набрав данную команду с названием файла с расширением ps вы можете просто просмотреть указанный файл, а добавив опцию sDEVICE=<devname> можно преобразовать в другой формат или подготовить файл для выдачи на принтер определенной марки, а с помощью опции sOutputFile= , как вы поняли можно указать имя выходного файла. Вот так можно конвертировать файл PostScript в рисунок с расширением bmp. gs -sDEVICE=bmp16m -sOutputFile=test.bmp test.ps . Для преобразования из ps в pdf формат существуют программы специально для этого предназначенные. Они так и вызываются ps2pdf. Причем существуют несколько программ. ps2pdf – по умолчанию преобразует в формат pdf 1.2 (Acrobat 3.0 и выше) который можно сменить используя опцию -dCompatibility=1.x. Напомню, что максимальный 1.4 используется в Adobe Acrobat 5.0. Если сразу захотите задать формат, то можно воспользоваться программами ps2pdf12 или ps2pdf13. Формат вызова программы такой ps2pdf13 input.ps output.pdf , если вместо имени файла используется тире «-» то в качестве входного (выходного) файла используется стандартный ввод (вывод). Кроме этого существует множество аналогичных программ для конвертирования в другие форматы, например ps2ascii.

Следующий формат с которым часто придется сталкиваться в Linux это SGML. Для того чтобы вы могли его преобразовать необходимо установить пакет linuxdoc. Так как сам формат наиболее близок к HTML, то к нему и будем по началу преобразовывать. Формат вызова команды такой:
# linuxdoc --bakend=format(html, rtf, text ...) --papersize=size --language=ru file_name.sgml

Я думаю, что приведенные параметры очевидны. Чтобы упростить жизнь юзеру и здесь есть отдельные команды для преобразования к тому или иному формату. Например, следующая команда конвертирует из SGML в HTML. sgml2html file_name.sgml А с помощью опции -I – в создаваемые файлы, можно добавить ссылку на файлы изображения (next, prev, toc), которые копируются с каталога /usr/share/linuxdoc-tools/icons/ (рис.1) в текущий. А чтобы преобразовать в формат pdf выполните следующую команду:
sgml2latex --output=pdf file_name.sgml причем в образованном файле будут работать все имеющиеся гиперссылки. Следующие программы предназначены для конвертирования документов набранных в формате MS Word (.doc) в другие форматы. Они будут доступны если у вас установлен пакет . После установки пакета будут доступны несколько программ предназначенных для преобразования в разные форматы. Набрав в командной строке wvVersion file_name.doc можно узнать к какой версии Word принадлежит документ. Команда
wvHtml --charset=koi8-r test.doc test.html
, как вы уже поняли, перегоняет документ Word в html-файл и устанавливает для него кодировку koi8-r. Причем программа вполне корректно переносит таблицы и в некоторых файлах генерирует не так уж много мусора. Добавив опцию --password=password, можно преобразовывать файлы закрытые паролем.

Работу с другими форматами я думаю, разберете сами. Следующая программа немного выпадает из общего плана, но полезность ее очевидна. Это программа iconv, входящая в пакет glibs любого дистрибутива, назначение которой перекодирования текстовых файлов с одной кодировки в другую. Формат вызова программы такой iconv -f исходная_кодировка -t необходимая_кодировка old_file < new_file , где возможные варианты кодировок можно узнать запустив программу с опцией --list. Например самая популярная задача по перекодировке выглядит так
iconv -f WINDOWS-1251 -t KOI8R cp1251.txt > koi8r.txt


Cледующая программа antiword предназначена для преобразования документов в формате Word 6, 7, 97 и 2000 в текстовый или файл формата PostScript. После установки программы (make all, make install) создайте в домашнем каталоге подкаталог .antiword (именно с точкой) и перенесите в него все файлы из каталога Resources который находится в каталоге в котором вы распаковали исходные тексты программы. Теперь с помощью вызова antiword -t -m cp1251.txt test.doc можно вывести на терминал содержимое файла test.doc, причем программа вполне корректно (как это вообще возможно на терминале) отображает как содержимое самого файла со всеми элементами форматирования так и таблицы. Если файл находится в кодировке koi8-r то опцией -m необходимо подключить файл koi8-r.txt. Если есть необходимость конвертировать Word'овский файл в формат PostScript воспользуйтесь следующей командой antiword -p a4 -m koi8-r.txt text.doc > 1.ps т.е. добавили размер страницы (доступны еще форматы letter и legal). Кстати при использовании данной программы вам нечего боятся макровирусов они попросту не будут работать.

И напоследок вкратце упомяну об очень мощной утилите a2ps с помощью которой можно подготовить документ к выводу на печать в формате PostScript или в файл. Опций у программы большое количество о некоторых я расскажу. Представьте себе такую ситуацию вы как прогрессивный человек написали себе шпору на экзамен (заметки на лекцию) на компьютере, но естественно в формате А4 нести ее с собой я бы сказал не совсем удобно. Для этого надо уменьшить шрифт и разбить на маленькие части. Для этого выполняем такую команду
a2ps --columns=4 --font-size=10 -j -encoding=koi8 shpora.txt -o shpora.ps
что мы сделали, установили количество колонок текста равным четырем, размер шрифта – 10, параметр -j означает рамку вокруг текста, указали необходимую кодировку, исходный файл и с помощью флага -о выходной, результат посмотрите на рисунке. Опций как я уже говорил много и с помощью них с исходным файлом можно проделать практически все чего душа пожелает.

Вот мы кратко рассмотрели некоторые программы для работы с текстовыми файлами в Linux. Сразу скажу я не старался рассказать обо всех подобных программах по причине их большого разнообразия, а только о наиболее часто мной используемых. Более подробную информацию можно узнать запустив соответствующий man или команду с опцией --help, а лучше оба варианта, я заметил, что информация, выводимая при этом, иногда может отличаться. Успехов.

Телефон редакции: (095) 232-2261
E-mail редакции: inform@softerra.ru
По вопросам размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или электронной почте reclama@computerra.ru


Все любят скриншоты




Давайте взглянем на то, что же у нас получилось - мой рабочий стол:

Стол!!!


[Обсудить]



Пример секции !nedit в файле .Xdefaults для настройки редактора NEdit


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! nedit nedit*text.foreground: black !Задает черный цвет редактируемого текста

nedit*text.background: gray70 !Задает светло-серый (яркость 70%) цвет фона рабочего поля

nedit*text.selectForeground: gray10 !Задает очень темно-серый цвет текста в выделенном фрагменте

nedit*text.selectBackground: gray80 !Задает очень светло-серый цвет фона выделенного фрагмента

nedit*text.highlightForeground: white !Задает непонятно что. Оставлено в пару следующей строке

nedit*text.highlightBackground: green !Задает зеленый цвет подсветки парных элементов (например, скобок)

nedit*text.cursorForeground: black !Задает черный цвет курсора

nedit*text.lineNumForeground: gray47 !Задает среднесерый цвет нумерации строк (которую включаю очень редко)

nedit*text.blinkRate: 600 !Мерцание курсора с частотой 600 миллисекунд

nedit*foreground: black !Задает цвет текста интерфейсных элементов (меню, панелей и прочего).

nedit*background: gray60 !Задает цвет фона интерфейсных элементов (меню, панелей, строки состояния и прочих)

nedit*fontList: -cronyx-fixed-medium-r-*-*-20-*-*-*-*-*-koi8-r !Задает шрифт меню

nedit*font: -cronyx-fixed-medium-r-*-*-20-*-*-*-*-*-koi8-r Задает шрифт сообщений в окне системы помощи

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



Макросы для разметки html-документов


Это разработанная мной коллекция макросов для редактора NEdit, предназначенная для разметки несложных html-документов. Она включает в себя команды для ввода наиболее распространенных структурных тэгов и гиперссылок, то есть того, с чем постоянно сталкиваешься при подготовке существенно текстовых web-страниц. Не претендует ни на изящество кода, ни, даже, на его синтасическую точность, но работоспособны - проверено на собственной шкуре. nedit.macroCommands: \ ! Пункты меню для ввода тэгов рубрик 1-3 порядка (h1-h3) Headers>header1:F1::: {\n\ insert_string("<")\n\ insert_string("h")\n\ insert_string("1")\n\ insert_string(">")\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("h")\n\ insert_string("1")\n\ insert_string(">")\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ Headers>header2:F2::: {\n\ insert_string("<")\n\ insert_string("h")\n\ insert_string("2")\n\ insert_string(">")\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("h")\n\ insert_string("2")\n\ insert_string(">")\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ Headers>header3:F3::: {\n\ insert_string("<")\n\ insert_string("h")\n\ insert_string("3")\n\ insert_string(">")\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("h")\n\ insert_string("3")\n\ insert_string(">")\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ ! Эти макросы вводят тэги параграфа и разрыва строки (p и br, соответственно) Text>paragraph:Ctrl+P::: {\n\ newline()\n\ newline()\n\ insert_string("<")\n\ insert_string("p")\n\ insert_string(">")\n\ }\n\ Text>break:Ctrl+B::: {\n\ newline()\n\ insert_string("<")\n\ insert_string("b")\n\ insert_string("r")\n\ insert_string(">")\n\ }\n\ !Макросы для ввода структурных тэгов strong, emphasis, preformatted text Structure>strong:::: {\n\ insert_string("<")\n\ insert_string("s")\n\ insert_string("t")\n\ insert_string("r")\n\ insert_string("o")\n\ insert_string("n")\n\ insert_string("g")\n\ insert_string(">")\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("s")\n\ insert_string("t")\n\ insert_string("r")\n\ insert_string("o")\n\ insert_string("n")\n\ insert_string("g")\n\ insert_string(">")\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ Structure>emphasis:::: {\n\ insert_string("<")\n\ insert_string("e")\n\ insert_string("m")\n\ insert_string(">")\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("e")\n\ insert_string("m")\n\ insert_string(">")\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ Structure>preformatted:::: {\n\ newline()\n\ insert_string("<")\n\ insert_string("p")\n\ insert_string("r")\n\ insert_string("e")\n\ insert_string(">")\n\ newline()\n\ newline()\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("p")\n\ insert_string("r")\n\ insert_string("e")\n\ insert_string(">")\n\ newline()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ !Этот пункт меню содержит макросы для ввода списков разного рода - маркированных, ! нумерованных, с определениями, а также их элементов Lists>unordered list:::: {\n\ newline()\n\ insert_string("<")\n\ insert_string("u")\n\ insert_string("l")\n\ insert_string(">")\n\ newline()\n\ newline()\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("u")\n\ insert_string("l")\n\ insert_string(">")\n\ newline()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ Lists>oredered list:::: {\n\ newline()\n\ insert_string("<")\n\ insert_string("o")\n\ insert_string("l")\n\ insert_string(">")\n\ newline()\n\ newline()\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("o")\n\ insert_string("l")\n\ insert_string(">")\n\ newline()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ Lists>list item:Ctrl+I::: {\n\ insert_string("<")\n\ insert_string("l")\n\ insert_string("i")\n\ insert_string(">")\n\ }\n\ Lists>definition list:::: {\n\ newline()\n\ newline()\n\ insert_string("<")\n\ insert_string("d")\n\ insert_string("l")\n\ insert_string(">")\n\ newline()\n\ newline()\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("d")\n\ insert_string("l")\n\ insert_string(">")\n\ newline()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ Lists>term:::: {\n\ insert_string("<")\n\ insert_string("d")\n\ insert_string("t")\n\ insert_string(">")\n\ }\n\ Lists>definition:::: {\n\ insert_string("<")\n\ insert_string("d")\n\ insert_string("d")\n\ insert_string(">")\n\ }\n\ Links>local link:Alt+A::: {\n\ insert_string("<")\n\ insert_string("a")\n\ insert_string(" ")\n\ insert_string("h")\n\ insert_string("r")\n\ insert_string("e")\n\ insert_string("f")\n\ insert_string("=")\n\ insert_string("\\"")\n\ insert_string("\\"")\n\ insert_string(">")\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("a")\n\ insert_string(">")\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ !Ввод тэгов для локальных и удаленных ! (последние - с аргументом target="_blank") ! гиперссылок, а также именованных якорей Links>URL:Alt+U::: {\n\ insert_string("<")\n\ insert_string("a")\n\ insert_string(" ")\n\ insert_string("h")\n\ insert_string("r")\n\ insert_string("e")\n\ insert_string("f")\n\ insert_string("=")\n\ insert_string("\\"")\n\ insert_string("\\"")\n\ insert_string(" ")\n\ insert_string("t")\n\ insert_string("a")\n\ insert_string("r")\n\ insert_string("g")\n\ insert_string("e")\n\ insert_string("t")\n\ insert_string("=")\n\ insert_string("\\"")\n\ insert_string("_")\n\ insert_string("b")\n\ insert_string("l")\n\ insert_string("a")\n\ insert_string("n")\n\ insert_string("k")\n\ insert_string("\\"")\n\ insert_string(">")\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("a")\n\ insert_string(">")\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n\ Links>name:::: {\n\ insert_string("<")\n\ insert_string("a")\n\ insert_string(" ")\n\ insert_string("n")\n\ insert_string("a")\n\ insert_string("m")\n\ insert_string("e")\n\ insert_string("=")\n\ insert_string("\\"")\n\ insert_string("\\"")\n\ insert_string(">")\n\ insert_string("<")\n\ insert_string("/")\n\ insert_string("a")\n\ insert_string(">")\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ backward_character()\n\ }\n

Этот листинг может быть просто скопирован в секцию nedit.macroCommands: \

файла .nedit. Для полноты счастья в секцию nedit.shellCommands: \

можно вставить строки netscape:::XS:\n\ konsole -e netscape %\n\

для просмотра редактируемого html-файла. Разумеется, вместо konsole можно указать любую другую программу эмуляции терминала.

Copyleft by



Приложений на базе GTK


Все приложения на базе GTK (GIMP, Slypheed, X-Chat и другие), можно русифицировать добавив в ~/.gtkrc следующие строчки:

style "user-font" { font = "-cronyx-helvetica-*-r-normal-*-12-*-*-*-*-*-koi8-r" }

widget_class "*" style "user-font"



Примечания переводчика


[Если у вас возникнет вопрос: "А почему ссылки не по порядку?", отвечу: "Вам шашечки или чтобы ехать?" ;-)]

Не могу сказать с уверенностью на все "сто", но, по моему, речь идёт о DNS-сервере.

Вообще-то я не уверен в том, есть ли в Объединенном Королевстве хозяйственное мыло. 8-)

Цитата из "Инсталляция Linux и первые шаги", автор М. Уэлш: "Ключевое свойство большинства оболочек Unix -- это способность ссылаться сразу более, чем на один файл, используя специальные символы ... так называемые "дикие карты" (wildcards)..."

Только не спутайте очерёдность ключей.

Автор немного забыл обновить свои автобиографические данные. Судя по всему, теперь он "обычный" студент "обычного" университета. И не исключено, что времени для игры на пианино у него сейчас меньше обычного. В любом случае спасибо ему за то, что нашёл время возобновить работу колонки LWM. 8-)

В скрипт пришлось внести небольшие изменения -- вряд ли вам нужно, чтобы он отсылал пять одинаковых сообщений о том, что не найден конфигурационный файл "/etc/keyfiles.conf".

Copyright (C) 2002, Thomas Adam.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 78 of Linux Gazette, May 2002

Команда переводчиков:
Владимир Меренков, Александр Михайлов, Иван Песин, Сергей Скороходов, Александр Саввин, Роман Шумихин, Александр Куприн, Андрей Киселев

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

Сайт рассылки: http://gazette.linux.ru.net
Эту статью можно взять здесь: http://gazette.linux.ru.net/lg78/articles/rus-adam.html



Пример использования message catalog-a :


/* X/Open XPG4 message catalog test */ #include #include char *MF_EXAMPLE = "example.cat";

main() { nl_catd catd; int error;

(void)setlocale(LC_ALL, "");

catd = catopen(MF_EXAMPLE, 0);

/* Get the message number 1 from the first set.*/ printf( catgets(catd,1,1,"Hello world\n") );

/* Get the message number 1 from the second set.*/ printf( catgets(catd, 2, 1,"Howdy\n") );

/* Display an error message. No message 4 in set 1.*/ printf( catgets(catd, 1, 4, "example: 100.220 Permission is denied to read the file %s.\n"), MF_EXAMPLE);

catclose(catd);

}



Пример применения HTML-редактор своими руками


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

При этом я прекрасно понимаю, что сказанное ниже способно вызвать у профессионального программиста лишь ироническую улыбку. Однако написал я это не показания крутизны для, а токмо к вящей славе редактора NEdit. Каковой позволяет настроить себя под конкретную задачу даже людям с моим уровнем подготовки.

И так, перед нами (то есть вашим покорным слугой) стоит задача составления "из головы" достаточно длинных и относительно структурированных документов, предназначенных в первую голову для размещения в Сети. При этом не исключается возможность, что они в дальнейшем будут воплощены и на бумаге в виде журнальных или книжных публикаций (для чего может потребоваться импорт документа в текстовый процессор или программу верстки). Что нужно для комфортного выполнения этой работы?

Путей - несколько. Можно:

набирать текст в текстовом процессоре (типа StarWriter из комплекта StarOffice) с дальнейшим экспортом в формат html; тем, кто видел html-код, генерируемый текстовыми процессорами, ясно, почему этот вариант я обсуждать далее не желаю; набирать текст в визуальном web-редакторе типа Netscape Composer; однако замечание из пункта первого имеет место быть и здесь (не говоря уже о личной антипатии к Netscape как средству редактирования web-страниц); набирать текст в любом симпатичном и подходящем по возможностям html-редакторе с одновременным расставлением требуемых тэгов штатными его средствами; однако далеко не всегда такие редакторы хорошо приспособлены для столь "примитивной" работы; к тому же, подобно тому, как изобилие форматирующих возможностей текстового процессора нарушает течение оригинальной творческой мысли, всякого рода панели к нопками тэгов не способствуют концентрации мысли на содержательной строне документа; к тому же оба известных мне полнофункциональных html-редактора под Linux обладают одним общим недостатоком: они позволяют набирать текст либо в одну строку (что неудобно визуально), либо с переносом слов через фиксированнное количество знаков с образованием символа возврата каретки (что отнюдь не полезно при импорте в текстовый процессор); набирать текст в обычном текстовом редакторе с последующим помещением в редактор кода html, где и осуществляется его (текста) разметка; что, помимо сложностей с двухэтапным созданием документа, приводит к появлению двух содержательно идентичных (по идее) файлов, какой из которых является более актуальным - удается вспомнить не всегда.


И потому оптимальным представляется составление документа в текстовом редакторе с одновременной разметкой html-тэгами. Но проставлять их вручную, даже если помнишь все наизусть, - занятие достаточно нудное. И посему возникает естественное желание его автоматизировать. Благо NEdit с его развитым макроязыком и простыми средствами его применения такую возможность обеспечивает.
Для начала определимся, какие тэги требуются для каждодневного использования. Это:
во-первых, заголовки нескольких (скорее всего первого-третьего) уровней; во-вторых, тэги образования абзаца (p) и разрыва строки (br); в третьих, структурные тэги strong, emphasis и preformatted text; в четвертых, всякого рода списки (маркированные, нумерованные, списки с определениями) и их элементы; ну и в пятых, естественно, гиперссылки и именованные якоря (a href и a name, соответственно).
Вот в такой последовательности и будем создавать соответствующие макросы. Включаем режим протоколирования (через меню Macro - Learn Keystrokes или комбинацию Alt+K) и просто-напросто набираем с клавиатуры последовательность символов <h1></h1>
Для обеспечения непрерывности набора логично вернуть курсор в позицию между открывающим и закрывающим тэгами, для чего соответствующее количество раз нажимаем клавишу Left. После чего завершаем протоколирование (через меню Macro - Finish Learn или повторным нажатием Alt+K), через меню Macro Replay Keystrokes (или - комбинацию Ctrl+K) проверяем правильность исполнения и переходим в меню Preferences - Default Settings - Customize Menu - Macro Menu.
В появившейся панели Macro Commands указываем в поле Menu Entry Headers>header1
в поле Accelerator приписываем команде клавишу вызова (например, F1, благо она не закреплена за вызовом помощи), при желании определяем мнемоническую литеру (хотя большого смысла в этом я не вижу) и смело жмем на экранную кнопку Paste Learn/Reply Macro. В результате в поле Macro Command to Execute появляется код вроде следующего: insert_string("<") insert_string("h") insert_string("1") insert_string(">") insert_string("<") insert_string("/") insert_string("h") insert_string("1") insert_string(">") backward_character() backward_character() backward_character() backward_character() backward_character()


Поскольку проверку правильности макрокоманды мы уже произвели, нажимаем Apply для ее включения в список и переходим к следующему пункту нашей программы. Конечно, можно повторить протоколирование набора для тэгов заголовков всех уровней последовательно. Но проще - с помощью экранной клавиши Copy скопировать только что созднанный макрос, изменить в поле Menu Entry ее название с header1 на header2, закремить за ней клавишу F2 и в поле Paste Learn/Reply Macro отредактировать код вручную, заменив строки insert_string("1") на insert_string("2")
И подобную процедуру повторить для заголовков всех потребных уровней (вряд ли число их превысит четыре).
Затем переходим к созданию макросов для наиболее часто требующихся при наборе тэгов параграфа и разрыва строки. Порядок действий - идентичный: протоколирование ввода тэга, вызов панели Macro Commands, описание имени команды (с учетом ее положения в иерархическом меню), закрепление свободной комбинации горячих клавиш, помещение "заученного" кода макроса в поле команд для исполнения, включение новой макрокоманды в список доступных. И так - для всех тэгов, которые представляются нам требуемыми при повседневном использовании...
Завершив создание макросов, следует не забыть увековечить их в меню с помощью Preferences - Save Defaults. Псоле чего они будут доступны в последующих сеансах NEdit, поскольку размещаются в секции nedit.macroCommands: файла .nedit.
В приложении 2 я привожу содержимое этой секции после того, как я разработал серию макросов для своих личных целей. Не судите строго: с точки зрения программиста-профессионала, ничего замечательного там не содержится. Но а) этот процесс занял у меня считанные минуты, и б) результатов его мне вполне хватает в 90 случаях из 100.
Что, опять-таки, подтверждает величие и силу редактора NEdit: можно представить себе, как способен настроить его для своих задач человек с достаточной программистской квалификацией...
Чего еще хотелось бы от несложного html-редактора? Ну конечно, визуализации производимых изменений в каком-либо внешнем браузере. Каковым, с большой долей вероятности, будет Netscape Navigator текущей версии.
Для этого мы прибегнем к настройке меню Shell (Preferences - Default Settings - Customize Menu - Shell Menu). В соотвествтующей панели определяем, как рассказывалось ранее, поле имени команды; если есть желание просматривать плоды своих трудов в разных браузерах, можно создать иерархическое меню вроде Browser>netscape Browser>lynx Browser>opera


оставляя, скорее всего, пустыми поля Accelerator и Mnemonic (не столь это частая процедура, вызов внешнего браузера, чтобы тратить на нее драгоценную клавишную комбинацию, коих и так не в избытке).
А затем вводим в поле Shell Command to Execute строку konsole -e netscape %
или иную любимую терминальную программу в качестве первого элемента (xterm. rxvt, etc.). И ни в коем случае не забыв параметр %, предписывающией Netscape отображать именно редактируемый в NEdit файл.
Теперь разбираемся с переключателями. В линейке Command Input логично отметить значение None (иначе есть риск получить по закрытии Netscape пустой файл), в линейке Command Output - значение same window. Кроме того, не худо включить также опцию записи текущего файла перед выполнением команды (Save file before executing command).
Все, принимаем изменения (экранной клавишей Apply) и проверяем действие команды. Если все нормально, выбор из меню Shell пункта netscape должен вызвать появление сначала терминального окна, а затем - окна браузера Netscape Navigator, отображающего редактируемый файл в текущем его состоянии. Если да - сохраняем ситуацию (через меню Preferences - Save Defaults) и с гордым и независимым видом пользуемся собственноручно созданным html-редактором...

Пример (XPG4):


Данный пример демонстрирует три этапа получения сообщения из каталога:



Присваивание


Оператор присваивания имеет вид:

&lt переменная&gt = &lt выражение&gt

Начальное значение переменной 0 или `` '' (пробел). Допускаются другие типы присваивания в соответствии с языком ``С'': "+=","-=","*=","/=","%=".

&lt переменная&gt ++, ++&lt переменная&gt - увеличение значения переменной на 1.

&lt переменная&gt --, --&lt переменная&gt - уменьшение значения переменной на 1.



Прямое форматирование


Texinfo определяет обширный набор команд прямого или "физического" форматирования, помечающих части текста, как код, пользовательский ввод, имя файла и т.д.

@emph{набранный-курсивом-текст}

Отображает набранный-курсивом-текст (сюрприз:) курсивом. В Info курсивное начертание "приближенно" изображается с помощью символов подчеркивания, как скобки охватывающих _набранный-курсивом-текст_.

Пример:

Для обработки файлов Texinfo

пользуйтесь tex(1) @emph{а не}latex(1).

@strong{текст-набранный-жирным}

Отображает текст-набранный-жирным шрифтом жирного начертания. В Info этому "примерно" соответствует символы "звездочка", охватывающие *текст-набранный-жирным*.

Пример:

Файлы Info @strong{не могут} содержать

графику высокого разрешения.

@file{имя_файла}

Выделяет имя_файла, окружая его одиночными кавычками, например так filename'. При подготовке версии для печати имя_файла печатается шрифтом пишущей машинки.

Пример:

Убедитесь, что в вашей Linux-системе

установлена самая свежая версия @file{texinfo.tex}.

@url{универсальный-локатор-ресурса}

Таким образом в тексте выделяется универсальный локатор ресурса (URL). В экранной версии универсальный-локатор-ресурса будет помещен в угловые скобки. При выводе на печать угловые скобки не добавляются, но универсальный-локатор-ресурса набирается моноширинным шрифтом "пишущей машинки".

Пример:

Дополнительная информация по Texinfo

можно найти на @url{}.

@code{код-программы}

Служит для выделения коротких участков программного кода.

Предпочтительной является форма @code{bless}

с двумя аргументами, поэтому всегда пишите

@code{bless $objref, $class}.

@samp{текст, набираемый "как есть", буквально}

Помечает символы, непосредственно набираемый текст, имена символов и т.д.

Угловые скобки (@samp{<}, @samp{>}) являются

основным разделителем в HTML.

@var{текст, подлежащий замене}

Помечает мета-синтаксические [meta-syntactic] переменные, знаменитые foo и bar.

Команды Perl @code{bless} лучше всего вызывать


с двумя аргументами, например так @code{bless

@var{object_reference}, @var{classname}}.


@kbd{названия клавиш}

Помечает отдельные клавиши или серии клавиш.

В emacs, нажмите @kbd{C-h i} для вызова

встроенного браузера Info, или наберите @kbd{M-x

info}.


@command{имя-команды}

Помечает имя команды.

Двумя наиболее важными командами шелла являются

@command{ls} и @command{cd}.


@option{имя-опции}

Метит имя опции командной строки @option вот так:

Опция @option{--html} заставляет

@command{makeinfo} создавать на выходе файл HTML

вместо файла Info.

@option не подходит для форматирования синопсиса команды. Для того, чтобы оформить краткое описание использования команды лучше воспользоваться окружением @example. Скажем так:

@example

makeinfo --html --output=@var{output-filename} @var{input-filename}

@end example

а в блоке текста к опциям обращаться, как @option{--html} и @option{--output}, а к аргументам команд как @var{output-filename} и @var{input-filename}.




ПРОЧЕЕ


[^X] ^Z Выйти в ОС (suspend-emacs) ESC ! Выполнить команду shell по запросу (shell-command) M-x shell Открыть окно с shellом



Прочие клавиши


Escape: прекращение текущей операции, аналогично выбору клавиши Cancel в диалоговых панелях.

Backspace: действует обычным образом, то есть удаляет символ перед позицией курсора.

Ctrl+Backspace: удаление слова перед позицией курсора.

Arrows:

Left: смещение позиции курсора влево на один знак; Ctrl+Left: смещение позиции курсора влево на одно слово;

Right: смещение позиции курсора вправо на один знак; Ctrl+Right: смещение позиции курсора вправо на одно слово; Up: смещение позиции курсора вверх на одну строку (экранную, не истинную!) Ctrl+Up: смещение позиции курсора вверх на один абзац; в качестве ограничителя последнего выступает пустая строка; Down: смещение позиции курсора вниз на одну строку; Ctrl+Down: смещение позиции курсора вверх на один абзац.

Ctrl+Return: перевод каретки с автоматическим созданием абзацного отступа, как в предыдущей строке; действие аналогично включению опции Auto Indent.

Shift+Return: перевод каретки без автоматического создания абзацного отступа, если включена опция Auto Indent.

Ctrl+Tab: вставка ascii-символа табуляции.

Alt+Ctrl+c: вставка управляющего кода, эквивалентного клавише "с".

Ctrl+/: выделение всего документа; соответствует меню Edit - Select All или комбинации menu Ctrl+A.

Ctrl+\: "развыделение", если так можно выразиться, всего документа; то есть действие, обратное комбинации Ctrl+/.

Ctrl+U: удаление части строки от позиции курсора до ее начала.



Прочие консольные редакторы


В числе консольных редакторов, обычно присутствующих в дистрибутивах Linux, можно отметить Joe и Jed

Редактор Joe - многолик. Он способен эмулировать системы команд всех прочих из описанных здесь редакторов - и Vi, и Emacs, и других, о которых я не говорил. Но собственно Joe - это командно-ориентированный, управляемый путем комбинации клавиш ([Control+буква] буква), редактор. Что, как и следовало ожидать, не работает при кириллической раскладке клавиатуры, делая этот редактор малопригодным для работы с объемными русскоязычными документами.

При запуске Joe появляется черный экран, доступный для ввода и редактирования текста. Присутствует также статусная строка, содержащая имя файла, текущие линию и колонку, а также указание для вызова помощи ([Control+k] h); последняя, правда, занимает около трети экрана, но может быть убрана вторичным вводом той же клавишной комбинации.

Редактирование текста основывается на понятии блока и не производит впечатления богатства возможностей. Можно отметить начало и конец блока командами ([Control+b] h) и ([Control+k] k), соответственно, скопировать или переместить его в другое место, а также удалить. Понятия вставки удаленного фрагмента (аналогичного буферу изъятия в emacs) нет.

Интересно, что клавиша Home ведет себя, как в редакторах для DOS, то есть перемещает курсор в начало экранной строки. Подсознательно и от клавиши End ожидаешь "правильного" поведения. Но не тут-то было - вместо этого она вставляет тильду перед позицией курсора. Что крайне раздражает. Хуже этого только необходимость переключаться на латиницу перед выполнением любой rjvfyls. В общем, Joe не показался мне пригодным для использования в мирных целях, по крайней мере в русскоязычной стране.

Текстовый редактор Jed, в отличие от всех описанных ранее - меню-ориентированный, что делает его, казалось бы, более привычным для пользователя, пришедшего из мира DOS/Windows. Во всяком случае, при запуске можно видеть строку меню достаточно стандартного вида - с пунктами File, Edit, Search, Buffers, Windows, System, Help, с выделенными горячими клавишами, активизация которой происходит по нажатии F10, прямо как в Лексиконе.

Однако если Jed был загружен без имени файла, он долго и упорно будет требовать введения такового в командной строке внизу экрана. И на File - Open реагировать не пожелает. Пока не додумаешься выполнить File-Cancel Operation. Только после этого потребный файл можно будет открыть обычным (вернее, привычным) образом.

Дальше - еще интереснее. Ну, то, что ни Home, ни End не работают - ладно, пора уже бы и привыкнуть. Но не работает и delete - удалить введенное можно только клавишей backspace. И меню абсолютно не реагирует на мышь, хотя внутри текста манипуляции мышью осуществляются обычным для Linux-консоли способом.

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

К достоинствам Jed можно отнести возможность работы с несколькими файлами. Что реализуется через новые буферы, аналогично тому, как это сделано в emacs. Можно также работать с двумя (как будто бы, не больше) окнами. В которых может быть открыт один и тот же файл, или разные.

Предусмотрены также различные режимы (кроме основного, текстового) для поддержки различных языков программирования (C, TeX, Forttan и другие; HTML, к сожалению, среди них нет). Однако это не делает Jed более пригодным для решения поставленной перед нами задачи.

Более практичным представляется редактор Pico, входящий в состав широко используемой в Linux почтовой системы pine. Он очень компактен, что позволяет использовать его на слабых машинах. Редактор - командно-ориентированный, все манипуляции в нем осуществляются посредством комбинации Control+буква. Что работает и при кириллической раскладке клавиатуры. Основные клавишные комбинации постоянно присуствуют в нижней части экрана, не требуя чрезмерного напряжения памяти.

Этот редактор не позволяет работать с несколькими файлами или окнами в одной консоли; однако возможна вставка любого числа текстовых файлов с диска в текущий файл.

А так возможности редактирования довольно убоги: можно удалить ([Contol+k], то есть Cut - в том же значении, что и в Windows) строку текста, на которой находится курсор, а затем вставить ее куда либо еще - переместив курсор на новую строку и выполнив команду [Contol+u], то есть UnCut. Есть еще функции поиска, проверки орфографии, а также своеобразно понимаемая опция Justify - вписывание строк, выходящих за границы экрана, в его пределы.

В целом pico, конечно, не очень подходит для работы с объемными текстами. Однако, как мне представляется, почти идеален для правки конфигурационных файлов. Поскольку интуитивно более понятен, чем vi, и много проще в использовании. По крайней мере, для бывших пользователей DOS/Windows.

Хотя еще более привычным для них, вероятно, покажется текстовый редактор, встроенный в файловый менеджер Midnight Commander (о котором шла речь в предыдущей саге). Это, пожалуй, наиболее близкое и родное Linux-создание для старого пользователя DOS. Поскольку напоминает видом редактор из советского народного Командира Нортона, и почти таков же нравом.

Вызывается mcedit, как и редактор NC, по клавише F4, зафиксированной на текстовом файле (можно, конечно, и на любом другом, вопрос только, что вы увидите). Но его можно запустить и автономно, просто набрав mcedit в командной строке: в этом случае открывается пустой файл.

Все в mcedit радует глаз: и привычный синий фон с нерезко белыми буквами, и статусная строка в верхней части экрана, и линейка нумерованных (по функциональным клавишам) операций - внизу. Привычно работают клавиши Home и End, Delete и Backspace; и щелчок мышью в тексте приводит к перемещению курсора в эту позицию. Правда, в отместку за это не работает вставка выделенного фрагмента по щелчку средней клавиши.

Как и в редакторе из Norton Commander, по умолчанию отключен перенос слов на краю экрана; его можно включить - динамически (то есть по ширине экрана) или на фиксированном числе знаков.

Назначение функциональных клавиш также более или менее совпадает. Хотя в MC есть специфика, касающаяся копирования, перемещения и удаления; так, последнюю операцию можно выполнить только через F8, но не через delete.

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

Приятна также полная русификация программы. И все сочетания управляющих и буквенных клавиш работают как при латинской, так и кириллической раскладке клавиатуры.

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

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

В заключение добавлю, что для mcedit имеется переведенная на русский язык документация, а на сайте http://linux-ve.chat.ru/ можно найти прекрасное описание его возможностей.

В прошлом разделе, заговорив о Xemacs, мы плавно перекинули мостик от консольных редакторов к редакторам, работающим в графическом режиме. А так как мы договорились, что первой нашей графической средой будет KDE, логично рассмотреть



Прочие редакторы для системы X Window


Здесь я упомянул бы Cooledit - известный текстовый редактор для программистов. Он имеет собственный десктоп-менеджер, способный изменить вашу рабочую среду до неузнаваемости, причем не всегда спрашивая позволения. Для набора текстов, по моему, не это лучший инструмент, но располагает богатыми возможностями для редактирования текстов исходных, скриптов, макросов и прочего.

Очень обширно семейство текстовых редакторов для GNOME (или просто базирующихся на библиотеке Gtk). Здесь можно назвать и gEdit, и gnotepad+, и CodeCommander, и Latte, и еще несколько. Многие из них обладают очень развитыми функциями редактирования, например работы с разметкой HTML. Однако я ими не пользовался - во-первых, как уже неоднократно говорил, почти все Gtk-приложения у меня работают неустойчиво, во-вторых, мне просто не нравится интерфейс GNOME-ориентированных программ.

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

Двойной щелчок на имени файла (или выбор пункта Open из меню по нажатию правой клавиши мыши) вызывает собственно текстовый редактор. Возможности его довольно богаты. Пункт File, в соответствие со своим названием, содержит всякие файловые манипуляции: открытие, сохранение, печать и прочее; в том числе - открытие файла в определенном режиме - текстовом или режиме различных языков программирования, в числе коих обнаружился и HTML, и TeX; впрочем, выбор режима автоматически (и правильно) происходит при открытии файла; так, при открытии html-файла включается цветовая подсветка тэгов.

В пункте Edit, помимо Undo и Redo (кстати, многоуровневых), содержались операции с текстовыми фрагментами - копирование, вырезание вставка различного вида. А маркировка этих фрагментов - в пункте Block; помимо обычного выделения линий и абзацев, можно выделить вертикальные колонки. Здесь - же установка автоотступов, конвертирование регистров, сортировка и прочее.

Из прочих, весьма многочисленных, пунктов меню привлекает внимание пункт Options: здесь можно запретить или разрешить перенос слов, установить левую и правую границы, величину табуляции, а также изменить режим просмотра документа.

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

В общем, конечно, fte - это, конечно, редактор в первую очередь для программиста. Однако и просто для набора текстов он вполне пригоден. А подсветка синтаксиса HTML позволяет применять его для предварительной разметки web-страниц.

А под занавес истории о текстовых редакторах не могу отказать себе в удовольствии рассказать о том из них, который, на мой взгляд, наиболее близок к очерченному во вступлении идеалу. Имя ему



Программное обеспечение


      Домашняя страница XEmacs находится по адресу .

      Свободный SGML toolkit SP можно получить по адресу , и там же -- DSSSL-процессор .

      SGML-процессор CoST -- по адресу .

      Мой набор спецификаций для CoST, свободный к дальнейшему распространению, -- по адресу .



Примечания

ISO 8879:1986

LATEX делает шаг в этом направлении, но этого не достаточно.

ISO 10179

Вероятность чего довольно велика, учитывая реверансы обоих основных игроков на поле браузеров в сторону XML.

Последние изменения: Чт 17 Янв 2002 12:01:58

Сгенерировано



Программы для работы с POD


pod2html, pod2man, pod2latex, pod2text

Преобразуют текст из формата POD в соответственно HTML, страницы руководства UN*X (man pages), LaTeX и обычный текст.

podchecker

Простое средство проверки синтаксиса POD.



Программы просмотра (браузеры)


От других рассмотренных нами систем подготовки документации Texinfo отличается тем, что для целей экранного просмотра документы Texinfo могут быть транслированы в отличный от HTML формат, а именно -- в формат Info. Естественно, что для формата экранного просмотра требуется браузер!

info

info, прародитель всех браузеров Info, это простой, но, тем не менее, эффективный браузер в консоли.

Для того, чтобы просмотреть страницы Info по теме Тема используйте вызов

info Тема

Для просмотра файла Info файл-info к вызову info добавьте параметр --file=файл-info, где файл-info содержит полный путь к нужному файлу Info.

Если вы желаете начать просмотр с конкретного узла имя-node, добавьте параметр --node=имя-node.

Моя любимая ошибка -- смешивание темы с -- -- файлом-info, т.е. набор команды

info ./cache-profiler.info

вместо подразумеваемого

info --file=./cache-profiler.info

pinfo

Это основанный на curses(3) браузер с навигацией в стиле lynx(1). pinfo очень красиво раскрашивает страницы Info

emacs

доказывает улучшение возможностей просмотра фалов Info в emacs 21.x.

Я знаю, что это лишь Emacs Info, но оно мне сильно-сильно нравится! Я его даже люблю!

Можно просмотреть установленную документацию в формате Info (C-h i', ). Или же можно загрузить файл Info и командой Info-on-current-buffer превратить буфер в браузер Info (обратите внимание на заглавную букву "I"). Если нет желания переключаться между рабочими буферами и режимом просмотра Info, то можно открыть файл в режиме просмотра (C-x 5 f', find-file-other-frame). Для того, чтобы открыть новый фрейм с браузером Info, переключитесь в буфер *info* в текущем окне emacs и выполните команду view-buffer-other-frame.

Чтобы получить от "браузенья" дополнительное удовольствие, попробуйте команду Info-speedbar-browser.

xinfo

xinfo -- древнейшая программа для просмотра Info-файлов в среде X11. Цветовой разметки текста нет. Более всего меня в нем раздражает -- до такой степени, что я его никогда не использую -- то, что навигация и отображение полностью разделены. Я имею в виду, что для перехода по ссылке в одной панели, приходиться "кликать" мышью по панели верхнего уровня. Щелчки мыши по самому меню ни к чему не приводят.

Скриншот .

tkinfo

Ну, это мой любимый браузер Info для X! В нем есть все "приятности" info(1): он быстро стартует, а его окно удобно устроено.

gnome-help-browser

Если вы используете Gnome, то, наверное, знакомы сgnome-help-browser(1x). В нем можно просматривать и страницы Info.

kdehelp

То же самое относится и к пользователям KDE... Вы, вероятно, знакомы с kdehelp(1x). Среди других форматов в нем поддерживается и страницы Info.

kdehelp легко убедить показать конкретный Info-файл:

kdehelp ./cache-profiler.info

Просто на большой?!

konqueror тоже показывает файлы info (по крайней мере konqueror 2.2.2): просто надо напечатать "info:" в строке адреса.



Пролог


Как я уже говорил, идеального текстового редактора мне до сих пор не встретилось. Однако максимально приближенный к идеалу - да. Это Nedit, текстовый процессор для X Window. В числе его разработчиков - большой коллектив: Марк Эдел (Mark Edel), Джо Кирьякопулос (Joy Kyriakopulos), Кристофер Конрад (Christopher Conrad) и другие. Распространяется он свободно и бесплатно на условиях GPL.

Редактор Nedit реализован для всех Unix- и Unix-подобных систем, как коммерческих, так и свободных. Он доступен на http://www.nedit.org/ в виде исходных текстов и бинарных пакетов. Впрочем, пробиться на этот сайт, по крайней мере из России, нелегко. А потому лучше поискать NEdit в каких-нибудь коллекциях Linux-программ, например, на . Кроме того, его часто стандартно включают в состав дистрибутивов Linux (например, Caldera OpenLinux, Linux Mandrake).

Nedit базируется на библиотеке Motif, имеющей статус коммерческой. Однако для Linux он может быть скомпилирован с использованием свободного аналога этой библиотеки - OpenMotif. Кроме того, распространяемые в составе дистрибутивов бинарные пакеты (rpm и deb) компилируются статически, то есть без необходимости установки каких-либо специфических библиотек вообще.

По назначению Nedit - текстовый редактор для программистов. Однако реализация его такова, что, кроме этого, он может быть использован для множества целей - от элементарного набора текстов до разработки web-страниц и верстки оригинал-макетов в TeX.

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

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

В третьих, для NEdit характерна практически неограниченная настраиваемость, осуществляемая путем подключения скриптов оболочки командной строки и макрокоманд, создаваемых на встроенном языке макросов.

Все эти особенности я и попытаюсь продемонстрировать ниже в этой саге.



Простые команды редактора VI


Рассмотрим некоторые команды для начала работы с vi. Позже обратим внимание на другие команды.

a

вставить текст за текущей позицией курсора. Если определен аргумент count - весь введенный текст будет повторен count раз. h

переместить курсор на одну позицию влево. i

вставить текст, начиная с позициии перед курсором. Если определен аргумент count - весь введенный текст будет повторен count раз. j

переместить курсор вниз на одну строку. k

переместить курсор вверх на одну строку. l

переместить курсор на одну позицию вправо. r

заменить символ в текущей позиции курсора. Аргумент count определяет количество заменяемых символов. u

отмена последнего изменения. Повторная команда u возвратит изменение. x

удалить символ в текущей позиции курсора. Аргумент count определяет количество удаляемых символов. Символы будут удалены за курсором.



Проверка орфографии


С этим дело обстоит проще всего. В принципе, LyX по умолчанию использует словарь, одноименный с языком документа. Поэтому, если ваш словарь для ispell/aspell и в самом деле называется russian (а для koi8 это так), на вкладке «Spell checker» можно оставить всё как есть. Иное дело, если вам хотелось бы набирать текст в cp1251. В принципе, на этот случай имеется опция «use input encoding», которая позволяет передавать программе проверки орфографии название используемой кодировки. Но толку от нее мало: едва ли словарь для koi8 сможет воспринимать какие-то кодировки кроме своей собственной. А вот завесить ispell с ее помощью очень даже можно. Поэтому остается лишь раздобыть словарь в требуемой кодировке , после чего пометить флажок «use alternative language» и в расположенном рядом с ним текстовом поле ввести название соответствующего файла (для cp1251 он называется russianw).



Публикация в SGML


XML, все же, -- дело пусть недалекого, но будущего. Что делать для публикации SGML документов прямо сейчас? Можно придумать несколько подходов.

      Если SGML используют для распространения документации в значительных объемах, например, на CD, то на тот же CD можно положить какой-либо SGML-браузер. Можно, к примеру назвать или .

      Если же документы делаются доступными через WWW, то их придется переводить в формат HTML. Это можно делать заранее, а можно -- "на лету", используя CGI или аналогичный интерфейс WWW сервера.



Путь первый, новаторский


Предпочтительной кодировкой в Red Hat 8.0 является UTF-8. Устанавливаемые по умолчанию шрифт "latarcyrheb-sun16" и локаль "en_US.UTF-8" позволяют корректно отображать символы латинского, русского и арабского алфавитов, а также иврита. Обратите внимание, что для многобайтовых UTF-локалей не столь важно, к какому языку они относятся: единственным ощутимым изменением при использовании "ru_RU.UTF-8" будет смена формата представления даты, времени, валюты и языка интерфейса некоторых программ (собственно, UTF-8 и Unicode и были созданы для того, чтобы обеспечить единообразие работы с любым алфавитом). Таким образом, если Вы собираетесь русифицировать консоль Red Hat в UTF-режиме, Вам можно позавидовать - всю необходимую работу за Вас уже проделали разработчики дистрибутива. И посочувствовать: Вам это особенно не поможет.
Разъясним последнее утверждение. Используемый по умолчанию шрифт уже содержит символы кириллицы, а консоль работает в режиме UTF, поэтому символы русского алфавита должны выводиться без дополнительных усилий. К сожалению, в данной схеме возникает неприятный побочный эффект - сильно затрудняется вывод данных в не-UTF кодировке (например KOI8-R). И если с кириллицей в именах файлов на vfat-разделах справиться достаточно легко (в параметрах монтирования в /etc/fstab необходимо указать "codepage=866,iocharset=utf8" вместо традиционного "codepage=866,iocharset=koi8-r"), с русскоязычными документами придется основательно повозиться: Midnight Commander 4.5.55 не умеет перекодировать в UTF-8 "на лету". Кроме того, некоторые приложения могут некорректно работать в UTF-локали, поскольку не поддерживают многобайтовые кодировки (за примером далеко ходить не надо - взять все тот же Midnight Commander). В других программах могут пропасть символы псевдографики. В довершение всего, консоль теряет возможность отображать цвета с кодом больше 7 (т.е. все "яркие"), так что файлы и директории на панелях MC оказываются совершенно неразличимыми. Если все это Вас не смущает, Вам остается только поставить соответствующую раскладку клавиатуры (например, ua-utf), и - поздравляем! Ваша консоль успешно русифицирована.