Initial Window Size
Как нетрудно понять, здесь задается размер окна по умолчанию, возникающего при запуске NEdit. Предусмотрено пять вариантов такового:
24 на 80 знаков; 40 на 80 знаков; 60 на 80 знаков; 80 на 80 знаков; настройка геометрии (Custom...).
Первые четыре в комментариях не нуждаются, пятый же вариант позволяет задать произвольное количество строк и столбцов. Подчеркну тольк, что речь идет о размере окна именно в знаках, а не в пикселях, поэтому реальный размер окна зависит от используемых по умолчанию гарнитуры и кегля шрифта.
Наконец, финал - настройки
Инструкция choose
Последний xslt-элемент, который я хочу вам продемонстрировать, это элемент choose. Он очень похож на инструкцию switch языка программирования C.
Первым должен идти элемент xsl:choose, а за ним дополнительные (один или несколько) элементы xsl:when, если требуется обрабатывать значение не подпадающее ни под одно из условий имеющихся элементов xsl:when, то вы можете добавить элемент xsl:otherwise:
<xsl:variable name="even" select="position() mod 2"/>
<xsl:choose> <xsl:when test="$even = 1"> <![CDATA[<table width="100%" bgcolor="#cccccc">]]> </xsl:when> <xsl:when test="$even = 0"> <![CDATA[<table width="100%" bgcolor="#99b0bf">]]> </xsl:when> <xsl:otherwise> <![CDATA[<table width="100%" bgcolor="#ffffff">]]> </xsl:otherwise> </xsl:choose>
Функция position() возвращает порядковый номер обрабатываемого элемента, в нашем случае -- документа. В данном примере нас интересует только четность порядкового номера, тем самым мы получаем возможность выделять четные и нечетные строки таблицы различным цветом. Я поместил элемент xsl:otherwise исключительно в демонстрационных целях, фактически же вы никогда не увидите строку с белым фоном в нашей таблице.
Если вы спросите меня зачем я вставил секцию CDATA, то я вам отвечу, если бы я этого не сделал, то XSLT-процессор генерировал бы сообщения об ошибке по поводу отсутствия закрывающего тега (</table>), но в нашем случае этот тег находится ниже. По той же самой причине, закрывающий тег </table> так же должен быть оформлен в виде секции CDATA.
Я привел лишь короткий отрывок из примера, полный текст файлов xsl и html вы найдете по ссылкам:
documents_choose.xsl. XSLT-преобразование documents_choose.html. Результат преобразования
Инструкция for-each
Если вы внимательно посмотрите на xml-документ, приведенный выше, то заметите, что авторы представлены в виде списка имен, разделенных запятыми. Очевидно, что наилучшим выходом было бы поместить имена авторов в отдельные теги <author>:
<document> <title>Donantonio: bibliographic system for automatic distribuited publication. Specifications of Software Requeriments</title> <author>Ismael Olea</author> <author>Juan Jose Amor</author> <author>David Escorial</author> <module>donantonio</module> <format pdf="yes" ps="no" html="yes"/> </document>
И вывести каждое имя в отдельной строке с помощью xsl:apply-templates и xsl:template match, но то же самое можно сделать и с помощью инструкции xsl:for-each.
<xsl:for-each select="author"> <tr> <td> Author: <xsl:apply-templates /> </td> </tr> </xsl:for-each>
В этом случае XSLT-процессор пройдет по списку авторов документа и, если вас интересует какой шаблон я использовал для обработки тегов <author>, я могу сказать - никакой. XSLT-процессор воспримет элемент apply-templates как обычный 'print' и выведет содержимое тега, выбранного элементом for-each.
Инструкция if
Иногда возникает необходимость поместить в выходной документ некоторый текст, если задан какой-либо xml-элемент (или его атрибут), либо другой текст, если этот элемент (или атрибут) отсутствует. В таких случаях можно использовать элемент xsl:if. Я продемонстрирую вам как это делается (этот пример взят из моих наработок в проекте TLDP-ES). Если вам известно, что некий исходный документ был преобразован в формат PDF, PS или HTML, то это обстоятельство можно отразить в xml-файле, т.е. если был создан PDF-файл, то в выходной html-файл вставляется ссылка на него:
<xsl:if test="format/@pdf = 'yes'"> <a href="{$doc_path}/{$doc_subpath}/{$doc_subpath}.pdf">PDF</a> </xsl:if>
Если атрибуту pdf документа присвоено значение "yes", как показано в примере:
<document> <title>Bellatrix Library and Semantic Web</title> <author>Daniel Guerrero</author> <module>bellatrix</module> <format pdf="yes" ps="yes" html="yes"/> </document>
То в выходной html-файл будет вставлена ссылка на документ в PDF-формате. Если атрибуту присвоено значение "no" или любое другое, допустимое вашим преобразованием, значение, то ссылка не будет вставлена. Все вышесказанное вы можете увидеть в xsl и xml документах:
documents.xml. Информация о документах documents.xsl. XSLT-преобразование documents.html. Выходной документ в формате HTML
Инструментальный набор
Примерный список средств для создания XML-документов:
Adept Series. Осуществляет поддержку SGML и XML. Компания ArborText, .
WYSIWYG. Представляет собой редактор SGML со встроенной японской версией Unicod, спецификацией XML для представления двухбайтовых символов. Grif S.A., .
XML Parser. Проверяет состояние и адекватность документов. После анализа документ XML представляется в виде дерева методов Java, обеспечивающих чтение-запись структур XML. Корпорация Microsoft, .
Web Automation. Инструмент для создания Java-классов. Умеет считывать HTML или XML-структуру документов и преобразовывать ее в объекты, которые можно в дальнейшем использовать в приложениях Java. Компания webMethods, .
- Линда Радосевич,
InfoWorld Electric
Инструменты
В этой секции я приведу описание некоторых инструментов, которые могут вам понадобиться для создания собственной LDP документации. Я лишь опишу их здесь, подробнее об их использовании и установке вы сможете прочитать позже. Если вы используете какие-нибудь еще инструменты при написании LDP документации, пожалуйста дайте мне знать и я добавлю информацию о них в этот документ.
Инструменты
makeinfo
makeinfo преобразует файлы Texinfo (.texi) в
Файлы Info
По умолчанию, makeinfo создает файл Info с именем, указанным параметром @setfilename. Опция --no-split не разрешает makeinfo дробить выходной файл на отдельные файлы [chunks] приблизительно по 50KB каждый.
Помимо всего прочего, обработка файла Texinfo программой makeinfo тщательно проверяет его синтаксическую структуру.
Текстовой файл ASCII
Опция --no-headers требует от makeinfo создать простой текстовой ASCII-файл. Формат текстового файла полезен при вычитке экранной версии и удобен для проверки правописания с помощью, например, diction(1).
texi2html
По названию команды вы, наверное, уже догадались, что texi2html преобразует файлы Texinfo в HTML. С помощью опции -monolithic вывод осуществляется в виде одного файла. Другая опция, -split указывает создать отдельный файл для каждого узла.
По умолчанию texi2html транслирует секции @iftex и не использует разделы @ifinfo. С помощью опции -expandinfo можно получить противоположный результат.
Обратите внимание на то, что опции texi2html начинаются с одного дефиса.
texi2dvi
Создает из исходного файла Texinfo файл в независимом от устройства формате .dvi. Применение dvips(1) к файлу .dvi позволяет получить на выходе код Postscript. Я нахожу полезными опции --clean и --quiet. Первая удаляет промежуточные файлы, оставляя только файл .dvi. А вторая отключает вывод необязательных сообщений (тут автор использует "непереводимую игру слов": No gnews is good gnews!'', т.е. "Отсутствие гнуовостей -- хорошая гнуовость" -- прим. перев.).
texi2pdf
texi2pdf за "один присест" создает из исходного файла Texinfo файл в формате Переносимого Документа [Portable Document File] (.pdf). Можно использовать те же опции, что и в случае texi2dvi. Я, однако, заметил, что texi2pdf определенно требуется опция --pdf, иначе он останавливается, громко требуя файл .dvi, даже когда этот файл точно существует. Гр-р! Так что я обычно выполняю следующее:
texi2pdf --quiet --clean --pdf foobar.texi
разработка Iris Computing Laboratory) предназначен
Редактор Iris Х Editor ( разработка Iris Computing Laboratory) предназначен для программистов и имеет собственный интерфейс под Х Window. При запуске Вы увидите чистый экран - ни меню, ни строки статуса - т.е. все нацелено на то, чтобы отобразить на экране как можно больше исходного кода программы. Информация всегда появляется во всплывающих окнах, что поначалу немного раздражает, но потом привыкаешь. Для работы с блоками текста предусмотрено четыре буфера временного хранения (clipboard). Вставку текста из такого буфера можно произвести одним нажатием кнопки мыши, что очень удобно. Недостатком редактора является полное отсутствие базовых средств форматирования.
Исходный текст message catalog-a:
example.msg file:
$quote " $ every message catalog should have a beginning set number. $set 1 This is the set 1 of messages 1 "Hello world\n" 2 "Good Morning\n" 3 "example: 1000.220 Read permission is denied for the file %s.\n" $set 2 1 "Howdy\n" |
Использование PSGML
PSGML облегчает возможность редактирования файлов SGML, добавляя команды для работы с фрагментами документа SGML, а также обеспечивая возможность вызова большинства этих команд через нажатие комбинации клавиш и пункты меню. Даже если версия Emacs или операционной системы, не поддерживает различные экранные шрифты, выделение цветом, или меню, к услугам пользователя PSGML еще остается встроенная интеллектуальная подсказка. PSGML читает и анализирует структуру документа, принимая на себя основные заботы по разметке текста и поддержке элементов DTD, помогая тем самым пользователю сосредоточится на содержании.
Использование редактора VI
Резюме:
Это руководство написано . Оригинал находится на www.eng.hawaii.edu/Tutor/vi.html. Другие руководства этого автора на: www.eng.hawaii.edu/Tutor/. Мы обнаружили этот материал на http://www.rootprompt.org/ и опубликовали с разрешения автора.
Редактор vi используют многие пользователи Unix. VI очень удобен для программистов, но для начинающих он оказывается довольно трудным. Это руководство написано для новичков, но также содержит разделы для опытных пользователей vi. Здесь представлено множество примеров, которые для лучшего понимания необходимо выполнить, а также подумать над своими собственными. Лучший путь в изучении - практика.
Использование шрифтов type 1 с пакетом Ghostscript
Ghostscript ссылается на шрифт через свой файл Fontmap. Он должен быть подправлен так же, как и файл fonts.dir в случае X11. Ghostscript может использовать файлы шрифтов в форматах .pfa или .pfb. Взяв шрифт из предыдущего примера, его можно использовать с Ghostscript вот так:
Помещаем файл со шрифтом в каталог со шрифтами Ghostscript % cd /usr/local/share/ghostscript/fonts
% ln -s /usr/local/share/fonts/type1/showboat.pfb .
Редактируем Fontmap, чтобы Ghostscript знал о шрифте % cd /usr/local/share/ghostscript/4.01
% ex Fontmap :$a /Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat . :wq
Используем Ghostscript для проверки шрифта % gs prfont.ps
Aladdin Ghostscript 4.01 (1996-7-10) Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____.pfb... /1899520 581354 1300084 13826 0 done. GS>Showboat DoFont
Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb... 1939688 565415 1300084 16901 0 done. >>showpage, press <return> to continue<< >>showpage, press <return> to continue<< >>showpage, press <return> to continue<< GS>quit
Справочная информация: fonts.txt из дистрибутива Ghostscript 4.01
X11 может использовать файлы шрифтов
X11 может использовать файлы шрифтов в формате .pfa или .pfb. Шрифты для X11 располагаются в различных подкаталогах в /usr/X11R6/lib/X11/fonts. На каждый файл со шрифтом имеется ссылка по его X11-имени в файле fonts.dir в каждом таком каталоге.
Существует каталог по имени Type1. Самым простым способом добавить новый шрифт заключается в помещении его в этот каталог. Но лучше хранить все новые шрифты в отдельном каталоге и использовать символические ссылки для добавляемых шрифтов. Это позволяет легко управлять отдельными добавляемыми шрифтами, не путая их с изначально поставляемыми. Например:
Создаем каталог для файлов шрифтов % mkdir -p /usr/local/share/fonts/type1
% cd /usr/local/share/fonts/type1
Помещаем сюда файлы .pfa, .pfb и .afm Кому-то может потребоваться хранить здесь также сопроводительные файлы и документацию к шрифтам % cp /cdrom/fonts/atm/showboat/showboat.pfb .
% cp /cdrom/fonts/atm/showboat/showboat.afm .
Обновление индексного файла со ссылками на файлы шрифтов % echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX
Теперь, чтобы использовать новый шрифт с X11, нужно дать доступ к файлу шрифтов и обновить файлы и именами шрифтов. Имена шрифтов в X11 выглядят следующим образом:
-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1 | | | | | | | | | | | | \ \ | | | | | \ \ \ \ \ \ \ +----+- набор символов | | | | \ \ \ \ \ \ \ +- средняя ширина | | | | \ \ \ \ \ \ +- spacing | | | \ \ \ \ \ \ +- разрешение по вертикали | | | \ \ \ \ \ +- разрешение по горизонтали | | | \ \ \ \ +- пунктов | | | \ \ \ +- пиксел | | | \ \ \ foundry family weight slant width additional style
Для каждого нового файла шрифтов необходимо создать новое имя. Если у вас есть какая-либо информация из сопроводительной документации к шрифту, то она может служить основой для создания имени. Если информации нет, то можно получить некоторую информацию от использования программы strings(1) над файлом шрифта. Например:
% strings showboat.pfb | more
Используемые программы
В качестве SGML-редактора я использую , включающий в комплект поставки SGML-модуль psgml. Ядром SGML-процессора был выбран . Для форматирования в HTML, RTF и LATEX написан набор спецификаций на CoST. Используется nsgmls, парсер из пакета SP. Управлению версиями помогает пакет контроля версий .
История LyX
Проект был основан Matthias Ettrich. В настоящее время он не в проекте, поскольку является сейчас лидером проекта KDE.
Последняя стабильная версия - 0.10.7. Она была выпущена в конце 1996 года. Следующая стабильная версия (0.12.0) готова к выпуску (фактически, в момент чтения вами этой статьи это может быть текущая версия). Эта статья основана на версии 0.12.0.pre7. Продолжается работа над кодом и каждую неделю выходит новая версия с исправленными(и новыми ;-) - прим. перев.) ошибками и новыми возможностями. Метод нумерации (версий) сходен с нумерацией использумой для ядра Linux: стабильные версии имеют четное второе число, и разрабатываемые версии имеют нечетное число.
XML не только предоставляет выгоды
Как можно заключить из вышесказанного — XML не только предоставляет выгоды и удобства, но и требует особого внимания к продуманной архитектуре вашего приложения. При разработке XML-приложений уделяйте больше времени моделированию и меньше кодированию — и тогда у ваших приложений будет будущее. Чем мощнее технология, тем более серьезные ошибки вы можете допустить — в этом смысле XML не исключение и не представляет собой ничего нового.
Арсений Чеботарев,
ac@comizdat.com
Прислать свою статью для публикации в журнале
Просто поговорить
Получить именной бланк подписки на "бумажную" версию
До следующего выпуска!
Елена Полонская, редактор "К+П"
www.comizdat.com
Перепечатка материалов этой рассылки разрешается только по согласованию с редакцией журнала "Компьютеры+Программы" [an error occurred while processing this directive]
Изменение команды проверки
Для сохранения команды проверки синтаксиса (той самой, которая запускается нажатием C-c C-v), PSGML создает в среде Emacs переменную sgml-validate-command. Если нужно изменить команду, то измените значение этой переменной в файле .emacs. Пусть, например, при вызове команды describe-variable (C-h v) Emacs выдает, что переменная sgml-validate-command имеет следующее значение:
nsgmls -s %s %s |
(%s %s показывает, куда Emacs при выполнении данной команды вставляет имена редактируемых файлов. Синтаксис команды наверняка знаком С-программистам.) Если нужно, чтобы PSGML, запускал при нажатии C-c C-v sgmls вместо nsgml, отредактируйте следующую строку в .emacs-файле:
(setq sgml-validate-command "sgmls -s %s %s") |
Помните, команда проверки может нуждаться в файле объявлений SGML. Если при работе часто используется один и тот же файл объявлений SGML, можно добавить его в строку .emacs, устанавливающей значение переменной sgml_validate_command:
(setq sgml-validate-command sgmls -s \\sgml\\dtds\\docbook.dcl %s %s ) |
(Обратите внимание на использование двойных обратных слешей для того, чтобы поместить обратные слеши в строку команды.) Естественно, что в случае ненадобности использования файла объявлений SGML, сохраняется возможность редактирования команды после нажатия C-c C-v.
Jade
Необходим если вы не используете openjade - ftp://ftp.jclark.com/pub/jade/jade-1.2.1.tar.gz
Jade это фронт-енд процессор для SGML. Он использует DSSSL и DocBook DTD для верификации и визуализации SGML в другие форматы.
Языки, символы и кодировки.
Here is the whole set! a character dead at every word.
- Richard Brinsley Sheridan, The School for Scandal,
Act 2, scene 2
Языки, символы, кодировки :
Character Set Standards
A tutorial on character code issues
Character sets (w3.org)
Character Set Considered Harmful
Alphabet Soup: The Internationalization of Linux.
Code for the representation of the names of languages, ISO 639
Country codes, ISO 3166
IANA Registred Character Sets :
ISO-8859 briefing and resources
The ISO 8859 Alphabet Soup
Cyrillic Character Sets
The Cyrillic Charset Soup
RFC-1489 на :
Вводит формальное определение кодировки KOI8-R ( КОИ-8 )
и нового charset для MIME :
Content-Type: text/plain; charset=KOI8-R
Content-Type: text/html; charset=KOI8-R
Великолепная страничка Ache : "Русская сетевая кодировка KOI8-R":
KOI8-U (RFC-2319) : Украинская сетевая кодировка
Japanese Character Encoding for Internet Messages (ISO-2022-JP)
GOSS: Character Sets
Character Encodings Concepts (Apple)
Multilingual Text Handling Environment *Mule*
Character/Glyph Model
An introduction to glyphs
Microsoft Typography (TrueType fonts)
Сайт посвященный шрифтам и типографике
Эмуляторы
Эмуляторы редакторов из других операционных систем (как правило, с мэйнфреймов и суперминикомпьютеров) представляют интерес только для экс-программистов тех систем, которые перешли под UNIX и не желают привыкать к какому-либо другому текстовому редактору. Зачастую оказывается, что такой редактор уже морально устарел: новые редакторы используют новые технологии обработки текстов. Поэтому рекомендовать редактор-эмулятор новичку можно лишь с оглядкой на vi.
Эпилог
Подводя итоги, можно сказать, что по своим возможностям и настраиваемости NEdit вплотную приближается к emacs (а учитывая возможность сколь угодно широкого наращивания функциональности пунктов меню Shell и Macro - возможно, и не уступает). В то же время он предоставляет пользователю удобный и привычный интерфейс, лишенный архаических особенностей как emacs, так и vi.
Недостатки NEdit я уже отмечал: это отстутствие инструментальной панели и истинно многооконного интерфейса, а также средств управления проектом. Однако первые два замечания - спорны, а последняя функция в элементарном исполнении, то есть в виде открытия и сохранения группы связанных файлов (глав книги, например, или серии web-страниц), как мне представляется, можно реализовать с помощью встраиваемых в меню сценариев оболочки и макрокоманд. Тем более, что зачатки управления проектом, в виде возможности открытия файла при выделении его в редактируемом тексте, имеются.
Короче говоря, если NEdit и не отвечает в полной мере идеалу текстового редактора, то вплотную к нему приближается. На мой взгляд, это один из лучших редакторов вообще и, пожалуй, лучший на платформе Linux. Дополнительное достоинство его - отсутствие привязки к конкретной графической среде (типа KDE или GNOME) и представленность во всех Unix-системах.
В общем, этот редактор мне так понравился, что я без тени сомнения добавил его в список любимых программ, о которых, как и о любимых женщинах, буду помнить всю жизнь. Надо сказать, что за десять лет околокомпьютерного существования список этот (программ, как, впрочем, и женщин) отнюдь не велик. Ранее в нем были QuattroPro для DOS (не для Windows) от электронных таблиц, Lotus AmiPro - от текстовых процессоров, Surfer в обоих своих (DOS и Windows) ипостасях. Теперь в этом списке - и NEdit.
А написал я все это по двум причинам. Во-первых - к вящей, как уже говорил, славе редактора NEdit. Во-вторых, руководствуясь шкурным интересом: вдруг кто-нибудь, обладающий должной квалификацией, заинтересуется программой и напишет к ней достаточное кличество качественных наборов макросов на все случаи жизни. Конечно, такая коллекция присутствует на http://www.nedit.org/, но достучаться до нее из России - нелегко, и потому о ее возможностях сказать что-либо затрудняюсь.
+ЮспщьвпФьО МзЮпщп
+п БузАБчрчэ БуЮэьщпшу Emacs впщьэпуБ руАЛ МзЮпщ. ¦ АьАБуэу X Windows Emacs АчвтпуБ тшО АуяО Арчь X-чзщп. +К ьАъчшЛвЦуэ БуЮэьщ ДЮуыэ
тшО чячвщпГущьО рАусч БузАБчрчсч МзЮпщп ьшь рАусч X-чзщп, ьАъчшЛвЦуэчсч Emacs. +яп рьтп ДЮуыэчр ьАъчшЛвЦНБАО р Emacs чтьщпзчрч тшО чБчяЮпжущьО рпХусч БузАБп. +яКГщч Emacs впъЦАзпуБАО БчшЛзч А чтщьэ ДЮуыэчэ, щч ъЮь жушпщьь рК эчжуБу АчвтпБЛ тчъчшщьБушЛщКу. аэчБЮьБу Юпвтуш .
¦чстп рК впъЦАзпуБу Emacs, руАЛ ДЮуыэ, вп ьАзшНГущьуэ ъуЮрчы ь ъчАшутщуы АБЮчзь, чБрчтьБАО тшО ЮутпзБьЮЦуэчсч БузАБп. мБп чяшпАБЛ щпвКрпуБАО чзщчэ. ©уЮрпО АБЮчзп щпвКрпуБАО ъчшчАзчы эущН, п ъчАшутщОО -- МБч чАчяпО МЕч-чяшпАБЛ ьшь чзщч эьщьяЦДуЮп, сту ъчОршОНБАО впъЮчАК, ь зЦтп рК эчжуБу рруАБь чБруБК. ¦пшЛщуыХьу АрутущьО чя МБьЕ АъуФьпшЛщКЕ АБЮчзпЕ АэчБЮьБу щьжу.
бузАБчрчу чзщч эчжуБ яКБЛ ъчтушущч ъч счЮьвчщБпшь ьшь руЮБьзпшь щп щуАзчшЛзч тЮЦсьЕ чзчщ, зпжтчу ьв зчБчЮКЕ эчжуБ яКБЛ ьАъчшЛвчрпщч тшО чБтушЛщчсч Дпышп (АэчБЮьБу Юпвтуш ). ¦ тпщщчэ ЮЦзчрчтАБру Ашчрч "чзщч" рАустп чячвщпГпуБ ГпАБЛ ДЮуыэп рщЦБЮь Emacs.
бч чзщч, р зчБчЮчэ щпЕчтьБАО зЦЮАчЮ, щпвКрпуБАО рКяЮпщщКэ чзщчэ; р щуэ ьтуБ ЮутпзБьЮчрпщьу. ¦чшЛХьщАБрч зчэпщт Emacs щуОрщч чБщчАОБАО р БузАБЦ р рКяЮпщщчэ чзщу (ЕчБО зчэпщтК эКХь зпз ъЮпрьшч туыАБрЦНБ р Бчэ чзщу, р зчБчЮчэ рК ИушзщЦшь, рщу впрьАьэчАБь чБ Бчсч, рКяЮпщч чщч ьшь щуБ). +АБпшЛщКу чзщп АЦИуАБрЦНБ ъЮчАБч тшО АъЮпрзь, ъчзп рК щу рКяуЮуБу чтщч ьв щьЕ. ¦Ашь рК ьАъчшЛвЦуБу щуАзчшЛзч ДЮуыэчр р АьАБуэу X Windows, Бч ъуЮутпГп ДчзЦАп ррчтп щузчБчЮчэЦ ДЮуыэЦ рКяьЮпуБ чзщч р МБчэ ДЮуыэу.
©чАшутщОО АБЮчзп зпжтчсч БузАБчрчсч чзщп щпвКрпуБАО АБЮчзчы Юужьэп, зчБчЮпО чъьАКрпуБ ъЮчьАЕчтОИуу р МБчэ чзщу. +щп рКрчтьБАО р ьщруЮАщчэ рьту, уАшь БуЮэьщпш ъчттуЮжьрпуБ МБч, ь АчтуЮжьБ БузАБ, зчБчЮКы щпГьщпуБАО ъЮь АБпЮБу Emacs Ач АБЮчзь `--:-- *scratch*'. аБЮчзп Юужьэп ъчзпвКрпуБ АрутущьО ч БузЦИуэ АчАБчОщьь, щпъЮьэуЮ, зпзчы яЦДуЮ ъчзпвпщ р чзщу щпт щуы, зпзьу чАщчрщКу ь рБчЮчАБуъущщКу ЮужьэК р щуэ ьАъчшЛвЦНБАО, ь АчтуЮжьБ шь МБчБ яЦДуЮ щуАчЕЮпщущщКу ьвэущущьО.
©ЮутэуБщКы ЦзпвпБушЛ
@anchor{Concept Index} ¦КАБЮКы ъуЮуЕчт:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Как я набрел на SGML-технологию
Все началось с интранета. Это модное слово означало для меня на практике то, что документы, которые я регулярно писал по роду своей деятельности, стало можно и нужно делать доступными "online". До сих пор я просто набирал документы в TEX-e и печатал их на бумаге. Идея дублировать их в HTML вручную отпала сразу: немедленно возникла бы проблема синхронизации бумажной и электронной версий одного и того же документа.
А вскоре потребовалось периодическая передача документов посторонним людям в электронной форме, что, по сложившейся у нас практике, означает -- в формате Microsoft Word. Работать с MS Word у меня по ряду причин не было никакого желания, к тому же это только усугубило бы проблему синхронизации версий.
Значит, нужно было придумать способ автоматического преобразования набираемых документов в различные форматы: TEX-a -- для печати на бумаге, HTML -- для помещения на WWW сервер, Word -- для обмена с работающими в Windows. Кроме того, мне хотелось, чтобы такое средство отвечало еще ряду требований:
быть модульным, чтобы можно было при необходимости легко добавлять новые выходные форматы или изменять алгоритмы преобразования в существующие;
быть открытым, бесплатным, как можно меньше привязанным к конкретным программам;
быть мобильным: работать, как минимум, на разных UNIX-платформах;
быть легко русифицируемым.
Первым, что попалось мне под руку после похода на , оказался пакет под названием . Он как раз и предназначался для генерации HTML, TEX и RTF из одного входного файла. Широко используемый в рамках , он использовал в качестве входного формата незнакомый мне до сих пор язык . Впрочем, ничего сложного в нем не оказалось -- он весьма напоминал знакомый мне и выглядел вполне понятно. Вот, к примеру, кусочек SGML-документа:
<DIV1><HEAD>The Structure of a TEI Text</HEAD>
<P>All TEI-conformant texts contain <LIST TYPE="bullets"> <ITEM>a <TERM>TEI header</TERM> (marked up as a <GI>teiHeader</GI> element) and </ITEM> <ITEM>the transcription of the text proper (marked up as a <GI>text</GI> element). </ITEM> </LIST></P> </DIV1> |
Для того, чтобы начать на этом писать, потребовалось всего лишь запомнить несколько основных элементов разметки, например, что <P> означает начало параграфа, <LIST> -- начало перечисления и т.п.
Набранный в SGML текст далее запуском одного фильтра преобразуется в HTML, другого -- в TEX, третьего -- в RTF, и так далее.
Как получить Emacs
Emacs, по современным меркам, является очень старым продуктом. Его возраст и открытость кода привели к тому, что в настоящее время существует несколько независимых версий редактора. На данный момент стандартной считается версия Free Software Foundation's GNU Emacs. Другие версии редактора в большей или меньшей степени отличаются от стандартной, и поэтому с большой вероятностью расширения, предоставляемые пакетом PSGML, с ними работать не будут. Автор использовал версию GNU Emacs "EMX release 19.29.2" для DOS и "EMX release 19.30" для Windows 95. Также использовалась версия 1.0 alpha 6 PSGML.
Все версии редактора GNU Emacs, начиная с 19.19, а также все версии Xemacs, начиная с версии 19.9, будут работать с PSGML.
ПРИМЕЧАНИЕ:Стафлин (Staflin) сделал доступным использование PSGML под UNIX. Если у возникли проблемы с использованием новейшей версии PSGML в операционной системе - попробуйте другую версию PSGML. Было разработано несколько версий.
Как проверить, что локализация заработала ?
Если у Вас полная реализация POSIX.2
1996, то проще всего воспользоваться утилитой locale.
Применяя можно получить множество полезных сведений :
какие возможные значения locale уже инсталлированы и известны системе. $ locale -a
каковы текущие значения отдельных категорий локализации : $ locale
каково внутреннее содержание какой-либо категории : $ locale LC_CTYPE $ locale LC_TIME
e.t.c.
каковы текущие значения ключей (keywords) в какой-либо категории локализации : $ locale alpha $ locale toupper $ locale abmon
e.t.c.
Также можно воспользоваться такой короткой прогрммкой :
/* testlocl.c : Минимальная проверка работоспособности locale, категория LC_CTYPE, "ключевое слово" - alpha */
#include <stdio.h> #include <locale.h> #include main() { unsigned char c=0x0f9; setlocale(LC_ALL, ""); printf("LC_CTYPE\t= %s\n", setlocale(LC_CTYPE, NULL)); printf("isalpha(%c)\t= %s\n", c, isalpha(c) ? "yes" : "no" ); return 0; } |
Для русской локализации в koi8-r согласно , коду 0x0f9
соответствует русская буква "Ы" :
F9 CYRILLIC CAPITAL LETTER YERI
то есть. :
$ cc -o testlocl testlocl.c $ ./testlocl LC_CTYPE = ru_RU.KOI8-R isalpha(Ы) = yes $
Правильность работы категории LC_COLLATE
можно проверить даже не компилируя тестовых программок, предполагая, что утилиты tr и dd работают в соответствии с POSIX :
$ echo ы | tr '[:lower:]' '[:upper:]'
Ы $ echo ы | dd conv=ucase Ы 0+1 records in 0+1 records out $
Как работает locale ? (пример Linux)
/* Несколько устаревшие сведения на 1 Dec1998*/
Для операцонной системы Linux
имеют хождение одновременно версий Linux libc, с различной степенью поддержки locale. Hиже приведен краткий обзор версий Linux libc.
Исторически, Linux libc ведет свое происхождение от free библиотеки GNU libc
(glibc), которая в своей последней стабильной версии ( GNU libc 1.0.9 ) не имела поддержки других locale кроме "C" и соответственно не имела возможности их менять. Эта библиотека дала рождение ветке Linux libc
4.x.x и 5.x.x которая постоянно совершенствовалась, переписывалась и кроме других полезных возможностей постепенно приобрела и средства locale.
... glibc1 libc-4 a.out libc libc-5 original ELF libc libc-6 GNU libc (glibc2, glibc2.1)
В старой, последней a.out (не-ELF) библиотеке, Linux libc 4.7.5 была возможность переключаться на другие значения locale, но только на заданные в процессе компиляции библиотеки. Для автоматической генерции *.c файлов с описаниями параметров локализации применялись специальные утилиты (реализация Nikolay Saukh ) /* Сильно похоже на старые SCO UNIX */.
В ELF версии Linux libc 5.0.9 (получившей довольно широкое распространение в дистрибутивах Slackware 2.x, RedHat и Caldera 1.x с ядром Linux 1.2.13-ELF) появилась возможность задавать любые значения локализации.
Hо сначало надо немного обратится к реализации locale в современной библиотеке Linux libc.
Напомним, что интернационализация
-- это дизайн (способ проектирования) программного обеспечения, при котором КОД не зависит от национальных особенностей. При таком подходе : локализация -- это процесс изготовления особых "объектов локализации", в которых сосредоточены языково-зависимые данные. Эти данные разбиты на функциональные группы : категории локализации.
Как мы выяснили ранее, различным категориям локализации могут быть присвоены различные значения и причем в разное время - разные. Естественно предположить, что они как-то куда-то динамически загружаются. И действительно, вызов (LC_XXXXX,"ru_SU.KOI8-R")
будет пытаться открыть файл "/usr/share/locale/ru_SU.KOI8-R/LC_XXXXX"
и считать его внутрь структуры в run-time части libc. Это все происходит совершенно прозрачно для пользователя.
Имя файла для считывания конструируется динамически :
/usr/share/locale/ru_RU.KOI8-R/LC_XXXXX
/usr/share/locale/ | это константа, определяющая каталог в котором хранится база локализации. Различно для различных операционных систем. Для Linux смотри LFSSND (/usr/share/locale/). Для Intractive UNIX: /lib/locale/. Вообще-то IMHO должно использоваться _PATH_LOCALE из <paths.h> |
ru_RU.KOI8-R/ | подкаталог в базе докализации, где "ru_RU.KOI8-R" - значение локализации. |
LC_XXXXX | файл данных для загрузки в run-time libc для категории локализации LC_XXXXX. Этот файл называется "объект локализации". |
и если там найдутся файлы, имена которых совпадают с именами (LC_ - locale categories) категорий локализации (LC_CTYPE, LC_COLLATE, e.t.c.) -- то они загружаются. Для остальных категорий остается значение по умолчанию : "C".
Таким образом, при правильной установке локализации, должны существовать следующие каталоги: (пример)
$ ls /usr/share/locale/*
C
POSIX
ru_RU.KOI8-R
en_DK.ISO-8859-1
...
* ПРИМЕЧАHИЕ: В полном POSIX.2 точно тот же результат даст утилита:
$ locale -a
C
POSIX
ru_RU.KOI8-R
en_DK.ISO-8859-1
...
Также должны существовать файлы ("объекты локализации") : (пример)
$ ls /usr/share/locale/ru_RU.KOI8-R/*
LC_CTYPE
LC_COLLATE
LC_MONETARY
LC_NUMERIC
LC_TIME
Теперь вопрос, откуда взять данные файлы ? ;-) См. или или .
В упомянутой выше версии Linux libc
5.0.9 подсистема locale работала именно так, однако не было утилит для создания загружаемых "объектов локализации". Те утилиты, которые входили в ее состав, генерировали объекты только для 4.4 BSD lite libc (почему ?).
Рабочие утилиты и , появились начиная с версии Linux libc 5.1.X. А начиная с 5.2.1X - в Linux libc уже есть все необходимое для работы с locale в соответствии с POSIX.2
. .
В широко распространенных дистрибутивах 4.1 и 4.2 применяется библиотека Linux libc 5.3.12 (ELF) содержащая вполне работоспособную систему locale. Однако, к сожалению, в дистрибутив RedHat не входили файлы "объекты локализации" для русского языка ru_RU.KOI8-R.
Однако GNU libc также развивалась и появилась версия поддерживающая locale
по стандарту POSIX 1996. Она была портирована для Linux и вскоре появились дистрибутивы, использующие GNU libc 2.0.x вместо Linux libc. Например, в состав дистрибутива RedHat Linux 5.2 (Apollo) (на glibc 2.0.7) входят все необходимые утилиты и "объекты локализации" - ru_RU (в ISO8859-5) и ru_SU (KOI8-R). Хотя, без там не обошлось.
В библиотеке Linux libc 5.4.x, многое взявшей от GNU libc 2.0.x реализована следующая версия кода, locale 2, и объекты локализации (файлы) от версий Linux libc 5.0.x - 5.3.Х уже не годятся. Однако, благодаря унификации POSIX
1996, эти файлы можно легко получить из текстового описания локализации и файла описания набора символов ().
В настоящее время развитие библиотеки Linux libc остановлено (на версии ~5.4.38), и общее направление развития --> слияние и переход на библиотеку glibc2. Но из за того, что существут огромное количество приложений, работающих с Linux libc, приходится иметь в системе версии библиотеки : Linux libc, называемую libc5
(например, версии 5.3.12) и GNU libc (например, glibc
версии 2.1), называемую libc6.
Содержание
Last change : 14-03-2000
Как работает txt2html.
txt2html это Tcl скрипт который преобразует простой текстовый ASCII файл в HTML документ. Имя выходного HTML файла базируется на имени входного ASCII файла. Например,
txt2html index.txt
создаст html файл с именем index.html .
Modelled on LaTeX, txt2html позволяет разбивать документы на разделы и создавать списки. Файлы изображений в форматах GIF и JPEG могут быть легко вставлены как рисунки. Для создания HTML файла tex2html ищет в вашем текстовом ASCII файле операторы, которае определяют разделы, списки и т.д.. Операторы представляют собой знак % с последующим за ним ключевым словом. Например,
%section How txt2html works
было использовано для определения начала этого раздела. Полный список ключевых слов описан далее. Заметьте, что знак % определяет оператор только если он находится в колонке 1 (в начале) строки!
Как с этим бороться
А теперь зададимся вопросом: а для чего вообще понадобилось связываться со шрифтовым хозяйством TeX? Может быть, TeXmacs умеет корректно обрабатывать содержащиеся в шрифтах лигатуры (под лигатурой в TeX понимается сочетание двух символов, которые должны быть заменены или дополнены третьим символом при компиляции документа)? Да нет, не похоже. Или программа знает, как обращаться с акцентами-модификаторами? Ничего подобного. Правда, в TeXmacs предусмотрены специальные клавиатурные комбинации для печати акцентированных латинских символов, в готовом виде содержащихся в кодировке T1, но вот составить новый символ из буквы и акцента нельзя. Мало того, если в LaTeX кодировка рассматривается как один из атрибутов шрифта, то TeXmacs, имея дело со внутренними кодировками TeX, ничего, в сущности, о них не знает. Шрифты в разных кодировках являются для него, как и для большинства визуальных редакторов, совершенно различными гарнитурами, и уже дело пользователя следить за тем, чтобы выбранный шрифт соответствовал языку текста.
Недоумение еще больше возрастает, когда мы обнаруживаем, что TeXmacs, оказывается, прекрасно умеет обращаться и со шрифтами, установленными в системе XWindow (по крайней мере, в формате Type 1 - насчет остальных ничего сказать не могу). Некоторый набор таких гарнитур (естественно, только латинских, и, естественно, в кодировке Adobe Standard, то есть, в сущности, в той же iso-8859-1) изначально доступен через меню программы. О такой мелочи, как различия кодировок, автор предупредить в документации. А эти различия, как мы уже убедились, как раз таковы, чтобы сделать абсолютно бессмысленными попытки сочетания шрифтового хозяйства TeX и XWindow в одном документе. Но, быть может, имеет смысл полностью переориентировать TeXmacs на шрифты Type 1, разом ликвидировав тем самым все вышеописанные проблемы?
Для разрешения этой задачи нам, во-первых, понадобится некий малый джентльменский набор кириллических гарнитур Type 1, состоящий из серифного, санссерифного и машинописного шрифтов. Я бы рекомендовал использовать шрифты в cp1251, но, если предпочтете koi8, не забудьте сконвертировать в эту кодировку файлы, отвечающие за русификацию интерфейса и русский перенос. Кроме того, для полноты операции желательно наличие совместимых гарнитур в западноевропейской кодировке. Далее я ради простоты картины буду исходить из предположения, что у нас имеется базовый набор коммерческих гарнитур от Paratype: NewtonC, PragmaticaC и CourierC для кириллицы, NewtonA, PragmaticaA и CourierA для западноевропейских алфавитов.
Шрифты эти, естественно, должны быть корректно установлены в системе XWindow. Далее мы могли бы сделать их доступными TeXmacs, внеся несколько дополнительных строк (по образцу уже имеющихся) в файлы TEXMACS_PATH/progs/fonts/x-fonts.scm и TEXMACS_PATH/progs/menu/main-menu.scm, которые, как это явствует из их названий, отвечают за загрузку шрифтов XWindow и конфигурацию меню. Но ведь мы хотели полностью отказаться от использования шрифтов системы TeX? Чтобы сделать это с наименьшими затратами, целесообразно переопределить шрифты roman и cyrillic, используемые программой по умолчанию. Для этой цели лучше всего создать новый файл, взяв за основу основу один из сценариев, ведающих загрузкой шрифтов (хотя бы тот же самый x-fonts.scm). Файл этот в нашем случае должен содержать следующие вхождения:
((roman rm medium right $s $d) (ps paratype-newtona-medium-r-normal $s $d)) ((roman rm medium italic $s $d) (ps paratype-newtona-medium-i-normal $s $d)) ((roman rm bold right $s $d) (ps paratype-newtona-bold-r-normal $s $d)) ((roman rm bold italic $s $d) (ps paratype-newtona-bold-i-normal $s $d))
((cyrillic rm medium right $s $d) (ps paratype-newtonc-medium-r-normal $s $d)) ((cyrillic rm medium italic $s $d) (ps paratype-newtonc-medium-i-normal $s $d)) ((cyrillic rm bold right $s $d) (ps paratype-newtonc-bold-r-normal $s $d)) ((cyrillic rm bold italic $s $d) (ps paratype-newtonc-bold-i-normal $s $d))
Далее создаются аналогичные строчки для гарнитур Pragmatica и Courier: помимо названий шрифтов меняется только показатель (т. е. roman) соответственно на (sansserif) и (typewriter). После чего надлежит сделать созданный файл доступным TeXmacs, прописав его загрузку в TEXMACS_PATH/progs/init.scm. Только загружаться он должен ранее всех прочих файлов из каталога TEXMACS_PATH/progs/fonts, если, конечно, у нас нет желания заниматься их редактированием на предмет истребления конфликтующих вхождений.
После этого не помешает просмотреть файлы из каталога TEXMACS_PATH/progs/keyboard (в первую очередь accents.scm) и вычистить из них те команды, которые имеют смысл только для кодировки T1. Кроиме того, целесообразно будет по-новому определить клавиатурные комбинации для печати наиболее распространенных типографских знаков препинания (то есть короткого и длинного тире, многоточия и парных кавычек всех видов). Нижеследующие определения будут работать правильно как для iso-8859-1, так и для cp1251:
("- -" "<символ с кодом 150>") ("- - -" "<символ с кодом 151>") (". . ." "<символ с кодом 133>") ("< <" "<символ с кодом 171>") ("> >" "<символ с кодом 187>") ("` `" "<символ с кодом 147>") ("' '" "<символ с кодом 148>") (", ," "<символ с кодом 130>")
Конечно, чтобы вставить в файл все перечисленные знаки, придется воспользоваться редактором со встроенной таблицей символов. Linux ведь не Windows - получить любой символ путем набора его кода на числовом блоке клавиатуры нельзя. Но это хотя бы не запретные коды из диапазона 0-32.
А теперь последний вопрос: стоит ли всем этим заниматься? Возможно, и стоит: ведь визуальных редакторов под Linux - раз, два и обчелся, а уж способность работать с многоязычными документами - свойство и вовсе уникальное. Только следует иметь в виду, что ваши наработки в TeXmacs не будут совместимы решительно ни с чем. Потому тот недостаток конвертера в формат LaTeX, о котором было сказано выше - далеко не единственный. Файлы, полученные с его помощью, производят страшноватое впечатление, и, главное, напрочь лишены той информации о шрифтовом форматировании и использованных языках, которая во внутреннем формате TeXmacs сохраняется достаточно эффективным способом. Ну а конвертеры для HTML и RTF пока лишь числятся в планах автора, и, соответственно, надежда на них слабая. Так что - думайте сами, решайте сами:
Как усовершенствовать TED?
Одно из главных усовершенствований редактора - добавление шрифтов.
Внешний вид редактора Ted довольно прост, поэтому возникает желание улучшить и его. Портировать в Qt или GTK - непростая задача.
Тем не менее кое - какие изменения можно внести без изменения кода. Во время инсталляции Ted копирует файл Ted.ad.sample в /usr/local/info - это файл ресурсов редактора. Можно скопировать его в свой домашний каталог и переименовать в Ted.
С помощью этого файла можно установить используемый шрифт, размер листов бумаги, поля, словарь, пункты меню и т.д...
Файл Ted.ad.sample поставляется на английском языке, но я перевел его на французский и сделал доступным для всех. Было бы неплохо если бы вы перевели его также на другие языки.
Изображение 5. Кликните на изображении для детального просмотра.
Как установить locale ?
Способ установки средств locale
может довольно сильно различаться в операционных системах от разных производителей, особенно для старых реализаций POSIX до 1996 года и переходных реализациий.
Как описано , структурно средства POSIX locale состоят из следующих компонентов :
Набор библиотечных (libc) вызовов (locale API): , , , e.t.c.
Переменные окружения, для управления средствами locale : , LC_CTYPE. e.t.c.
Утилита для получения информации о средствах locale
:
Исходные тексты описания locale : locale definitions, : /usr/share/i18n/*
Утилита для изготовления (компиляции) объектов локализации :
Собственно объекты локализации (наборы данных locale) : /usr/share/locale/*
Предположим, что библиотека libc
на Вашей системе содержит все необходимые вызовы. Иначе придется поменять библиотеку (или систему). :-)
В стандарте POSIX.2 (Утилиты командной строки) определенны две утилиты - и . Если система отвечает стандарту POSIX.2:1996, на вашей машине они имеются.
Утилита служит для получения различной информации о текущих значениях категорий locale, o всех установленных в системе возможных locale и о внутренних характеристиках различных категорий locale.
Имея утилиту можно наличие необходимых "объектов локализации", а потом необходимое языковое окружение.
Ситуация чуть осложняется, если необходимые "объекты локализации" отсутствуют. К счастью, стандарт POSIX
варианта 1996 г. сделан более переносимым, не зависящим от конкретной реализации и все действия пользователя не различаюся от системы к системе и их внутренняя реализация скрыта за утилитами POSIX.2.
Если в системе не предустановлено нужные нам "объекты локализации", они могут быть добавлены в систему с помощью утилиты путем компиляции специальных (текстовых) файлов описания параметров : Файла Описания Набора Символов () и Файла Описания Локализации (locale definitions) . После этого они становится изветным системе и видимым по `locale -a`.
$ localedef -c -i ru_RU -f ISO_8859-5 ru_RU.ISO_8859-5 $ localedef -c -i ru_RU -f KOI8-R ru_RU.KOI8-R
Данные файлы в исходном (текстовом) виде можно получить из коллекции или из комплекта исходных текстов библиотеки 2.x (./localedata/* ).
Файлы Описания Локализации (locale definitions) сделаны независимыми от Charset-а, поэтому один и тот же файл ru_RU подойдет для "компиляции" locale : ru_RU.ISO-8859-5, ru_RU.KOI8-R, ru_RU.CP1251.
К сожалению, в некоторых системах (например в glibc) изменяет имя Charset, поэтому после каталог необходимо .
Еще один вариант - это просто скопировать недостающие файлы-"объекты локализации" в двоичном виде. Некоторые производители UNIX поставляют для своих систем продукт "Language Kit", который есть ни что иное, как комплект данных файлов. К сожалению, стандарт POSIX никак не определяет внутренний формат объектов локализации. Поэтому "Language Kit" одной системы (или даже версии) скорее всего не подойдет к другой системе.
Для расширения кругозора, можно ознакомится с подсистемы locale в операционной системе Linux.
После выполнения необходимых установок, работоспособность locale можно .
Содержание ""
Last change : 13-04-2000
Как включить локализацию ?
Если на UNIX машине (с POSIX:1996) средства locale правильно и программы правильно , то локализация включается путем задания строки окружения :
$ export LANG={язык}
Если такой строки окружения нет, то работает значение локализации по умолчанию : LANG="C"
или LANG="POSIX" (что то же самое) - минимальный набор параметров, необходимый для функцонирования программ на ANSI C (ISO 9899:1990), в кодировке US-ASCII (7 bit) ().
Если ваша система имеет полный набор утилит POSIX.2, то узнать установленные в системе и допустимые значения для LANG=
можно командой :
$ locale -a
По новому стандарту (POSIX.2
приложение E (?)) значения локализации записываются в форме:
language_TERRITORY.Codeset
или формально:
language[_TERRITORY[.Codeset[@modyfier]]]
Стандарт описывает "language names", - "territory names". Территории _SU
более не существует (вернее теперь она означает Судан), однако для совместимости некоторые системы продолжают ее поддерживать как alias : ru_SU --> ru _RU.
К сожалению, стандарта на названия Codeset-ов формально нет (см. ), но в основном принято пользоваться названиями, зарегистрированными для MIME в или в .
Для русского языка LANG={язык}
устанавливается как правило равным LANG="ru_RU.KOI8-R"
или LANG="ru_RU.ISO_8859-5" . То есть :
$ export LANG="ru_RU.KOI8-R"
Согласно стандарту допустимы также короткие именования значений locale, которые часто оформляются как aliases
(псевдонимы) полного наименования. Hапример "C" --> "POSIX".
$ export LANG=ru $ export LANG=ru_RU $ export LANG=ru_RU.KOI8-R
Однако, если вы указываете короткое имя, может оказаться что Codeset вовсе не KOI8-R
(см. например . Лучше не пользоваться умолчаниями, а указывать точное длинное имя.
Во FreeBSD 2.x так и есть. Для Linux
- зависит от дистрибутива. В коммерческих реализациях (Solaris, SCO, AIX e.t.c.) как правило используется значение LANG="ru_RU", или укороченное LANG="ru" (и как правило Codeset ISO8859-5 по умолчанию).
Hекоторые могут пожелать себе локализацию в другом наборе символов : ru_RU.X-CP-866
( ru_RU.IBM866 ), ru_RU.x-mac-cyrillic, ru_RU.ISO_8859-5
или даже ru_RU.CP1251 - на это нет никаких ограничений. :) Все эти кодировки совершенно
равноправны и зарегистрированы (кроме x-mac-cyrillic) в . Только не забудте, что локализация, и отображение национальных символов на терминале - это совершенно разные вещи.
Для США LANG={язык}
устанавливается LANG=en_US.US-ASCII (что полностью совпадает с LANG=C) или LANG=en_US.ISO646-IRV
(ISO646-IRV - это тот же US-ASCII, но опубликованный ). А вот для Великобритании необходимо устанавливать LANG=en_GB.ISO8859-1
поскольку в наборе символов US-ASCII не содержится символа "фунт стерлингов".
Переменная окружения впервые была введена в HP-UX Multi Language Subsystem
и формально относится к подсистеме , и поэтому имеет множество "побочных" эффектов : изменяет пути поиска и язык message-catalog-ов (), пути поиска и язык страничек man (MANPATH), влияет на систему X-Windows, MOTIF e.t.c.
Если система локализована не полностью и использовать полное переключение на другой язык (с помощью export LANG={язык}) нельзя, можно включить locale только для функций locale API библиотеки libc, задав значение . Можно также присваивать разные значения разным категориям, задавая их имена в строках окружения :
$ unset LANG
или
$ export LANG="C" $ export LC_CTYPE="ru_RU.KOI8-R" $ export LC_COLLATE="ru_RU.KOI8-R"
$ export LC_TIME="C"
- (если Вас раздражают русские даты, сообщения и man-ы, но нужно обрабатывать русские буквы ;-) и т.д.
По возможности сдедует использовать как можно более полное имя для задания локализации, например :
$ export LANG="ru_RU.KOI8-R" $ export LANG="ru_RU" $ export LANG="ru"
- первый вариант наиболее предпочтителен, поскольку точно задает язык, страну и кодировку.
Не рекомендуется
использовать строку окружения :
$ export LC_ALL={язык}
поскольку формально такой нет, она "виртуальная" и обозначает "одновременно все категории" (* - wildcard). Из за этого во многих реализациях locale API возникают проблемы после вызова функции поскольку LC_ALL оказывается "сильнее" чем конкретная категория, например LC_TIME.
Проблемы могут возникнуть также с программами, работающими с PostScript : в категории LC_NUMERIC локализации ru_RU
в соответствии со стандартом ГОСТ в качестве десятичного разделителя используется символ 'запятая' : "," в то время, как в стандарте языка PostScript : точка "." А категория LC_NUMERIC оказывает влияние на printf("%f",float);
. Используйте значение C (POSIX) для LC_NUMERIC, если вы работаете с PostScript
:
$ export LC_NUMERIC="POSIX"
Посмотреть текущие значения категорий локализации можно все той же утилитой
(без параметров).
$ locale
После включения, работу средств локализации можно .
* ПРИМЕЧАHИЕ: Хотя MIME и POSIX locale
используют одни и те же концепции charset и codeset, взаимоотношение между MIME и locale
далеко не Так что правильная настройка locale вовсе не гарантирует правильную работу почтовой системы (в области работы с национальными символами).
* ПРИМЕЧАНИЕ: В некоторых современных системах начинает появляться локализация в . Включается она заданием строки окружения LANG="en_US.UTF-8" для США или соответственно LANG="ru_RU.UTF-8" для России, LANG="ja_JP.UTF-8" для Японии и т.д. См: .
Содержание ""
Last change : 13-04-2000
Какие форматы файлов шрифтов я могу использовать?
То, файл шрифтов какого формата будет полезен, зависит от используемого приложения. Сама по себе FreeBSD шрифтов не использует. Прикладные программы и/или драйверы могут использовать файлы шрифтов. Вот краткий справочник по типам файлов шрифтов и приложениям/драйверам:
Драйвер
syscons
.fnt
Приложение
Ghostscript
.pfa, .pfb, .ttf
X11
.pfa, .pfb
Groff
.pfa, .afm
Povray
.ttf
Окончание .fnt используется достаточно часто. Я полагаю, что когда кто-нибудь собирается создать файл шрифтов для своего приложения, чаще всего выбирается именно это окончание. Поэтому файлы с таким окончанием не все имеют одинаковый формат; в частности, формат файлов .fnt, используемых драйвером syscons во FreeBSD, может отличаться от формата файлов .fnt, встречающихся в MSDOS/Windows. Я даже не пытался использовать другие файлы .fnt, кроме тех, что поставляются с FreeBSD.
Какие шрифты?
После инсталляции Ted содержит 4 шрифта : Times, Helvetica, Courier и Symbol. Эти шрифты от Adobe в формате AFM. В принципе Ted может использовать любой шрифт этого формата. В ОС Linux шрифты расположены в /usr/share/enscript и /usr/share/ghostscript - использование их весьма соблазнительно потому, что поставляемый с редактором Ted шрифт Times ограничен размером 18 также как и шрифты Courier italic и Courier bold-italic.
К сожалению я смог импортировать только шрифты Utopia, New Century SchoolBook и Palatino в /usr/local/afm и использовать их с Ted. Я попробовал различные размеры от 8 до 64 и результаты были положительными. Выбор конечно не богат, но принимая во внимание, что эти шрифты схожи с Times New Roman, а Helvetica с Arial - в нашем распоряжении находятся наиболее важные и часто используемые. Следовательно, например мы можем редактировать документы Word, ведь эти шрифты также наиболее часто используемые под Windows.
Изображение 3. Шрифты в Ted. Кликните на изображении для детального просмотра.
Позже появился интерес сохранить вид шрифтов в формате RTF и посмотреть как другие приложения обработают этот документ. Ниже, на изображении, вид AbiWord и нашего документа. В сравнении с Ted - изображение выше, впечатляет.
Изображение 4.
В поставку Ted входит файл TeDocument.rtf ( 712 KB ), в котором рассказывается где можно взять шрифты в формате AFM и как установить их. Каждый файл шрифта является его описанием в текстовом формате. Перед использованием их, необходимо удалить символы окончания строки и файла ( Strg-Z ). Инструкции звучат намного проще, чем реальные действия.
Категории локализации.
Как уже было замечено, в каждой отдельной стране способ представления данных отличается. Чтобы упорядочить все эти отличия, их объединяют в группы и особым образом описывают. Такая группа признаков называется Категория Локализации :
LC_CTYPE | Определяет правила классификации и преобразования одиночных символов. Позволяет правильно определять вид символа: цифра, буква, значок, заглавная буква или прописная и т.д. Другими словами, включает правильную работу , , , , ... и т.п. для местного алфавита. Вдобавок, включает правильный перевод строчных -- прописных букв: и . См. <> |
LC_COLLATE | Определяет правила сравнения и преобразования строк. Позволяет определять лексикографический порядок символов (порядок сортировки) в местном алфавите. Включает правильную работу и . Оказывает непосредственное влияние на работу утилит типа и т.д. |
LC_TIME | Определяет правила национального представления времени и даты. Задает именование дней недели, месяцев и т.п. а также задает способ написания даты и времени. (12/24) Hепосредственно влияет на а через нее на утилиты и т.д. |
LC_NUMERIC | Определяет правила национального представления чисел с плавающей точкой. Влияет на strtod() и форматы %f и %g printf(), scanf(). |
LC_MONETARY | Определяет правила национального представления денежных величин. (См. Currency Symbols ISO 4712) . |
Особая категория локализации LC_ALL
служит для обращения одновременно ко всем категориям, т.е. работает как '*' (wildcard).
В стандарте POSIX 1996 кроме категорий локализации стандартизированы также Ключевые Cлова (keywords), которые определяют внутреннее содержимое категорий локализации. Hапример, для категории LC_CTYPE определены ключевые слова: alpha, digit, xdigit
и т.д. Для категории LC_TIME определены ключевые слова : mon, day, abmon, abday, e.t.c. (названия месяцев, название дней недели, в полной и в сокращенной форме), а также способ записи даты во внешнем представлении и т.д. Получить доступ к ключевым словам категорий локализации можно с помощью функции (не входит POSIX, но входит в XPG).
Формальное описание категорий локализации содержится в файле locale definition "описания локализации". Этот файл может быть 'откомпилирован' утилитой .
Кроме перечисленных выше категорий локализации иногда также определены:
LC_RESPONSE - Hабор "стандартных" местных ответов ja, si, да, yes, e.t.c.
LC_MESSAGES - Hабор стандартных сообщений об ошибках: "File not found", "Файл не найден".
В POSIX категория LC_RESPONSE
входит в LC_MESSAGES. Кроме того, значение LC_MESSAGES
оказывает влияние на .
Для локализации системы X Window
используются ее собственные настройки locale (Xlocale), которые здесь не рассматриваются. Смотри или .
Содержание
Last change : 08-10-1999
Клавишные комбинации, дублирующие пункты меню
Средства управления файлами (пункт File):
Ctrl+N: создание нового файла; Ctrl+O: открытие существующего файла; Ctrl+Y: открытие существующего файла, имя которого выделено в редактируемом тексте; файл должен находится в текущем каталоге или к немудолжен быть прописан полный путь; Ctrl+W: закрытие текущего файла, если последний изменялся - по умолчанию следует запрос на сохранение изменений (если в Preferences не прописано другое); Ctrl+S: сохранение текущего файла; Alt+I: вставка некоего файла (выбираемого броузингом) в текущий, в позицию курсора; Ctrl+P: печать текущего файла Ctrl+Q: выход из редактора NEdit с закрытием всех окон и файлов; при изменении последних по умолчанию следует запрос на сохранение.
Средства редактирования (пункт Edit):
Ctrl+Z: отмена последней операции; Shift+Ctrl+Z: возврат последней отмененной операции; Ctrl+X: удаление выделенного фрагмента (аналог Cut в Windows); Ctrl+C: копирование выделенного фрагмента (аналог Copy в Windows); Ctrl+V: вставка скопированного или вырезанного фрагмента (аналог Paste в Windows); Ctrl+Shift+V: вставка скопированного фрагмента как прямоугольника (колонки); Del: удаление выделенного фрагмента или символа за позицией курсора; Ctrl+A: выделение всего текущего файла; [Shift]Ctrl+9: выделение фрагмента слева от позиции курсора; [Shift]Ctrl+0: выделение фрагмента справа от позиции курсора; Shift+Ctrl+6: конвертация литер выделенного фрагмента в нижний регистр; Ctrl+6: конвертация литер выделенного фрагмента в верхний регистр; Ctrl+J: слияние фрагментов абзаца в соответствие с установками переноса слов; Alt+Ctrl+L: Insert Form Feed (смысла пока не понял); Alt+Ctrl+I: вставка ascii-кода символа в десятичном исчислении (аналогично комбинации Ctrl+#_кода);
Средства поиска (пункт Search):
[Shift]Ctrl+F: поиск фрагмента; [Shift]Ctrl+G: поиск следующего вхождения фрагмента; [Shift]Ctrl+H: поиск выделенного фрагмента; [Shift]Ctrl+I: включение строки поиска; [Shift]Ctrl+R: замена выделенного фрагмента; [Shift]Ctrl+T: повторная замена; Ctrl+L: переход к строке по ее номеру; Ctrl+E: переход к выделенному фрагменту; Alt+M a-z: установка метки, маркируемой латинской литерой (от a до z); [Shift]Alt+G a-z: переход к установленной метке по ее марке (от a до z); [Shift]Ctrl+M: Goto Mtching (смысла пока не знаю); Ctrl+D: Find Defonition (опция не активизирована, смысла не знаю);
Средства настройки (пункт Preferences):
Alt+A: включение строки состояния; Ctrl+B: включение режима забивки (аналогично нажатию клавиши Ins);
Средства наращивания (пункты Shell и Macro):
Alt+X: выполнение команды, вызывает панель минитерминала; KP Enter: выполнение текущей строки редактируемого документа в качестве команды; Alt+R: Filter Selection; Ctrl+.: завершение выполнения команды оболочки (аналогично Ctrl+C в таковой); Alt+K: начало и завершение (повторным нажатием) протоколирования макросов; Ctrl+.: обрыв протоколирования макрокоманды после нажатия клавиш Alt+K. Ctrl+K: исполнение запротоколированной макрокоманды; Ctrl+.: повторное исполнение запротоколированной макрокоманды.
Средства управления окнами (пункт Window):
Ctrl+2: расщепление активного окна на две равные половины по горизонтали; Ctrl+1: закрытие активной части расщепленного окна.
Кроме этого, для быстрого вызова пунктов главного меню используется комбинация Alt+подчеркнутая_литера (так называемая Mnemonic).
Ключи программы.
[-- ]или[-- ]
[-v ] | [--version ]-печатает номер версии.
[-h ] | [--help ]-печатает список этих ключей.
[-t (title) ] | [--title (title) ]
[-tf/+tf ] | [--titlefirst / --notitlefirst ]
[-dt (doct) ] | [--doctype (doctype) ]
[+dt ] | [--nodoctype ]
[-l (file) ] | [--link (dictfile) ]
[+l ] | [--nolink ]
[-H (regexp)] | [--heading (regexp) ]
[-EH/+EH ] | [--explicit_headings / --noexplicit_headings ]
[-ab (file) ] | [--append_body (file) ]
[+ab ] | [--noappend_body ]
[-ah (file) ] | [--append_head (file) ]
[+ah ] | [--noappend_head ]
[-pp (file) ] | [--prepend_body (file) ]
[+pp ] | [--noprepend_body ]
[-st (file) ] | [--style (URL) ]
[+st ] | [--nostyle ]
[-ec/+ec ] | [--escapechars / --noescapechars ]
[-8/+8 ] | [--8-bit-clean / --no-8-bit-clean]-включает или отключает 8-ми битную обработку символов. Для правильного отображения кириллицы нужно включить.
[-e/+e ] | [--extract / --noextract ]
[-c (n) ] | [--caps (n) ]
[-ct (tag) ] | [--capstag (tag) ]
[-m/+m ] | [--mail / --nomail ]
[-u/+u ] | [--unhyphen / --nounhyphen ]
[-ul (n) ] | [--ulength (n) ]
[-uo (n) ] | [--uoffset (n) ]
[-tw (n) ] | [--tabwidth (n) ]
[-iw (n) ] | [--indent (n) ]
[-s (n) ] | [--shortline (n) ]
[-p (n) ] | [--prewhite (n) ]
[-pb (n) ] | [--prebegin (n) ]
[-pe (n) ] | [--preend (n) ]
[-r (n) ] | [--hrule (n) ]
[-LO/+LO ] | [--linkonly / --nolinkonly ]
[-db (n) ] | [--debug (n) ]
[-pm/+pm ] | [--preformat-marker / --nopreformat-marker ]
Более подробная информация содержится в тексте скрипта txt2html в виде комментариев.
Кодируем помаленьку
Автор: Алексей Федорчук, alv@newmail.ru
Опубликовано: 13.04.2002
Оригинал: http://www.softerra.ru/freeos/17363/
Своеобразие исторической судьбы России проявлялась во всем. В том числе и в том – что русский язык самый многокодировочный язык в мире. Что создает, конечно, некоторые трудности в повседневной жизни. Но зато – какой простор для проявления исконно народной смекалки…
Перечисление ныне существующие (то есть используемые) кодировки кириллических символов – уже требует изрядного напряжения интеллекта, особенно если учесть все синонимы, псевдонимы и эпитеты. Здесь и
классическая кодировка DOS, она же – CP866, IBM866, альтернативная (на полноту перечня не претендую); по сию пору она есть стандарт междокументного обмена – так, РФФИ принимает электронные версии проектов только в ней (и в чисто текстовом формате); и не менее традиционная KOI8-R – кодировка электронной почты и, до недавнего времени, Рунета; и ISO8859-5, кодировка Sun, по не вполне понятным причинам сподобившаяся канонизации в качестве кодировки ГОСТ'а; и CP1251, она же – кодировка Windows, не только добившаяся почти безраздельного господства на пользовательских десктопах, но и теснящая KOI8 в ее исконной вотчине – Интернет-серверах; и кодировка MacOS, правда, слава богу, так и не вышедшая за пределы своей платформы.
А еще где-то за кадром остаются «болгарская» кодировка (как легко понять из названия, к Болгарии почти никакого отношения не имеющая), и древняя кодировка того же Mac'а (как помнится, даже не одна), и апокалиптический Unicode…
Легка жизнь пользователей, закосневших в чистом «черном» DOS'е или присягнувших на верность OS/2: как бы то ни было, их CP866 признается всеми – нет, наверное, текстового процессора, не имеющего функции сохранения документа в этом формате. Не сложнее – и мучителям Windows (или мучимым оной): они могут позволить себе просто не знать о существовании иных кодировок, кроме CP1251. Ну а эзотерикам от MacOS – им, подозреваю, ничего, кроме собственной кодировки и не нужно. Не знаю уж, как обходятся Solaris'ты – но и от них сетований как-будто не слышно.
А вот те, кто связал судьбу с открытыми и свободными Unix-подобными системами, обязаны учитывать все изобилие кириллических кодировок. Хотя бы потому, что большинство из них даже не поднимаясь из-за своего десктопа, используют две из них – KOI8 для клавиатурного ввода и CP866 для экранного вывода .
Впрочем, последняя проблема, сложившись исторически, решена также в историческом масштабе времени: во FreeBSD путем загрузки карт перекодирования (screenmap), в современных отечественных (или исконно интернациональных) дистрибутивах Linux – использованием фрагментарного Unicode .
Однако пользователи Unix-систем живут не в безвоздушном пространстве – время от времени им требуется читать документы, созданные на иных платформах (пользователи которых, как уже говорилось, подчас даже не подозревают, что кроме их кодировок существуют какие-либо иные). Причем – чем дальше, тем больше: как я уже говорил, даже в исконную Unix-вотчину проникло тлетворное влияние Microsoft [3].
Первое напрашивающееся решение при этом – использование перекодировщиков. И действительно, таковых создано немало. Самый простой из них – программка iconv. Она являет собой компонент общесистемной библиотеки libc (glibc) и потому гарантированно присутствует в любом дистрибутиве Linux или BSD-клоне. Формат ее предельно прост: iconv -f [исходная_кодировка] -t [целевая кодировка] имя_файла
Она выводит результат своей работы на стандартный вывод, поэтому для сохранения его в файле следует прибегнуть к операции перенаправления вывода: iconv -f enc1 -t enc2 source_file > target_file
Ну а список доступных перекодировок (а заодно и правильное их наименование) можно посмотреть посредством команды iconv --list
Есть и более развитые средства, позволяющие в один присест перекодировать несколько файлов (и даже целый каталог). Среди них – rusconv Олега Паращенко, о которой я некогда писал в своей книжке . Она позволяет перекодировать произвольное количество файлов (в том числе и по маске), с сохранением в текущем или любом другом каталоге. И при этом не только между большинством распространенных кодировок кириллицы (DOS, Windows, KOI, Mac), но и превратить латинскую транслитерацию в читабельный русский текст (или наоборот). Большое достоинство программы – ее прекрасная документированность, руководство пользователя для нее (на русском языке) составляет несколько десятков страниц. Это избавляет меня от описания ее работы – интересующихся отсылаю к сайту автора .
Еще более удобной представляется мне программа d1489 (автор – Андрей Чернов, известный, помимо прочего, и своими трудами по русификации Unix'ов), доступная во FreeBSD в виде порта и пакета (в дистрибутивах Linux она мне не попадалась, может быть, просто не обращал внимания). В отличие от rusconv, она не документирована вообще – с ней нет ни man-, ни info-страниц, лишь очень краткая справка по использованию. Впрочем – ни в чем более она и не нуждается, предоставляя, однако, вполне достаточные возможности.
Пакет d1489 включает в себя две пары утилит – fromwin/towin и fromdos/todos, назначение которых вполне ясно из их имен: это перекодирование между KOI8 и Windows/DOS, соответственно [6]. Есть в ней и еще одна утилитка – a2kfcnv, для трансформации экранных консольных шрифтов из CP866 в KOI8, что может оказаться отнюдь не лишним.
Используется каждая из парных утилит одинаково, хотя и разнообразно (о чем мы узнаем посредством запуска любой команды с опцией -h или -?). Можно дать команду fromwin имя_файла
в результате чего исходный файл в кодировке CP1251 будет замещен им же, но в KOI8. Можно перенаправить результат перекодировки в другой файл – fromwin < Win-файл > KOI-файл
А можно перекодировать и множество файлов, в том числе и по маске (например, все текстовые или html-документы каталога) с записью результатов в другой каталог, скажем fromwin -o output_dir ~/*.html
По умолчанию при перекодировании из KOI8 в DOS/Windows и обратно программа заодно преобразует и символы конца строк в вид, принятый в целевой системе. Что при желании можно подавить опцией -b. Ну а опция -p по возможности пытается сохранить такие атрибуты файлов, как время модификации (насколько это осуществимо при переносе между DOS/Windows и Unix).
Короче говоря, пакет очень удобен, если требуется регулярно переносить большие объемы данных на фиксированные носители (например, Zip-диск или сменный винчестер), позволяя делать это парой-тройкой несложных скриптов. Правда, она не позволяет рекурсивного перекодирования вложенных подкаталогов – но такой возможности я пока не видел ни в одной программе-перекодировщике .
Однако перекодировщики не решают всех проблем обмена документами – достаточно скучно перекодировать все, что потребуется впредь (или, напротив, нужно только сиюминутно). А уж если нужно поправить пару символов в Windows или DOS-документе…
Так что очень желательной видится возможность переключения кодировок терминала, что называется, на лету (или на бегу?). К счастью, и такое не запрещается – благодаря механизму загрузки клавиатурных раскладок и экранных шрифтов (да и карт соответствия, буде потребуется – также). В Linux можно сделать разными способами, в зависимости от того, какой пакет управления консолью – kkb или console-tools, принят в данном дистрибутиве. И потому скажу пока только за FreeBSD.
Там эти функции возложены на две штатные программы из пакета системной консоли (syscons), одна из которых называется vidcontrol, другая – kbdcontrol. Посредством первой можно подгрузить шрифт в любой кодировке, например vidcontrol -f 8x16 cp1251-8x16.fnt
А второй – задать соответствующую ему клавиатурную раскладку: kbdcontrol -l ru.cp1251.kbd
Разумеется, для того, чтобы сварить суп из курицы, нужно как минимум иметь курицу. То есть, применительно к случаю – соответствующие экранные шрифты и клавиатурные раскладки. Благо с первыми проблем нет – в комплект FreeBSD входят консольные шрифты для всех трех главных кодировок русского языка (хотя эстетически, да и эргономически, все они далеки от совершенства).
Для тех, которые с претензиями (как ваш покорный слуга, например) – шрифты для консоли FreeBSD можно изготовить из таковых для Linux-консоли, в отечественные дистрибутивы типа Altlinux входит прекрасная их коллекция . Для этого Linux'овый шрифт сначала разархивируется, а затем дается команда типа dd if=linux_font.psf of=bsd_font.fnt bs=1 skip=4 count=4096
где значение count приведено для шрифта стандартного (80x25) разрешения размером 8x16. Однако теоретически можно сделать и шрифт для высокого разрешения – 8x8. А если исходный шрифт – Unicode (а в дистрибутивах Linux есть и такие), то, вычислив смещение, можно изготовить буковки в любой кириллической кодировке. Впрочем, каюсь, я в вычислениях запутался – нормально у меня получились только фонты 8x16 для CP866 .
С клавиатурными раскладками – несколько хуже: во FreeBSD они имеют место быть только для KOI8 и CP866, но не для CP1251. В Сети последних для Free (а по формату они немного другие, чем для Linux) я тоже не нашел. Осталось изготовить эту раскладку собственноручно – заодно и с переопределением всяких Win-клавиш по собственному разумению .
Наконец, если нет желания менять экранные шрифты, той же командой vidcontrol в форме vidcontrol -l *.scm
можно подгрузить и требуемую карту соответствия. Опять же, если таковая имеется – а штатно она есть только для KOI8 -> CP866. Но и тут принципиальных сложностей не предвидится – с помощью толики терпения и чьей-то матери нужную карту можно склепать вручную.
Однако и средства syscons – не панацея от всех бед. Главный их недостаток – переключение шрифта, раскладки и таблицы соответствия между ними действует на все виртуальные консоли сразу. И потому мечта – сочинять текст в KOI8, время от времени просматривая документы, сохраненные в CP1251, – имеет шанс так и остаться мечтой. А уж о том, чтобы таскать между ними фрагменты, казалось бы, можно забыть.
Можно – если бы не открытие на сайте винницкой фирмы замечательной программки mapchan, позволяющей (цитирую README) «произвольным образом преобразовывать терминальный ввод-вывод». И дающей, таким образом, возможность работать на различных виртуальных консолях с документами в любых кодировках (в общем случае – не только кириллицы, и не только на локальной машине, но и с удаленных терминалах, но этот аспект я затрагивать не буду).
Программа (автор ее представляется как Yura Kalinichenko) являет собой модернизацию одноименной утилиты из SCO Unix и написана, судя по всему, под Linux. Однако ничего Linux-специфичного не содержит и потому должна работать под любым Unix'ом. За любой – не скажу, но под FreeBSD она устанавливается без проблем и работает прекрасно.
Установка ее – стандартна, распаковывается архив и от имени root'а даются команды make make install
Правда, при этом свой исполнимый файл (mapchan же) записывается непосредственно в каталог /bin, а дополнительные компоненты (в частности, собственно таблицы перекодировки ввода/вывода – map-файлы) предлагается руками положить в каталог /etc/mapchan. Если это почему-либо не устраивает – можно обойтись без make install и вручную расписать их куда угодно (например, как $HOME/bin/mapchan и т.д.). Далее программа запускается следующим образом mapchan -s [shell] -f /path/file.map
после чего в текущей консоли грузится указанная опцией -s оболочка, в которой можно наслаждаться чтением и писанием русских текстов в той кодировке, которая определена заданным через опцию -f map-файлом, вне зависимости от того, какая кодировка определена для системы в целом. При этом не затрагиваются ни клавиатурные раскладки (все буквы находятся на тех же местах, что и раньше), ни их переключатели (кириллица/латиница переключаются тем же способом), ни экранные шрифты (вид их остается неизменным). Боле того, все прочие консоли сохраняют общесистемную кодировку. И выделенный мышью фрагмент в консоли с KOI8 в правильном виде вставляется на консоль с Win- или DOS-кодировкой.
Красота, да и только… Дело за малым – обзавестись достаточным количеством map-файлов для всех требуемых случаев. В комплекте таковые имеются для работы с DOS-кодировкой в KOI'шном терминале, и с кодировкой KOI8-U при терминалах с альтернативным DOS (он же – CP866) и с кодировкой ГОСТ'а. Есть и вариант для некоего терминала СМ7238 – я с таким не сталкивался.
А вот самый актуальный ныне случай – для работы с CP1251 при KOI-терминале, – не представлен. Изготовлением соответствующего map-файла следует озадачиться самостоятельно. Благо вследствие формата map-файла это просто: определяются две секции – input и output, которые заполняются соответствиями символов «кто -> во что преобразуется» (очевидно, что содержание секций представляет собой зеркальное отражение). При этом и исходный, и преобразуемый символы могут быть заданы почти любым образом – восьмеричными, шестнадцатеричными или десятичными их кодами, а то и просто символами, заключенными в одинарные кавычки (и даже без оных). Для удобочитаемости символы могут разделяться пробелами (а могут и не разделяться).
Иными словами, берутся любые требуемые кодовые таблицы и перекраиваются требуемым образом. Если же и это лениво – map-файлы для случая Windows и DOS на KOI-терминале можно взять у меня . И вызывать их указанным выше образом при необходимости.
[1] О причинах этого явления написано столько, что повторяться не буду. Отмечу только, что и здесь есть исключение – в OpenBSD штатно предусмотрена только кодировка KOI8 и для вывода.
[2] Хотя и в Linux никто не запрещает применения карт перекодировки – насколько я знаю, именно так по сию пору делается и в Slackware, и Debian.
[3] О чем можно судить хотя бы по тому, что все больше бесплатных web-хостов безальтернативно требуют Windows-кодировки для размещаемых на них страниц.
[4] Офис, web, графика в Linux. СПб: БХВ-Питер, 2001.
[5] http://beta.math.spbu.ru/~prof/w_re/. Правда, последнее время на него очень нелегко попасть.
[6] Архитектурных излишеств типа кодировок Mac и ISO8859-5 не предусмотрено, что, на мой взгляд, ценности программы отнюдь не снижает.
[7] Вроде бы в Tot-Recode для Windows такое было, или память мне изменяет?
[8] Большое спасибо Стасу Гобунову за подсказку, как именно это сделать.
[9] Заинтересованные могут посмотреть результаты на
[10] Результаты – см. предыдущее примечание.
[11] См. прим. [9]. [обратно к тексту]
Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с (http://www.softerra.ru/site/rules/)
Командная строка
:q или :q! - выход из редактора без сохранения изменений
:x - выход из редактора с записью, если файл был модифицирован
:w или w filename или w! filename - запись файла и возвращение в командный режим
:e filename или :e! filename - загрузка файла filename
:r filename - добавить содержимое указанного файла к редактируемому сразу за текущей строкой
:set nu - включить нумерацию строк
:set nonu - отключить нумерацию строк
:!command - выполнить команду UNIX не покидая редактора
:/word - выполнить поиск слова word в тексте
:/ - повторить поиск слова word далее по тексту
Командный режим
В этом режиме символы клавиатуры выполняют специальные функции (перемещение курсора, стирание частей текста, и т. д.), то есть функции редактирования.
Набираемые команды НЕ ОТОБРАЖАЮТСЯ НА ЭКРАНЕ!
Команды
i - переход в режим набора методом вставки перед текущим символом
a - переход в режим набора методом вставки за текущим символом
R - переход в режим набора текста методом набивки.
Команды Emacs
Некоторые версии Emacs предоставляют пользователю возможность через раскрывающиеся меню получить максимальный доступ к возможностям редактора. PSGML, в свою очередь, добавляет несколько новых окон к меню Emacs. Зачастую при вводе текста и перемещении по нему курсора использование меню требует большего времени, чем потребуется на нажатие соответствующей кнопки. Однако меню становятся полезными при работе с редкоиспользуемыми или труднозапоминаемыми комбинациями кнопок. Эта глава посвящена описанию использования пунктов меню, соответствующих определенным командам.
Обычно пользователь "говорит" редактору Emacs что именно нужно делать при нажатии специальных кнопок. Например, С-а (произносится "Control A" - нажатие клавиши А при нажатой клавише Ctrl) означает "переход курсора в начало текущей строки."
Многие команды Emacs выполняются при нажатии клавиши, называемой еще Meta-кнопкой. Некоторые ранние компьютеры имели специальную кнопку, которая именно так и называлась. Эта кнопка использовалась в комбинации с другими кнопками точно также, как в настоящее время используют клавишу Ctrl. На современных клавиатурах клавиша с названием "Meta" отсутствует. Вместо нее можно использовать Escape или Alt.
Комбинация с Meta-кнопкой предшествующая нажатию других клавиш обозначается через "М-". Например, M-f означает нажатие клавиши f при уже нажатой кнопке Escape. Если ваш компьютер или версия Emacs позволяет использовать кнопку Alt вместо метаклавиши, нажимайте ее в комбинации с другими клавишами точно так же, как это обычно делают с клавишами Ctrl или Shift.
Существуют команды, которые требуют нажатой клавиши Escape перед нажатием комбинации с кнопкой Ctrl. Такие комбинации обозначают M-C-x (Meta-Control-x). В документации также встречается обозначение ESC-C-x (если версия Emacs позволяет использовать Alt в качестве метаклавиши, то нужно нажать Alt+Ctrl+x). Данный документ описывает только один вариант использования метаклавиши.
Большое число команд Emacs выполняется при последовательном нажатии двух комбинаций клавиш. Например, нажатие С-x, а затем С-s (сокращенно пишется C-x C-s) приводит к записи текущего файла. Зачастую подобные комбинации группируются таким образом, чтобы по первой комбинации можно было определить к какому "семейству" относится команда. Например, все команды, начинающиеся с C-x - это команды работы с файлами: открытие, сохранение, выход без сохранения и т.п. Большинство этих команд представлены в пункте меню File.
Иногда первая комбинация клавиш вызывает на экран меню потенциально возможных вторых клавиш. Например, нажатие C-h приводит к появлению в окне минибуфера следующей строки:
C-h (Type ? for futher options) |
Возможности редактора Emacs настолько велики, что трудно предусмотреть такое большое число комбинаций клавиш для их реализации. Поэтому часто возникает необходимость вызвать командную строку, где вручную можно было бы набрать ту или иную команду. Нажатие M-x (x при нажатом Escape) делает доступным командную строку в окне минибуфера. При использовании дополнительных пакетов, таких как PSGML, расширяющих возможности Emacs, командная стока становится просто незаменимой.
Например, команда goto-line не имеет определенной комбинации клавиш (как это исправить будет показано в разделе "Настройка редактора Emacs"). Однако пользователь может заставить курсор перейти в указанную строку. Для этого нужно вызвать через M-x командную строку, набрать там команду goto-line и нажать Enter. Тогда Emacs выдаст в окне минибуфера подсказку:
Goto line: |
Прежде, чем приступать к исследованию возможностей многошаговых команд, нужно хорошо запомнить комбинацию клавиш, позволяющую прервать операцию - эта комбинация C-g. Например, при нажатии C-x Emacs выводит в окне минибуфера
C-x- |
Другой пример. К тяжелым, в плане понимания, последствиям приводит двойное нажатие клавиши Escape. В некоторых версиях UNIX последствия такого нажатия настолько необычны, что приводят пользователя в замешательство. В данном случае для отмены действия также нужно нажать C-g.
КОМАНДЫ МИНИБУФЕРА
^X ESC Повторить последнюю команду (`repeat-complex-command'). M-p/M-n Листать команды минибуфера вверх/вниз M-x list-command-history Tab/space/? Дополнить
Команды прямого форматирования [Inline Markup Commands]
Внутри абзаца с обычным текстом действуют несколько команд разметки, задающие вид текста в выходном формате. Все они начинаются с заглавной буквы, далее следует аргумент, заключенный в угловые скобки: LETTER<argument>. Аргумент может состоять из нескольких слов и занимать более одной строки.
I<argument>
Аргумент выводится курсивом. I соответствует HTML-тэгамem и var, что обычно используется для выделения слов или обозначения переменных.
Примеры:
Не стоит удалять с машины ядро Linux!
образуется из такой строки:
I<Не стоит> удалять с машины ядро Linux!
Сменить рабочую директорию на directory можно командой cd directory.
порождается
Сменить рабочую директорию на I<directory> можно командой B<cd> I<directory>.
B<argument>
Аргумент выводится жирным шрифтом. B соответствует тэгу HTML b. Используется для выделения текста, названий программ и ключей командной строки.
Примеры:
Всегда выполняйте команду shutdown перед тем, как отключить питание.
является результатом
B<Всегда> выполняйте команду shutdown перед тем, как отключить питание.
podchecker допускает опции -warnings и -nowarnings.
появляется из
B<podchecker> допускает опции B<-warnings> и B<-nowarnings>.
C<argument>
C обозначает код или другой текст, который надо изобразить, как есть, буквально. Соответствует тэгам HTML code, samp, и tt.
Примеры:
Каждая C-программа должна содержать функцию по имени main.
порождается
Каждая C-программа должна содержать функцию по имени C<main>.
Логическое значение ЛОЖЬ представляется [1 1 0], а логическая ИСТИНА -- [1 1 1].
порождается
Логическое значение ЛОЖЬ представляется C<[1 1 0]>, а логическая ИСТИНА -- C<[1 1 1]>.
L<reference> or L<description|reference>
Создает ссылку на существующий reference. Если часть description опущена, то видимым текстом ссылки будет reference, в противном случае это будет description. Команда L отдаленно напоминает гиперссылку HTML <a href="reference">description</a>, но в POD reference не является унифицированным локатором ресурса (URL).
reference может ссылаться только на сгенерированные метки [labels], которые автоматически создаются трансляторами POD-во-что-то-другое. Такие метки создаются для каждой команды =head и =item. Метка, связанная с командой =head heading будет образована из переведенного в нижний регистр heading, других изменений в heading не делается. А именно, заголовку:
=head1 Заголовок из Нескольких Слов (ЗНС)
будет автоматически сопоставлена метка
заголовок из нескольких слов (знс)
К меткам для =item'ов добавляется префикс item_, пробелы заменяются символами подчеркивания, а не-буквы и не-цифры заменяются на знак процента, за которым следует их шестнадцатеричный ASCII-код. А вы ожидали преобразования попроще? Так, если бы при подготовке данной статьи один из пунктов был бы обозначен, как
=item Автоматическая Генерация Ссылок.
то он получил бы метку
item_Автоматическая_Генерация_Ссылок%2e
поскольку ASCII-код точки равен 46 или 2e в шестнадцатеричном формате.
Пример:
Исходный текст
=head1 Введение
В разделе L<"Концепции"> излагаются основы.
=head1 Концепции
...
=head1 Синхронизация
=over 4
=item Блокировки
=item Race Conditions
=item Разрешение блокировок
=back
То, как справляться с блокировками уже обсуждалось в L<разделе Блокировки|"item_Блокировки"> и L<Разрешение блокировок|"item_Разрешение_блокировок">.
Результат
Команды редактора EX
Редактор vi построен на основе редактора ex. Редактор ex редактирует построчно. Из редактора vi можно вызвать команду ex - : вводится перед командой. Мы рассмотрим наиболее используемые команды. Если необходимо изменить более одной строки командами :s или :w определяется диапазон. Например : для изменения строк с 3 по 15 используется команда :3,15s/from/this/g.
:ab string strings Сокращение. Если в редакторе vi появляется слово string, происходит автоматическая замена. Например : команда :ab usa United States of America определяет сокращение для слова "usa". Теперь при вводе слова "usa" произойдет замена на "United States of America". :map keys new_seq Макрос. Замена клавиши или последовательности клавиш . :q Выход из редактора VI. Если были сделаны изменения - редактор сообщит об этом. :q! Выход из редактора VI без сохранения изменений. :s/pattern/to_pattern/options
Замена. Замена выражения pattern на выражение to_pattern. Без использования options производит замену первого вхождения выражения pattern. Если используется опция "g" - все вхождения выражения pattern будут заменены. Например : команда :1,$s/Dwayne/Dwight/g заменит все вхождения выражения "Dwayne" на "Dwight". :set [all] Установка некоторых параметров настройки VI и EX. Команда :set all выводит список всех возможных параметров (обратите внимание на раздел "Настройка VI и EX"). :una string Удаление ранее определенного сокращения командой :ab. :unm keys Удаление ранее определенного макроса командой ":map. :vi filename Начало редактирования нового файла. Если изменения не были сохранены - редактор выдаст предупреждение. :w Записать текущий файл. :w filename Записать файл с именем filename. :w >> filename Добавить содержимое буфера в файл filename. :wq Сохранить изменения и выйти.
Команды, специфичные для конкретного формата
В качестве крайнего средства можно использовать несколько команд, позволяющих автору полностью разделить текст между LaTeX и HTML версиями:
\latex{короткий текст исключительно для LaTeX} \html{короткий текст исключительно для HTML} \latexhtml{короткий текст исключительно для LaTeX }{ короткий текст исключительно для HTML} \begin{latexonly} текст исключительно для LaTeX \end{latexonly} \begin{htmlonly} текст исключительно для HTML \end{htmlonly}
Советую прибегать к разделению текстов только в том случае, когда никакая другая специализированная команда или окружение latex2html не в состоянии создать желаемую разметку. Разделение на разные ветви всегда требует дополнительных усилий по их синхронизации.
Комбинация образцов
Допускается логическая комбинация образцов с использованием следующих знаков: - ``или'', & & - ``и'', ! - ``не''.
Последовательности образцов, соединенных одним из знаков читаются слева направо.
Комбинация: ``образец1, образец2'' указывает, что действие выполняется над строками, попадающими в указанный ранг: то есть, начиная от строки, удовлетворяющей ``образец1" и вплоть до строки, удовлетворяющей ``образец2", включая ее саму.
Например:
/02\.95/ & & ($1 !~ /\.su/ $2 !~ /\.su/) - Указывает на строки, содержащие 02.95 и не имеющие .su одновременно в первом и во втором поле.
NR == 100, NR == 200 - Указывает строки с номерами от 100 до 200.
Компиляция message catalog-а :
Полученный файл обрабатывается утилитой для получения файла каталога .msg .
ПРИМЕЧАНИЕ: Здесь рассматривается исходная XPG4 версия, однако входящая в состав Linux libc (libc5) отличается ключами командной строки и имеет дополнительные возможности (не XPG). В частности, используя символ # можно определять костанты для генерации *.h файлов. (см. ). Однако в GNU libc (libc6) все приведено в соответствие с XPG (см. ).
$ gencat example.cat example.msg
Конфигурирование .Xdefaults
Не смотря на некоторую сумбурность описания, из него, надеюсь, ясно, в через меню Preferences - Defaults Settings в NEdit можно настроить почти все. Едиственно, следует не забыть сохранить сделанные изменения, дабы сделать их перманентными (через Preferences - Save Defaults).
Однако способов изменения некоторых параметров через меню обнаружить не удается. Так, в первозданном (и, возможно, не отвечающем вашему эстетическому идеалу) остались цвета фона и курсора, шрифт надписей меню и цвет его линейки, положение полосы скроллирования и еще кое-что.
Отчаиваться не следует - на сей предмет существует метод левой резьбы. То есть - ручной правки конфигурационного файла /$HOME/.Xdefaults, поисывающего особенности X-приложений.
Секции для NEdit в нем нет. Однако создать ее (хотя бы собственными средствами этого редактора) труда не составит. Для этого достаточно вставить такие строки: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! nedit
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! где строки с восклицательными знаками, естественно, не обязательны, служа всего-навсего ограничителями секции, а строка ! nedit - комментарий, дабы не забыть, о чем, собственно, идет речь.
Теперь дело за малым - нужно создать наполнение секции. Это можно сделать по наитию (и методом проб и ошибок), как в первом варианте этой заметки. А можно обратиться к системе помощи - тому самому ее пункту, где говорится о конфирурировании NEdit и, в частности, о ресурсах X Window (Help - Customizing - X Resources.
Здесь можно найти список почти всех параметров, которые не подлежат изменению через меню Preferences, но которые в принципе можно (хотя и не все - нужно) изменить. Не могу похвастаться, что я разобрался со всеми. И потому приведу этот список полностью, оставив без перевода и комментариев строки, смысл которых пока остается для меня неясным (надеюсь со временем ликвидировать эти прорехи):
nedit.tagFile: (not defined) Насколько я смог понять, нечто, имеющее отношение к программированию на C. Оригинальный комментарий таков: The name of a file of the type produced by Exuberant Ctags or the Unix ctags command, which NEdit will load at startup time (see Features for Programmers). The tag file provides a database from which NEdit can automatically open files containing the definition of a particular subroutine or data type. nedit.shell: /bin/csh Указание на оболочку командной строки, скрипты которой выполняются через меню Shell. Вероятно, хотя пока и не проверено, можно указать и bash, и что-нибудь еще. nedit.wordDelimiters: .,/\\`'!@#%^&*()-=+{}[]":;<>? Знаки, маркирующие (в дополнение к пробелам и табуляции) границы между словами при их выделении мышью (двойным щелчком на слове) или премещении курсора комбинацией клавиш Ctrl+Стрелки nedit.remapDeleteKey: False Указание значения True переопределяет клавишу Delete как Backspace. Комментарий гласит, что это может быть полезно при работе с клавиатурами систем DEC (вероятно, имеется в виду что-то вроде PDP или VAX) и Macintosh. Для пользователей PC, по-моему, практического значения не имеет. nedit.stdOpenDialog: False Возвращение значения True устанавливает стандартный для приложений, основанных на Motif, стиль диалоговых панелей. За незнакомством с последним, смысл опции не вполне понимаю.
nedit.bgMenuButton: [Shift][Ctrl][Meta][Alt][Btn3Down] Способ доступа к контекстному ( или фоновому) меню. По умолчанию для этой цели служит, как и в Windows, правая (третья - отсюда Button 3) кнопка мыши. Однако можно использовать и любой из четырех других вариантов (правда, клавиша Meta, по-моему - это из области Mac?). nedit.maxPrevOpenFiles: 30 Максимальное количество файлов в списке, вызываемом через меню File - Open Previous (то есть ранее открывавшихся или создававшихся). Насколько мне удалось понять, значение это сверху ограничено только размерами дисплея и его разрешением - при большом количестве список уходит за пределы видимости. Список открывавшихся ранее документов хранится в конфигурационном файле /$HOME/.neditdb. nedit.printCommand: (system specific) Этот параметр и серия следующих за ним определяют условия печати документов из редактора NEdit. По умолчанию все они используют системные установки. Насколько я понимаю, лучше их таковыми и оставить, если нет везких причин для иного решения. И понимания, как его реализовать (у меня такового понимания нет). nedit.printCopiesOption: (system specific) nedit.printQueueOption: (system specific) nedit.printNameOption: (system specific) nedit.printHostOption: (system specific) nedit.printDefaultQueue: (system specific) nedit.printDefaultHost: (system specific) К этим пунктам относится сказанное в предыдущем комментарии. nedit.multiClickTime: (system specific) Время ожидания второго щелчка кнопкой мыши, в течении которого он счиается за двойной. Здесь логично сохранить системную установку - не зря же вы ее делали для всех приложений. nedit*scrollBarPlacement: BOTTOM_LEFT Эта строка описывает положение и вид полосы прокрутки. При значении в примере (как ни старнно, это не значение по умолчанию - уже при первом запуске NEdit полоса прокрутки располагается справа) она должна располагаться вдоль левой границы окна и прокручиваться вперед смещением ползунка сверху вниз. Другие возможные значения : BOTTOM_RIGHT, TOP_LEFT и TOP_RIGHT; в двух последних случаях прямой скроллинг осуществляется движением ползунка снизу вверх. nedit*text.autoWrapPastedText: False По умолчанию запрещает автоматический перенос слов при наборе текста. Лучше так и оставить - настроить различные опции переноса слов для каждого конкретного сдучая проще настроить через меню Preferences - Wrap (или Preferences - Default Settings - Wrap), как было описано выше. nedit*text.heavyCursor: False Смысл этой строки не очень понял. Когда я вставлял ее в первозданном виде, курсор у меня просто исчезал вообще. Оригинальный комментарий: For monitors with poor resolution or users who have difficulty seeing the cursor, makes the cursor in the text editing area of the window heavier and darker. nedit*text.foreground: black Переходим к самому интересному - нстройке цветовой гаммы. Это - цвет шрифта набираемого текста. Смысл значения, думаю, понятен, а от рекомендаций воздержусь - товарищей нет на цвет и шритфа. nedit*text.background: white В этой строке определяется цвет фона редактируемого поля. nedit*text.selectForeground: black А здесь определяется цвет текста выделенного первичным способом (левой кнопкой мыши или стрелками указателя курсора при нажатой клавише Shift) фрагмента. nedit*text.selectBackground: gray80 Определение цвета фона выделенного первичным способом фрагмента. Следует заметить только, что число после наименования цвета обозанчает яркость (saturation) его в процентах. То есть gray80 - это светло-серый, а, скажем, gray20 - темно-серый. Во всех относящихся к цветовой гамме пунктах возможны также значения имени цвета с прилагателными - light или dark. nedit*text.highlightForeground: white Смысла этой строки (в отличие от следующей) не понял: изменение цвета в ней у меня не дает никакого видимого эффекта. Потому привожу оригинальный комментарий: Foreground (text) color for highlights (parenthesis flashing) in the text editing area of the NEdit window. nedit*text.highlightBackground: red Насколько установлено эмпирически, определяет цвет подсветки парных элементов (например, открывающей скобки при фиксации курсора на закрывающей). Оригинальный комментарий: Color for highlights (parenthesis flashing) in the text editing area of the NEdit window. nedit*text.cursorForeground: black Ну, понятно, просто цвет курсора. nedit*text.lineNumForeground: gray47 Цвет, которым передается нумерация строк (если эта опция включена). nedit*text.blinkRate: 600 А это частота мерцания курсора в миллисекундах. Если установить значение 0, курсор мерцать не будет. nedit*text.Translations: Не понял, оригинальный комментарий таков: Modifies key bindings (see below). Однако "below" я ничего по этому поводу не обнаружил, по карйней мере в этом разделе. nedit*foreground: black Задает цвет текста меню и диалоговых панелей. nedit*background: gray70 А здесь определяем цвет фона меню, диалоговых панелей и полосы прокрутки. nedit*fontList: helvetica-bold-14 В этой строке можно, наконец, определить гарнитуру, начертание и кегль шрифта интерфейсных элементов. За исключением шрифта в полях, скажем имен файлов при их открытии или сохранении, или в полях ввода кода и параметров в диалогах настройки меню, например (ни в том, ни в другом случае изменить шрифт мне не удалось). Не оказывает эта строка (также как и настройка через меню) и на шрифт вывода сообщений системы помощи, о чем скажу ниже. nc.autoStart: False Этот и следующий параметр, судя по всему, имеют отношение к применению NEdit в системах клиент/сервер. Смысла не понял, привожу оригинальный комментарий: Whether the nc program should automatically start an NEdit server (without prompting the user) if an appropriate server is not found. nc.serverCommand: nedit -server Оригинальный комментарий: Command used by the nc program to start an NEdit server. Далее следует фраза такого содержания, которую я понял как предложение использовать всякого рода расширения имен элементов, такие, как .background и т.д., для изменения цветов, шрифтов и прочих характеристик следующих далее элементов: nedit*statsForm Предлагает поределить вышеуказанные характеристики для статусной строки и строки поиска. При желании одна характеристика может распространяться на оба элемента, для этого вместо (.) следует использовать (*). Например, строка nedit*statsForm*background: gray задает для них единый серый цвет фона. nedit*menuBar В этой и нижеследующих строках можно по той же модели определить характеристики линии главного меню, nedit*textHorScrollBar ... полосы горизонтальной... nedit*textVertScrollBar ... и вертикальной прокрутки. nedit*helpText Эта строка, якобы, позволяет определить характеристики окна системы помощи. Однако у меня строка вида nedit*helpText*fontList: -cronyx-fixed-medium-r-*-*-20-*-*-*-*-*-koi8-r на шрифт сообщений Help'а никакого действия не оказала.
Тем не менее, эту проблему удалось победить методом ползучего эмпиризма, а именно, поместив собственноручно сконструированную строку nedit*font: -cronyx-fixed-medium-r-*-*-20-*-*-*-*-*-koi8-r
Не возьмусь судить, насколько она синтаксически грамотна, но, по крайней мере, после этого шрифт сообщений в окне помощи действительно изменился.
Как можно видеть, в секцию !nedit файла /$HOME/.Xdefaults можно внести изрядное количество строк. Но можно - не значит нужно. Достаточно ограничиться только теми строками, определяющими характеристики, не устраивающие вас по умолчанию. Так, я ограничился настройкой шрифтов текста, меню и системы помощи, а также цветовой гаммы рабочаго поля и интерфесных элементов - и прекрасно себя чувствую. Настолько, что рискнул в приложении 2 привести в качестве примера фрагмент своего файла /$HOME/.Xdefaults. Каковой, изменив при желании, можно просто поместить в свою конфигурацию. За чистоту синтаксиса поручиться не могу, но за работоспособность - готов.
Таким образом, редактированием файла /$HOME/.Xdefaults удается настроить то немногое, что не получается настроить через главное меню. Однако в домашнем каталоге пользователя можно обнаружить еще два конфигурационных файла, имеющих отношение к NEdit -
Конвертор кодировок rusconv
Программа rusconv преобразует файлы между основными русскими кодировками. Утилита предназначена для запуска из командной строки для обработки нескольких файлов одновременно.
Загрузить:
(100 КБайт)
Разархивация:
pkunzip -d rscnv311.zip
(32-битное консольное приложение, 155 КБайт)
Разархивация:
pkunzip -d rusconv.3.11.zip
(70 КБайт)
Разархивация:
gunzip rusconv.3.11.tar.gz
tar xf rusconv.3.11.tar
или
tar zxf rusconv.3.11.tar.gz
(55 КБайт)
Установка:
rpm -ihv rusconv-3.11-1.i386.rpm
Архивы также можно загрузить с узла ftp.kiarchive.ru: , , . RPM-пакет собран Виктором Вислобоковым <victor_v@permonline.ru>, оригинал - на .
Особенности:
Распространяется свободно с комментированными исходными текстами. Работает в операционных системах DOS, WINDOWS и UNIX. Понимает альтернативную кодировку (DOS, cp866), кодировку KOI8 (UNIX и Русский Интернет), кодировку Windows (cp1251), кодировку Macintosh и latinicu (russkij tekst latinskimi bukvami). Преобразовывает текстовые файлы из DOS-формата в UNIX-формат и обратно. Файлы можно переводить сразу в несколько кодировок. Можно переводить сразу несколько файлов. Поддержка длинных имен файлов и сетевых файлов. Для самых частых нужд - перенос стандартного русского текста из DOS в UNIX, из Windows в UNIX и обратно - достаточно одного ключа. Распространяется с утилитой, распознающей кодировку файла. Удобно использовать в командных файлах.
Копирование элементов
Существуют два способа копирования элементов со всеми подэлементами. Первый способ - это использовать описанные выше комбинации клавиш, чтобы удалить элемент со всеми вложенными элементами и тут же его вставить. Другой способ предусматривает копирование элемента в буфер обмена без удаления. Чтобы проделать это, нужно выполнить следующие шаги:
Нажмите C-M-u (команда sgml-backward-up-element), чтобы переместить курсор в начало копируемого элемента. При этом, если курсор первоначально находился внутри вложенного элемента, то потребуется нажать упомяную комбинацию клавиш еще раз. Процедуру повторять до тех пор, пока курсор не окажется в начале интересующего элемента. Нажмите C-@ или C-пробел, чтобы обозначить начало выделяемой области. Нажмите C-M-u (команда sgml-forward-element) для перемещения курсора в конец копируемого элемента. Нажмите M-w (команда kill-ring-save), чтобы скопировать элемент в буфер обмена (kill ring).
Чтобы ускорить процедуру копирования элемента в буфер обмена, можно оформить описанную выше процедуру в виде макроса в файле .emacs. Запуск этого макроса пускай будет осуществляться комбинацией клавиш C-c w. Текст макроса, копирующего текущий элемент в буфер обмена выглядит следующим образом:
(defun sgml-copy-element () (interactive) (sgml-backward-up-element) (let ((start (point))) (sgml-forward-element) (kill-ring-save start (point))))
; assign to ^Cw keystroke (define-key global-map "^Cw" sgml-copy-element) |