Подобно vi, текстовый редактор emacs - инструмент классический. Именно он стоит у истоков всего течения open source. И уже поэтому заслуживает внимания. К тому же он часто рассматривается как универсальный инструмент, позволяющий решать почти любые задачи - от правки конфигурационных файлов до написания исходников программ в многие тысячи строк.
Естественно, о emacs написано немало. Достаточно вспомнить книгу Ричарда Столмена "Руководство по GNU Emacs", недавно изданную в русском переводе. Не говоря уже о многочисленных статьях, как в Интернете, так и в традиционных журналах. Однако обычно уделяется внимание использованию emacs как редактора для программистов. Мы же посмотрим, каковы его возможности в написании не исходных, но просто текстов.
Функционально emacs существенно ближе к текстовым редакторам DOS, чем vi. Он имеет один-единственный режим - режим редактирования, включающийся сразу же после запуска редактора. Практически все нем манипуляции осуществляются с помощью управляющих клавиш Control, Escape и Alt в комбинации с буквенными. Что особенно приятно нашему человеку, комбинации эти работают вне зависимости от раскладки клавиатуры.
В основе концепции emacs лежит понятие буфера - то есть области оперативной памяти, в которой и осуществляются манипуляции с текстом. При запуске программы по умолчанию открывается пустой буфер. С буфером возможны следующие манипуляции:
Редактор emacs позволяет работать в одной консоли с несколькими файлами одновременно. С этой целью для каждого файл посредством ([Control+x] b) создается новый буфер со своим именем (которое никакого отношения к имени файла иметь не обязано).
В каждом буфере можно работать с любым количеством окон, сколько их поместится на экране. Разделение экрана на два окна осуществляется командой ([Control+x] 2), переход между окнами командой ([Control+x] o). Фрагменты текста могут переноситься из окна в окно либо штатными командами emacs, либо путем выделения мышью и вставки в позицию курсора щелчком средней ее клавиши.
Очень приятной особенностью emacs является нормальное, с точки зрения пользователя DOS, поведение клавиш Home и End, перемещающих курсор, соответственно, в начало и конец строки. И еще: перенос слов на границе экрана осуществляется без разрыва строки, то есть, в терминологии текстовых процессоров, без образования нового абзаца (который возникает только при нажатии клавиши Enter). Что очень полезно, если в дальнейшем предполагается экспорт в какой-либо текстовый процессор типа Word: искоренение лишних символов возврата каретки, возникающих при переносе слов во многих редакторах, - занятие не из самых жизнерадостных.
Редактор emacs обладает довольно эффективными инструментами для редактирования введенного текста. Они основываются на понятии блока - то есть текстового фрагмента, расположенного между меткой (вводимой комбинацией [Control+@] и текущим положением курсора. Блок может быть изъят (аналог Cut в Windows) командой [Control+w] и вставлен (в текущем окне или буфере, или в ином другом) командой [Control+y]. Имеется также многоуровневая отмена последовательностю команд ([Control+x] u).
В общем, пользователь, имеющий навыки работы со старыми текстовыми процессорами для DOS, основанными на использовании клавишных комбинаций, способен без большого труда освоить emacs. А доведя манипуляцию ими до автоматизма - и эффективно его использовать. Недостаток его (впрочем, характерный почти для всех консольных редакторов Linux) - крайне непривычное, для пользователей DOS использование мыши: с ее помощью можно только выделять фрагменты текста, но на текущую позицию курсора она никакого влияния не оказывает. Кроме того, мерцание последнего раздражает (по крайней мере, меня).
Впрочем, некоторая, скажем так, непривычность интерфейса emacs в известной мере сглаживается, если он запущен в окне терминала системы X Window. Это, как ни странно, не совсем то же самое, что emacs в режиме консольном. Правда, его можно запустить в окне терминала и в первозданном виде - командой emacs -nw (что означает "no window"); правда, не очень понятно, зачем это нужно - тогда уж лучше просто работать в консоли.
Потому что emacs, запущенный в терминальном окне той же командой без параметров, предоставляет многие дополнительные возможности по сравнению с чисто консольным вариантом. Для начала, в нем волшебным образом появляется строка меню, избавляющая от необходимости запоминания немерянного количества клавишных комбинаций (что само по себе не смертельно, но требует постоянной практики). Кроме того, курсор начинает вести себя обычным (для DOS/Windows-мигранта) способом, то есть может позиционироваться мышью. Есть и еще несколько приятных особенностей.
Итак, первое, что бросается в глаза при запуске emacs в окне терминала - это строка меню. Организованное не вполне стандартным, но по своему логичным образом.
Первым пунктом идет Buffers - основополагающее понятие для emacs. Здесь можно, во первых, переключаться между открытыми буферами, во вторых - вывести список буферов. В пункте Files, как это ни странно, помимо открытия, сохранения, переименования и вставки файла, также присутствуют операции с буферами (обращение и уничтожение буфера), а также с фреймами; термин "фрейм" в контексте emacs соответствует понятию окна в большинстве иных приложений.
В пункте Tools - масса всяких опций, от печати и сравнения файлов и буферов до чтения новостей, получения и отправки почты, поиска файлов, компилирования и отладки программ. В пункте Edit - обычный набор инструментов для редактирования (вырезание, копирование и вставка, а также отмена). Здесь же - всякого рода форматирование, именуемое свойствами текста - от шрифтоначертания и выравнивания до отступов и установок цвета фона и текста. В пункте Search - разнообразный поиск, а также работа с закладками (Bookmark).
Все, что не вошло в перечисленные пункты, собрано в пункте Mule (не от мула ли?). Главным образом, однако, он предназначен для установки языкового окружения. Причем язык может быть выбран почти любой - от английского и любого другого европейского до тибетского и эфиопского. Присутствует и русский, причем сразу в четырех своих ипостасях - ISO, Alt, KOI-8R и (да простят меня мои незалежные братья по этносу) KOI-8U.
В общем, через окно терминала наглядно можно видеть величие системы emacs, в которой, теоретически, заложены все мыслимые и немыслимые возможности. Которые в чисто консольном варианте замаскированы длинными списками команд. Однако, не смотря на изобилие возможностей, и для непосредственной задачи, то есть ввода текстов, emacs вполне пригоден.
Правда, для этого требуется некоторая привычка. Начать с того, что открытие файла осуществляется не вполне традиционно: при выборе из меню File - Open File внизу окна появляется нечто вроде командой строки с предложением ввести имя открываемого файла. Сделать это не сложно - поддерживается режим дополнения пути с помощью клавиши табулятора.
Если же на приглашение командной строки просто нажать Enter - появляется список файлов и подкаталогов текущего каталога (по умолчанию - $HOME). Который представляет собой отдельный буфер, видимый в их списке (пункт меню Buffers).
Далее с помощью мыши (или, конечно, курсором управления курсором) можно перейти к подкаталогу с требуемыми файлами. Однако открыть этот подкаталог можно, только нажав Enter. После чего появляется содержимое дочернего каталога, также представляющее собой самостоятельный буфер. В результате, при достаточной вложенности подкаталогов, довольно быстро пункт Buffers заполняется всеми этапами пути до требуемого файла. Так что лучше уж принять приглашение командной строки в самом начале...
Правда, после открытия файла никаких сложностей при его редактировании не возникает. Перемещение по тексту происходит обычным для пользователя DOS способом - с помощью клавиш управления курсором, Home и End, PageUp и PageDown, а также мыши; никаких неожиданных эффектов не возникает.
Выделение текстовых блоков - также обычное: мышью, клавишами управления курсором при нажатой клавише Shift; слово можно выделить двойным щелчком мышью. А щелкнув правой клавишей мыши, можно выделить блок между текущей и предшествовавшей позицией курсора.
В буфер обмена (не буфер в понимании emacs) автоматически попадают только блоки, выделенные мышью. Для помещения в буфер обмена фрагментов, выделенных клавишами управления курсором, их нужно поместить туда явным образом - через пункт меню Edit - Copy. Как ни странно, за этой операцией не закреплено комбинации горячих клавиш.
Вставка содержащегося в буфере обмена фрагмента, не зависимо от способа его помещения туда, может быть осуществлена щелчком правой клавиши мыши, через меню (Edit - Paste) или комбинацией клавиш Control+y.
Измененные файлы могут быть сохранены - через пункты меню File - Save Buffer или Save Buffer as. По умолчанию устанавливается также автосохранение файлов. Предупреждаю: если вы закрываете родительское для emacs окно терминала, не сохранив изменений - emacs будет закрыт, и никаких предупреждений о необходимости записи измененных файлов не ждите.
Интерактивных способов настройки emacs не предусмотрено. Такие параметры, как размер и гарнитура экранного шрифта, его цвет и цвет фона, изменяются ручным редактированием файла ~/.Xdefaults (в домашнем каталоге пользователя). Относящаяся к emacs его секция имеет примерно такой вид: ! emacs, xemacs