GNU Emacs обрабатывает аргументы командной строки, которые запрашивают различные действия при вызове Emacs. Они существуют для совместимости с другими редакторами и для сложных процедур. Мы не рекомендуем использовать их для обычного редактирования.
Аргументы, начинающиеся со знака `-', называются ключами. Остальные аргументы задают файлы, к которым нужно обратиться. Emacs обращается к указанным файлам во время запуска. Имя файла, заданное в командной строке последним, становится текущим буфером; другие файлы также присутствуют, но в других буферах. Как обычно, особый аргумент `--' говорит, что все последующие аргументы являются именами файлов, а не ключами, даже если начинаются на `-'.
Командные ключи Emacs могут задавать многие вещи, например размер и положение X-окна, используемого Emacs, его цвета и так далее. Некоторые ключи поддерживают продвинутое использование, это, например, запуск лисповских функций для файлов в пакетном режиме. Разделы в этой главе описывают доступные ключи, расположенные в соответствии с их назначением.
Есть два способа записи ключей: короткие формы, начинающиеся с одного знака `-', и длинные формы, начинающиеся с `--'. Например, `-d' -- это короткая форма, а `--display' -- соответствующая длинная форма.
Длинные формы с `--' легче запомнить, но дольше печатать. Однако, вы не обязаны писать имя ключа полностью, достаточно любого однозначного сокращения. Когда длинный ключ принимает аргумент, вы можете использовать для разделения имени ключа и аргумента либо пробел, либо знак равенства. Таким образом, вы можете написать как `--display sugar-bombs:0.0', так и `--display=sugar-bombs:0.0'. Мы рекомендуем использовать знак равенства, так как он более четко показывает взаимосвязь, и в приведенных ниже таблицах всегда используется знак равенства.
Большинство ключей указывают, как инициализировать Emacs, или устанавливают параметры для всего сеанса Emacs. Мы называем их ключами запуска. Немногие ключи указывают, что нужно сделать: например, загрузить библиотеки, вызвать функции или выйти из Emacs. Такие ключи называют ключами действия. Их и имена файлов вместе называют аргументами действия. Emacs обрабатывает все аргументы действия в том порядке, в котором они были записаны.
Вот таблица аргументов и ключей действия:
find-file
. Смотрите раздел Обращение к файлам.
find-file
, а затем перейти в
нем к строке с номером номер-строки.
load
. Смотрите раздел Библиотеки Лисп-программ для Emacs. Библиотека может находиться либо
в текущем каталоге, либо в пути поиска библиотек Emacs, как он задан
переменной EMACSLOADPATH
(смотрите раздел Общие переменные).
Файл инициализации может получить доступ к значениям аргументов
действия через список в переменной command-line-args
. Файл
инициализации может перекрыть обычную обработку аргументов действия или
определить новые путем чтения и установки этой переменной.
Ключи запуска задают параметры для данного сеанса Emacs. В этом разделе описаны более общие ключи запуска; некоторые другие ключи, относящиеся к X Windows, вводятся в следующих разделах.
Некоторые ключи запуска влияют на процесс загрузки файлов инициализации. Обычно Emacs загружает `site-start.el', если он существует, затем ваш собственный файл инициализации `~/.emacs', если он существует, и наконец, `default.el', если он существует; определенные ключи запрещают загрузку некоторых из этих файлов или заменяют их другими файлами.
DISPLAY
, даже если она установлена.
stderr
только то, что в нормальном режиме выводилось бы программами в
эхо-область.
Пакетный режим используется для запуска программ, написанных на языке
Emacs Lisp, из сценариев командного интерпретатора, Make-файлов и так
далее. Обычно при этом также используются ключи `-l' или
`-f', чтобы запустить Лисп-программу для пакетной обработки.
Ключ `-batch' подразумевает `-q' (не загружать файл
инициализации). Он также заставляет Emacs прекратить работу после того,
как обработаны все командные ключи. Кроме того, самосохранение
производится только в тех буферах, в которых оно было затребовано явно.
Здесь приведен пример использования Emacs с аргументами и ключами. Он предполагает, что у вас есть программа на Лиспе, называемая `hack-c.el', которая будучи загруженной выполняет некоторые полезные действия над текущим буфером, предположительно программой на Си.
emacs -batch foo.c -l hack-c -f save-buffer >& log
Это говорит Emacs обратиться к файлу `foo.c', загрузить
`hack-c.el' (которая производит изменения в файле, к которому вы
обратились), сохранить `foo.c' (заметьте, что save-buffer
--- это функция, которая привязана к C-x C-s), а затем вернуться в
оболочку (из-за `-batch'). Ключ `-batch' также гарантирует,
что не будет проблем с перенаправлением вывода в файл `log', так
как Emacs не будет предполагать, что он должен работать с терминалом.
Вы можете задать для Emacs аргументы действия, когда вы возвращаетесь в него после приостановки. Чтобы подготовиться к этому, поместите в ваш файл `.emacs' следующий код (смотрите раздел Ловушки):
(add-hook 'suspend-hook 'resume-suspend-hook) (add-hook 'suspend-resume-hook 'resume-process-args)
Для дальнейшей подготовки вы должны выполнить сценарий оболочки,
`emacs.csh' (если вы используете в качестве оболочки csh) или
`emacs.bash' (если вы пользуетесь bash). Эти сценарии определяют
псевдоним с именем edit
, который будет возвращать в Emacs,
передавая ему новые аргументы командной строки, например файлы для
редактирования.
Когда вы возвращаетесь в Emacs, правильно работают только аргументы действия. Аргументы запуска не распознаются -- так или иначе, их слишком поздно исполнять.
Обратите внимание, возврат в Emacs (с аргументами или без) должен
производиться из оболочки, являющейся родительским процессом задания
Emacs. Именно поэтому edit
-- это псевдоним, а не программа или
сценарий. Невозможно реализовать команду возврата, которую можно было
бы запускать из подзадач этой оболочки; например, невозможно определить
команду, которую можно было бы сделать значением переменной
EDITOR
. Следовательно, команда возврата не эквивалентна по
возможностям серверу Emacs (смотрите раздел Использование Emacs в качестве сервера).
Эти псевдонимы используют сервер Emacs, если оказалось, что он уже запущен. Однако, они не могут определить это абсолютно точно. Они могут полагать, что сервер все еще запущен, Emacs, потому что файл `/tmp/.esrv...' все так же существует, тогда как в действительности вы уничтожили тот Emacs. Если такое происходит, найдите этот файл и удалите его.
В этом приложении описано, как Emacs использует переменные среды. Переменная среды -- это строка, передаваемая операционной системой в Emacs, а все множество переменных среды называется средой. Имена переменных среды регистрозависимы, и для них принято использовать только заглавные буквы.
Так как переменные среды исходят от операционной системы, общего способа для их установки нет; он зависит от используемой вами операционной системы и в особенности от оболочки. Например, так можно установить переменную среды `ORGANIZATION' в значение `не особая' с использованием bash:
export ORGANIZATION="не особая"
а так это можно сделать в csh или tcsh:
setenv ORGANIZATION "не особая"
Когда Emacs настроен для использования оконной системы X, он наследует большое число переменных среды из библиотеки X. Для дальнейшей информации смотрите документацию по X Windows.
cd
для поиска указанного вами каталога,
если вы задали относительное имя.
--unibyte
при каждом
вызове. Смотрите раздел Ключи запуска.
data-directory
,
необходимой для нахождения не зависящих от архитектуры компьютера
файлов, поставляемых с Emacs. Установка этой переменной перекрывает
значение, заданное в файле `paths.h' во время сборки Emacs.
complete
для поиска файлов.
exec-path
; лучше использовать именно эту переменную.
mail-default-reply-to
. Смотрите раздел Поля заголовка сообщения.
version-control
(смотрите раздел Одиночные или нумерованные резервные файлы).
Следующие переменные используются лишь в определенных конфигурациях:
Переменная среды `DISPLAY' сообщает всем X-клиентам, включая Emacs, где нужно отображать их окна. Ее значение создается автоматически при обычных обстоятельствах, когда вы включили X-сервер и запускаете задачи локально. Но иногда вам может понадобиться указать дисплей самим; например, если вы заходите на удаленную систему и хотите запускать программы-клиенты удаленно, но с отображением на вашем локальном экране.
В случае с Emacs, основная причина, по которой люди изменяют дисплей по умолчанию, состоит в том, чтобы позволить им зайти на другую систему и запустить в ней Emacs, но отображать его окна на локальном терминале. Ситуация, когда вам может понадобиться зайти на другую систему, возникает, к примеру, когда там находятся файлы, которые вы собрались редактировать, или исполняемый файл Emacs.
Переменная среды `DISPLAY' имеет следующий синтаксис: `машина:дисплей.экран', где машина --- это имя машины, где запущен сервер системы X Windows, дисплей --- это произвольно присваиваемое число, отличающее ваш сервер (X-терминал) от других серверов на той же машине, а экран -- это редко используемое поле, позволяющее X-серверу контролировать несколько терминальных экранов. Точка и поле экран необязательны. Если поле экран включают, оно обычно равно нулю.
Для примера, если ваша машина называется `glasperle', и ваш сервер -- первый (и, возможно, единственный) сервер в конфигурации, то переменная `DISPLAY' равна `glasperle:0.0'.
Вы можете указать имя дисплея явно при запуске Emacs, либо изменив переменную `DISPLAY', либо с помощью ключа `-d дисплей' или `--display=дисплей'. Вот пример:
emacs --display=glasperle:0 &
Вы можете подавить прямое использование X Windows с помощью ключа `-nw'. Это ключ запуска. Он велит Emacs отображать, используя на управляющем терминале обычные знаки ASCII.
Иногда установки защиты доступа не позволяют программе с удаленной системы выводить на ваш локальный дисплей. В таком случае, попытка запуска Emacs даст подобное сообщение:
Xlib: connection to "glasperle:0.0" refused by server
Вы, вероятно, сможете справиться с этой проблемой, предоставив при
помощи команды xhost
на вашей локальной системе разрешение на
доступ для удаленной машины.
По умолчанию Emacs отображает текст шрифтом с именем `9x15', в котором каждый знак имеет ширину девять и высоту пятнадцать пикселей. Вы можете указать в командной строке другой шрифт с помощью ключа `-fn имя'.
В X Windows каждый шрифт обладает длинным именем, состоящим из одиннадцати слов или чисел, разделенных дефисами. У некоторых шрифтов кроме этого есть и более короткие псевдонимы -- `9x15' один из таких псевдонимов. Emacs допускает оба вида имен. Вы можете использовать шаблоны имен шрифтов; тогда Emacs позволит X Windows выбрать один из шрифтов, соответствующих шаблону. Вот пример, в котором задается шрифт, чьим псевдонимом, как оказывается, является `6x13':
emacs -fn "-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1" &
Вы также можете указать шрифт в вашем файле `.Xdefaults':
emacs.font: -misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1
Полное имя шрифта имеет следующий формат:
-производитель-семейство-насыщенность-наклон-тип_ширины-стиль... ...-пиксели-высота-гориз-верт-пропорциональность-ширина-кодировка
Используйте только равноширинные шрифты -- то есть такие, в которых
все знаки имеют одинаковую ширину; Emacs пока не умеет правильно
отображать шрифты переменной ширины. Любой шрифт с буквой `m' или
`c' в поле длинного имени пропорциональность ---
равноширинный. Вот как использовать программу xlsfonts
для
получения списка всех доступных на вашей системе равноширинных шрифтов:
xlsfonts -fn '*x*' | egrep "^[0-9]+x[0-9]+" xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-m*' xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-c*'
Чтобы просмотреть, как выглядит конкретный шрифт, используйте команду
xfd
. Например,
xfd -fn 6x13
покажет все знаки шрифта `6x13'.
Во время работы Emacs вы можете поменять шрифт текущего фрейма (смотрите раздел Установка параметров фрейма) или определенного сорта текста (смотрите раздел Использование разных начертаний).
Если у вас есть цветной дисплей, вы можете указать, какие цвета должны использоваться для различных частей экрана Emacs. Чтобы узнать, какие цвета доступны в вашей системе, посмотрите файл `/usr/lib/X11/rgb.txt'. Если вы не указали цвета, по умолчанию фон будет белым, а все остальное -- черным. На монохромном дисплее, текст будет черным, фон будет белым, а рамка -- серой, если это поддерживается дисплеем.
Вот список ключей для задания цветов:
Например, чтобы получить коралловый указатель мыши и синевато-серый текстовый курсор, введите:
emacs -ms coral -cr 'slate blue' &
Вы можете инвертировать цвета текста и фона с помощью ключа `-r' или через ресурс X Windows `reverseVideo'.
Ключ `-geometry' управляет положением начального фрейма Emacs. Формат для указания геометрии окна такой:
{+-}
означает плюс или минус. Знак плюс перед
сдвиг-по-x говорит, что это расстояние от левого края экрана; знак
минус говорит, что это расстояние от правого края. Знак плюс перед
сдвиг-по-y обозначает, что это расстояние от верхнего края экрана,
а знак минус -- что это расстояние от нижнего края. Сами значения
сдвиг-по-x и сдвиг-по-y могут быть положительными или
отрицательными, но это не меняет их смысл, только направление.
Emacs интерпретирует геометрию в тех же единицах, что и xterm
.
ширина и высота измеряются в знаках, так что фрейм с крупным
шрифтом будет больше, чем фрейм с мелким шрифтом. Сдвиг-по-x и
сдвиг-по-y измеряются в пикселях.
Так как последние две строки фрейма занимают строка режима и эхо-область, высота начального текстового окна на 2 меньше высоты, в указанной вами геометрии. В версиях Emacs, не использующих X-toolkit, полоска меню также занимает одну строку из указанного числа.
Вы не обязаны писать все поля при задании геометрии.
Если вы опустите и сдвиг-по-x, и сдвиг-по-y, программа управления окнами сама решит, где размещать фрейм Emacs, возможно, позволяя вам поместить его с помощью мыши. Например, `164x55' задает окно шириной 164 столбцов, достаточной для двух расположенных рядом окон обычной ширины, и высотой 55 строк.
По умолчанию ширина равна 80 столбцам, а высота -- 40 строкам. Вы можете не задавать ширину или высоту, или и то, и другое. Если описание геометрии начинается целым числом, Emacs интерпретирует его как ширину. Если вы начнете описание с `x', за которым идет число, Emacs воспримет это как высоту. Таким образом, `81' задает только ширину; `x45' задает только высоту.
Если вы написали в начале `+' или `-', это начинает описание сдвига, что означает, что оба размера опущены. Таким образом, `-3' задает только сдвиг-по-x. (Если вы задали лишь один сдвиг, это всегда сдвиг-по-x.) `+3-3' задает и сдвиг-по-x, и сдвиг-по-y, помещая фрейм возле нижнего левого края экрана.
Вы можете указать значения по умолчанию для любого из этих полей в файле `.Xdefaults', ключ `--geometry' тогда перекрывает эти установки.
Фрейм Emacs имеет внутреннюю и внешнюю рамки. Внутренняя рамка --- это дополнительная полоска цвета фона по четырем сторонам фрейма. Внутреннюю рамку добавляет сам Emacs. Внешняя рамка добавляется программой управления окнами за пределами внутренней рамки; она может содержать различные кнопки, на которые вы можете щелкнуть для перемещения или минимизирования этого окна.
Когда вы задаете размер фрейма, ширина рамок не учитывается. Позиция фрейма отсчитывается от внешней границы внешней рамки.
Для задания внутренней рамки шириной n пикселей используйте ключ `-ib n'. По умолчанию это 1. Для задания внешней рамки шириной n пикселей используйте ключ `-bw n' (хотя программа управления окнами может и не учесть заданное вами число). По умолчанию ширина внешней рамки равна двум.
Фрейм Emacs может иметь заголовок или не иметь его. Заголовок фрейма, если задан, появляется в оформлении окна и пиктограммах как имя этого фрейма. Если заголовок фрейма Emacs не задан, по умолчанию он будет составлен из имени исполняемой программы и имени вашей машины (если есть только один фрейм), или им будет имя буфера в выбранном окне (если есть несколько фреймов).
Вы можете указать заголовок начального фрейма Emacs с помощью ключа командной строки:
Ключ `--name' (смотрите раздел X-ресурсы) также задает заголовок начального фрейма Emacs.
Большинство программ управления окнами позволяют пользователю "минимизировать" фрейм, убирая его из виду и оставляя на его месте небольшое отличительное окно-"пиктограмму". Если щелкнуть на окне-пиктограмме, снова появится сам фрейм. Если у вас одновременно запущено несколько клиентов, вы можете избежать загромождения экрана, минимизировав большинство из них.
Ключ `-i' или `--icon-type' говорит Emacs использовать пиктограмму, содержащую рисунок с изображением гну GNU. Если этот ключ не задан, Emacs предоставляет выбор пиктограммы программе управления окнами -- обычно это просто небольшой прямоугольник с заголовком фрейма.
Ключ `-iconic' велит Emacs запускаться как пиктограмма, а не открывая фрейм обычным способом. В таком случае пиктограмма только показывает, что Emacs запустился; обычный текстовый фрейм не появляется, пока вы не деминимизируете его.
Запущенные в системе X Windows программы организуют свои пользовательские параметры в иерархию классов и ресурсов. Вы можете задать для этих параметров значения по умолчанию в вашем файле X-ресурсов, обычно называемом `~/.Xdefaults'.
Каждая строка в этом файле задает значение одного параметра или набора связанных параметров для одной или нескольких программ (возможно, даже для всех программ).
Программы определяют именованные ресурсы с конкретным смыслом. Они также определяют, как ресурсы группируются в именованные классы. Например, ресурс `internalBorder' в Emacs контролирует ширину внутренней рамки, а ресурс `borderWidth' -- ширину внешней рамки. Оба этих ресурса являются частью класса `BorderWidth'. В этих именах важен правильный регистр букв.
В файле `~/.Xdefaults' вы можете задать значение для одного ресурса в каждой строке, следующим образом:
emacs.borderWidth: 2
Или вы можете использовать имя класса, чтобы задать то же значение для всех ресурсов этого класса. Вот пример:
emacs.BorderWidth: 2
Если вы задали значение для класса, оно становится значением по умолчанию для всех ресурсов этого класса. Вы также можете указать значения для отдельных ресурсов; для этих конкретных ресурсов они перекроют значение, общее для класса. Таким образом, следующий пример задает 2 как ширину всех рамок по умолчанию, но заменяет это значение на 4 для внешней рамки:
emacs.Borderwidth: 2 emacs.borderwidth: 4
Порядок, в котором эти строки появляются в этом файле, не играет роли. Также, ключи командной строки всегда обладают приоритетом перед файлом X-ресурсов.
Строка `emacs' в примере выше также является именем ресурса. На самом деле, она представляет собой имя исполняемого файла, который вы использовали для запуска Emacs. Если Emacs установлен под другим именем, он ищет ресурсы с этим именем, а не с `emacs'.
Для согласованности, `-name' также задает имя для использования со значениями других ресурсов, не принадлежащих какому-то определенному фрейму.
Ресурсы, именующие любой запущенный Emacs, также образуют класс; его имя -- `Emacs'. Если вы напишете `Emacs' вместо `emacs', то такой ресурс будет относиться ко всем фреймам во всех заданиях Emacs, вне зависимости от заголовков фреймов и имени исполняемого файла. Вот пример:
Emacs.BorderWidth: 2 Emacs.borderWidth: 4
Вы можете указать строку значений дополнительных ресурсов для Emacs с
помощью ключа командной строки -xrm=ресурсы
. Текст
ресурсы должен иметь тот же формат, что вы используете в файле
X-ресурсов. Чтобы задать спецификации нескольких ресурсов, разделите их
переводом строки, как вы сделали бы в файле. Вы также можете
использовать `#include "имя-файла"' для включения файла
ресурсов. Значения ресурсов, заданные через -xrm
, имеет
приоритет перед всеми остальными спецификациями.
Следующая таблица перечисляет имена ресурсов, обозначающих параметры для Emacs, каждый со своим классом:
background
(class Background
)
bitmapIcon
(class BitmapIcon
)
borderColor
(class BorderColor
)
borderWidth
(class BorderWidth
)
cursorColor
(class Foreground
)
font
(class Font
)
foreground
(class Foreground
)
geometry
(class Geometry
)
iconName
(class Title
)
internalBorder
(class BorderWidth
)
menuBar
(class MenuBar
)
minibuffer
(class Minibuffer
)
paneFont
(class Font
)
pointerColor
(class Foreground
)
reverseVideo
(class ReverseVideo
)
verticalScrollBars
(class ScrollBars
)
selectionFont
(class Font
)
title
(class Title
)
Это ресурсы для изменения внешнего вида определенных начертаний (смотрите раздел Использование разных начертаний):
начертание.attributeFont
начертание.attributeForeground
начертание.attributeBackground
начертание.attributeUnderline
Если установленный на вашей системе Emacs был собран с использованием библиотеки с виджетами меню Lucid, то полоска меню -- это отдельный виджет, и у него свои ресурсы. Имена этих ресурсов содержат строку `pane.menubar' (как всегда, после строки вызова Emacs или `Emacs', что обозначает любой вызов). Задавайте их так:
Emacs.pane.menubar.ресурс: значение
Например, чтобы задать для пунктов меню шрифт `8x16', напишите так:
Emacs.pane.menubar.font: 8x16
Ресурсы для всплывающих меню, а не полоски меню, начинаются с `menu*' подобным же образом. Например, чтобы задать для пунктов всплывающих меню шрифт `8x16', напишите следующее:
Emacs.menu*.font: 8x16
Для диалогов вместо `menu' пишите `dialog':
Emacs.dialog*.font: 8x16
Опыт показывает, что на некоторых системах вам может понадобиться добавить перед `pane.menubar' или `menu*' строку `shell.'. На некоторых других системах вы должны не добавлять `shell.'.
Вот перечень ресурсов для полоски меню и всплывающих меню:
font
foreground
background
buttonForeground
horizontalSpacing
verticalSpacing
arrowSpacing
shadowThickness
Если установленный на вашей системе Emacs был собран с использованием библиотеки виджетов Motif, то полоска меню -- это отдельный виджет, и у него свои ресурсы. Имена этих ресурсов содержат строку `pane.menubar' (как всегда, после строки вызова Emacs или `Emacs', что обозначает любой вызов). Задавайте их так:
Emacs.pane.menubar.подвиджет.ресурс: значение
Каждая отдельная строка в полоске меню является подвиджетом; имя подвиджета такое же, что и текст пункта. Например, слово `Files' в полоске меню -- это часть подвиджета с именем `emacs.pane.menubar.Files'. Вероятнее всего вы захотите задать одни и те же ресурсы для всей полоски меню. Чтобы сделать это, используйте `*' вместо имени конкретного подвиджета. Например, чтобы задать для пунктов меню шрифт `8x16', напишите следующее:
Emacs.pane.menubar.*.fontList: 8x16
Это также задает значение этого ресурса для подменю.
Каждый пункт в подменю полоски меню также имеет собственное имя для X-ресурсов; например, подменю `Files' имеет пункт, называемый `Save Buffer'. Описание ресурса для пункта подменю выглядит так:
Emacs.pane.menubar.popup_*.меню.пункт.ресурс: значение
Например, задать шрифт для пункта `Save Buffer' можно следующим образом:
Emacs.pane.menubar.popup_*.Files.Save Buffer.fontList: 8x16
Для пункта в подменю второго уровня, таком как `Check Message' в подменю `Spell' в меню `Edit', ресурс соответствует такому шаблону:
Emacs.pane.menubar.popup_*.popup_*.меню.ресурс: значение
Например,
Emacs.pane.menubar.popup_*.popup_*.Spell.Check Message: значение
Невозможно определить ресурс для всех пунктов полоски меню, не определяя их также и для подменю. Поэтому, если вы хотите, чтобы пункты подменю выглядели не так, как сама полоска меню, вы должны попросить об этом в два этапа. Сначала задайте ресурс для всех их; затем переопределите это значение только для подменю. Вот пример:
Emacs.pane.menubar.*.fontList: 8x16 Emacs.pane.menubar.popup_*.fontList: 8x16
Для всплывающих меню используйте `menu*', а не `pane.menubar'. Например, чтобы задать для пунктов всплывающих меню шрифт `8x16', напишите вот это:
Emacs.menu*.fontList: 8x16
Вот перечень ресурсов для полосок меню и всплывающих меню:
armColor
fontList
marginBottom
marginHeight
marginLeft
marginRight
marginTop
marginWidth
borderWidth
shadowThickness
bottomShadowColor
topShadowColor