Вы можете сделать так, чтобы в качестве редактора для программ вроде mail использовался ваш существующий процесс Emacs, путем применения клиента и сервера Emacs. Вот как это делается.
Во-первых, подготовка. Внутри Emacs, вызовите функцию server-start. (Ваш файл
‘.emacs’ может делать это автоматически, если вы добавите в него выражение (serverstart).) Затем, извне Emacs, установите переменную среды EDITOR равной ‘emacsclient’. (Заметьте, что некоторые программы используют другую переменную среды; например,
чтобы TEX использовал ‘emacsclient’, вам нужно установить переменную среды TEXEDIT
равной ‘emacsclient +%d %s’.)
Впоследствии, когда любая программа вызывает указанную программу EDITOR, в результате вашему главному Emacs будет отправлено сообщение, чтобы он обратился к файлу. (Программа emacsclient делает именно это.) Emacs немедленно показывает этот буфер, и вы сразу можете начать его редактирование.
Когда вы завершите редактирование этого буфера, наберите C-x # (server-edit). Это сохранит файл и пошлет программе emacsclient сообщение, приказывающее выйти. Программы, использующие EDITOR, ожидают, пока “редактор” (на самом деле, emacsclient) не выйдет. C-x # также проверяет другие отложенные внешние запросы на редактирование различных файлов и выбирает следующий.
Вы можете переключиться в серверный буфер вручную, если хотите; необязательно попадать в него с помощью C-x #. Но C-x # дает единственный способ сказать, что “закончили” с текущим.
Если вы установите переменную server-window равной окну или фрейму, C-x # будет показывать серверный буфер в этом окне или фрейме.
Пока mail или другое приложение ожидает завершения emacsclient, emacsclient не читает терминальный ввод. Поэтому терминал, который использовала mail, как бы блокируется на это время. Чтобы редактировать в вашем главном Emacs, вам нужна возможность использовать Emacs без этого терминала. Есть два способа добиться этого:
• Используя оконную систему, запускайте mail и главный Emacs в двух разных окнах.
Пока mail ожидает emacsclient, окно, в котором она запущена, блокируется, но вы можете использовать Emacs, переключив окно.
• Используйте для запуска других программ, таких как mail, режим Shell в Emacs; тогда emacsclient блокирует только подоболочку в Emacs, и вы можете продолжать использовать Emacs для редактирования этого файла.
Некоторые программы записывают для вашего редактирования временные файлы. После того, как вы отредактировали такой временный файл, программа считывает его и удаляет. Если сервер Emacs позже попросят отредактировать файл с тем же именем, он не должен предполагать, что этот файл имеет какое-либо отношение к предыдущему появлению этого же имени. Сервер делает это, уничтожая буфер временного файла, когда вы закончили с ним. Используйте переменную server-temp-file-regexp, чтобы указать, какие файлы являются временными в этом смысле; ее значением должно быть регулярное выражение, совпадающее с именами временных файлов.
Если вы запускаете emacsclient с ключом ‘-no-wait’, он возвращается сразу, не дожи-
даясь, пока вы “завершите” с буфером в Emacs.
30.4 Вывод твердой копии
Команды Emacs для создания твердой копии позволяют вам напечатать весь буфер или только его часть с заголовками или без них. Смотрите также команды печати Dired (см. Раздел 14.10 [Другие действия над файлами], с. 132) и дневника (см. Раздел 29.10.1 [Команды дневника], с. 313).
M-x print-buffer
Выдать распечатку текущего буфера с заголовками, содержащими имя файла и номер страницы.
M-x lpr-buffer
Выдать распечатку текущего буфера без заголовков страниц.
M-x print-region
Как print-buffer, но печатать только текущую область.
M-x lpr-region
Как lpr-buffer, но печатать только текущую область.
Все команды печати (кроме использующих Postscript) передают программе lpr дополнительные ключи, базирующиеся на значении переменной lpr-switches. Ее значение должно быть списком строк, причем каждая строка — это ключ, начинающийся с ‘-’. Например, чтобы сделать ширину строк равной восьмидесяти столбцам для всех распечаток, получаемых из Emacs, установите lpr-switches так:
(setq lpr-switches ’("-w80"))
Вы можете указать, какой принтер должен использоваться, установив переменную
printer-name.
Переменная lpr-command задает имя используемой программы печати; значение по умолчанию зависит от типа вашей операционной системы. На большинстве систем это "lpr". Переменная lpr-headers-switches похожим образом задает дополнительные ключи для создания заголовков страниц. Переменная lpr-add-switches указывает, нужно ли передавать программе печати ключи ‘-T’ и ‘-J’ (подходящие для lpr): nil означает, что добавлять их не надо. lpr-add-switches должна быть равна nil, если ваша программа печати не совместима с lpr.
30.5 Печать через Postscript
Эти команды преобразуют содержимое буфера в Postscript и либо печатают его, либо оставляют в другом буфере Emacs.
M-x ps-print-buffer
Выводит распечатку текущего буфера в форме Postscript.
M-x ps-print-region
Выводит распечатку текущей области в форме Postscript.
M-x ps-print-buffer-with-faces
Выводит распечатку текущего буфера в форме Postscript, показывая использо-
ванные в тексте начертания средствами Postscript.
M-x ps-print-region-with-faces
Выводит распечатку текущей области в форме Postscript, показывая использо-
ванные в тексте начертания средствами Postscript.
M-x ps-spool-buffer
Генерирует Postscript для текста текущего буфера.
M-x ps-spool-region
Генерирует Postscript для текущей области.
M-x ps-spool-buffer-with-faces
Генерирует Postscript для текущего буфера, показывая использованные начер-
тания.
M-x ps-spool-region-with-faces
Генерирует Postscript для текущей области, показывая использованные начер-
тания.
Команды работы с Postscript, ps-print-buffer и ps-print-region, печатают содержимое буфера в форме Postscript. Одна команда печатает весь буфер, другая — только область. Соответствующие команды с окончанием ‘-with-faces’, ps-print-buffer-withfaces и ps-print-region-with-faces, используют средства Postscript для передачи начертаний (шрифтов и цветов) в свойствах печатаемого текста.
Если вы используете цветной дисплей, вы можете напечатать буфер, содержащий код программы, с цветовой подсветкой, включив в этом буфере режим Font-Lock и вызвав ps-print-buffer-with-faces.
Команды, чьи имена содержат ‘spool’ на месте ‘print’, генерируют вывод Postscript в буфере Emacs, а не посылают его на принтер.
30.6 Переменные, управляющие печатью в Postscript
Все команды печати через Postscript используют переменные ps-lpr-command и pslpr-switches, указывающие, как нужно печатать. ps-lpr-command задает имя запускаемой команды, ps-lpr-switches задает ключи командной строки, а ps-printer-name
задает принтер. Если вы не установили первые две переменные сами, они получают свои начальные значения от lpr-command и lpr-switches. Если ps-printer-name равна nil, используется printer-name.
Переменная ps-print-header контролирует, будут ли эти команды добавлять строки заголовка для каждой страницы, — установите ее равной nil, чтобы выключить заголовки. Вы можете отключить обработку цветов, установив ps-print-color-p в значение nil.
Переменная ps-paper-type указывает, для какого размера станицы нужно форматировать; допустимые значения включают a4, a3, a4small, b4, b5, executive, ledger, legal, letter, letter-small, statement, tabloid. По умолчанию это letter. Вы можете определить дополнительные размеры бумаги, изменяя переменную ps-page-dimensionsdatabase.
Переменная ps-landscape-mode указывает ориентацию текста на странице. По умолчанию она равна nil, что обозначает “портретный” режим. Любое отличное от nil значение задает “ландшафтный” режим.
Переменная ps-number-of-columns задает число колонок; она играет роль и в “портрет-
ном”, и в “ландшафтном” режиме. По умолчанию это 1.
Переменная ps-font-family указывает, какое семейство шрифтов нужно использовать при печати обычного текста. Допустимые значения включают Courier, Helvetica, NewCenturySchlbk, Palatino и Times. Переменная ps-font-size задает размер шрифта для обычного текста. По умолчанию это 8.5 пунктов.
Многие другие переменные для настройки этих команд определены и описаны в файле на Лиспе ‘ps-print.el’.
30.7 Сортировка текста
Emacs предоставляет несколько команд для сортировки текста в буфере. Все они оперируют с содержимым области (текстом между точкой и меткой). Эти команды разделяют текст области на большое число записей сортировки, определяют ключ сортировки для каждой записи и затем переставляют записи в порядке, определяемом ключами сортировки. Записи располагаются таким образом, чтобы их ключи находились в алфавитном или, для числовой сортировки, числовом порядке. При алфавитной сортировке все буквы верхнего регистра от ‘A’ до ‘Z’ идут перед ‘а’ нижнего регистра, в соответствии с последовательностью знаков ASCII.
Различие команд сортировки состоит в том, как они делят текст на записи сортировки, и какая часть каждой записи используется в качестве ключа сортировки. Большинство команд считают каждую строку отдельной записью, но некоторые используют в качестве таких записей абзацы или страницы. Большинство команд сортировки используют всю запись сортировки в качестве своего собственного ключа, но некоторые используют в качестве ключа сортировки только часть записи.
M-x sort-lines
Разделить область на строки и отсортировать в соответствии с полным тек-
стом строки. Числовой аргумент означает сортировку по убыванию.
M-x sort-paragraphs
Разделить область на абзацы и отсортировать, сравнивая текст абзацев целиком (за исключением пустых строк в начале). Числовой аргумент означает сортировку по убыванию.
M-x sort-pages
Разделить область на страницы и отсортировать, сравнивая полный текст страниц (за исключением пустых строк в начале). Числовой аргумент означает, что сортировка производится по убыванию.
M-x sort-fields
Разделить область на строки и отсортировать, сравнивая содержимое одного поля в каждой строке. Поля разделяются пропусками, так что первый отрезок последовательных непробельных знаков в строке составляет поле 1, второй такой отрезок составляет поле 2, и так далее.
Поле, по которому должна производится сортировка, указывается с помощью числового аргумента: 1 используется для сортировки по полю 1, и так далее. Отрицательный аргумент означает отсчет полей справа, а не слева; то есть минус 1 обозначает сортировку по последнему полю. Если содержание полей сортировки в нескольких строках одинаково, эти строки остаются в том же относительном порядке, в каком они были изначально.
Источник: Ричард Столмен, Руководство по GNU Emacs

April 14th, 2012
admin
Опубликовано в рубрике
Метки: