Как и всякая программа на Лиспе, Emacs использует много лисповских переменных для хранения внутренних записей. Но большинство переменных, которые представляют для вас интерес, — это те, что существуют ради настройки. Emacs (обычно) не меняет значения этих переменных, вместо этого вы сами устанавливаете значения, тем самым изменяя и управляя поведением некоторых команд Emacs. Эти переменные называются пользовательскими параметрами. Большинство параметров описаны в этом руководстве и приведены в указателе переменных (см. [Указатель переменных], с. 459).
Примером переменной, являющейся пользовательским параметром, служит fillcolumn; она определяет позицию правого края (как число знаков от левого края), которая используется командами заполнения (см. Раздел 21.5 [Заполнение], с. 185).
31.2.1 Просмотр и установка переменных
C-h v пер hRETi
Показывает значение переменной пер и документацию по ней (describevariable).
M-x set-variable hRETi пер hRETi значение hRETi
Изменяет значение переменной пер на значение.
Чтобы посмотреть значение отдельной переменной, используется команда C-h v (describe-variable), которая считывает в минибуфере имя переменной с возможностью завершения. Эта команда печатает и значение переменной, и документацию по ней. Например,
C-h v fill-column hRETi
выведет примерно следующее:
fill-column’s value is 75
Documentation:
*Column beyond which automatic line-wrapping should happen. Automatically becomes buffer-local when set in any fashion.
Звездочка в начале описания показывает, что эта переменная является пользовательским параметром. C-h v не ограничивается только пользовательскими параметрами, она принимает имя любой переменной.
Наиболее удобный способ установить конкретный параметр — выполнить M-x set-variable. Эта команда считывает имя переменной с помощью минибуфера (с завершением), а затем считывает лисповское выражение для нового значения, снова используя минибуфер. Например,
M-x set-variable hRETi fill-column hRETi 75 hRETi
устанавливает fill-column равной 75.
Действие M-x set-variable ограничено пользовательскими параметрами, но вы можете установить значение любой переменной с помощью выражения на языке Лисп, используя функцию setq. Вот выражение для установки значения переменной fill-column через setq:
(setq fill-column 75)
Чтобы выполнить выражение, подобное этому, переключитесь в буфер ‘*scratch*’, на-
берите выражение и затем нажмите C-j. См. Раздел 23.9 [Диалог с Лиспом], с. 255.
Установка переменных влияет только на текущий сеанс Emacs, так же, как и все осталь-
ные способы настройки Emacs, за исключением случаев, когда явно сказано иное.
31.2.2 Интерфейс для простой настройки
Удобный способ найти желаемые параметры и изменить их предоставляет команда M-x customize. Она создает буфер настройки, где вы можете просмотривать пользовательские параметры Emacs, представленные логически организованной структурой, редактировать их и устанавливать их значения. Вы также можете использовать буфер настройки для постоянного сохранения этих установок. (Пока в эту структуру включены не все пользовательские параметры Emacs, но мы добавляем оставшиеся.)
31.2.2.1 Группы настройки
В целях настройки пользовательские параметры собраны в группы, чтобы их было проще найти. Группы собраны в еще большие группы, и так до самой верхней группы, названной Emacs.
Команда M-x customize создает буфер настройки, который показывает группу верхнего уровня Emacs и группы, которые лежат на уровень ниже. Это выглядит примерно так, показана часть:
/Emacs group: ———————————-\
[State]: visible group members are all at standard settings. Customization of the One True Editor.
See also [Manual].
Editing group: [Go to Group] Basic text editing facilities.
External group: [Go to Group] Interfacing to external utilities.
еще группы второго уровня
\Emacs group end ——————————–/
Это означает, что буфер показывает содержимое группы Emacs. Другие группы перечисле-
ны здесь, поскольку они являются ее содержимым. Но они перечислены иначе, без отступов
и тире, потому что их содержимое сюда не включено. Каждая группа имеет однострочное описание; у группы Emacs также есть строка ‘[State]’.
Большинство текста в буфере настройки находится в режиме только для чтения, но обычно в него включено несколько редактируемых полей, которые вы можете изменять. Существуют также активные поля; это означает, что они делают что-то, когда вы активизируете их. Для активизации активного поля либо щелкните на нем кнопкой Mouse-1, или установите на нем точку и нажмите hRETi.
Например, фраза ‘[Go to Group]’, появляющая в группе второго уровня, — активное поле. Активизация поля ‘[Go to Group]’ для группы создает новый буфер настройки, который показывает эту группу и ее содержимое. Это поле является чем-то вроде гиперссылки на другую группу.
Сама группа Emacs не включает ни одного пользовательского параметра, но они есть в других группах. Исследуя разные группы, вы в конце концов найдете нужные вам параметры и начертания. Затем вы можете использовать буфер настройки, чтобы установить их.
Вы можете просмотреть структуру групп настройки в укрупненном виде, используя команду M-x customize-browse. Эта команда создает особый вид буфера настройки, который показывает только имена групп (а также параметры и начертания) и их структуру.
В этом буфере вы можете просматривать содержимое группы, активизируя кнопку
‘[+]’. Когда показывается содержимое группы, эта кнопка меняется на ‘[-]’; активизация этой кнопки прячет содержимое группы.
Имя каждой группы, параметра или начертания в этом буфере имеет активное поле, в котором написано ‘[Group]’, ‘[Option]’ или ‘[Face]’. При активизации этого активного поля создается обычный буфер настройки, показывающий только эту группу с ее содержимым, или только этот параметр или только это начертание. Таким способом устанавливают значения.
31.2.2.2 Изменение параметра
Здесь приведен пример того, как выглядят в буфере настройки пользовательский пара-
метр:
Kill Ring Max: [Hide] 30
[State]: this option is unchanged from its standard setting. Maximum length of kill ring before oldest elements are thrown away.
Текст, следующий за ‘[Hide]’, — в нашем случае это ‘30’ — показывает текущее значение параметра. Если вместо ‘[Hide]’ вы видите ‘[Show]’, то это означает, что значение скрыто; буфер настройки сначала скрывает значения, которые занимают несколько строк. Нажмите на ‘[Show]’, чтобы открыть значение.
Строка, следующая за именем параметра, показывает состояние настройки для данного параметра: в вышеприведенном примере, она сообщает, что вы еще не изменили этот параметр. Слово ‘[State]’ в начале строки является активным; вы можете получить меню разных операций, нажав на ней Mouse-1 или hRETi. Эти операции являются существенными для настройки переменной.
Строка после строки ‘[State]’ показывает начало описания данного параметра. Если документация занимает несколько строк, то эта строка оканчивается кнопкой ‘[More]’; вы можете выбрать ее для того, чтобы посмотреть более полное описание.
Для того чтобы ввести новое значение для ‘Kill Ring Max’, переместите точку к значению и отредактируйте его как обычный текст. Например, вы можете набрать M-d и ввести затем другое число.
Когда вы начинаете редактировать текст, вы увидите, что строка ‘[State]’ изменилась,
сообщая, что вы поменяли значение:
[State]: you have edited the value as text, but not set the option.
Изменение значения в действительности не устанавливает значение переменной. Для этого вы должны установить данный параметр. Чтобы сделать это, активизируйте кнопку
‘[State]’ и выберите ‘Set for Current Session’.
Когда вы установите параметр, его состояние визуально изменится:
[State]: you have set this option, but not saved it for future sessions.
Не нужно беспокоиться о том, что вы указали недопустимое значение; при установке параметра значение проверяется, и недопустимое значение никогда не будет установлено.
При редактировании значения поля, которое является именем файла, каталога, команды или чем-нибудь еще, для чего определено завершение, вы можете нажимать M-hTABi (widget-complete), чтобы произвести завершение.
Некоторые параметры имеют небольшой фиксированный набор возможных значений. Эти параметры не позволяют вам редактировать значения как текст. Вместо этого перед значением появляется активное поле ‘[Value Menu]’; активизируйте это поле для изменения значения. Для логического значения “вкл/выкл” активное поле показывает надпись
‘[Toggle]’, и оно переключает это значение. ‘[Value Menu]’ и ‘[Toggle]’ изменяют буфер;
изменения вступают в силу, когда вы используете операцию ‘Set for Current Session’.
Некоторые параметры имеют значения со сложной структурой. Например, значение переменной load-path является списком каталогов. Здесь показано, как оно изображается в буфере настройки:
Load Path:
[INS] [DEL] [Current dir?]: /usr/local/share/emacs/20.3/site-lisp
[INS] [DEL] [Current dir?]: /usr/local/share/emacs/site-lisp [INS] [DEL] [Current dir?]: /usr/local/share/emacs/20.3/leim [INS] [DEL] [Current dir?]: /usr/local/share/emacs/20.3/lisp [INS] [DEL] [Current dir?]: /build/emacs/e20/lisp
[INS] [DEL] [Current dir?]: /build/emacs/e20/lisp/gnus
[INS]
[State]: this item has been changed outside the customization buffer. List of directories to search for files to load….
Каждый каталог в этом списке изображается на отдельной строке, а каждая строка имеет несколько редактируемых или активных полей.
Вы можете изменять любое из имен каталогов. Для того чтобы удалить каталог из списка, выберите кнопку ‘[DEL]’ в его строке. Для того чтобы вставить в список новый каталог, выберите кнопку ‘[INS]’ в той точке, куда вы хотите вставить имя.
Вы также можете выбрать поле ‘[Current dir?]’, чтобы переключиться между включением в путь конкретного указанного каталога или значения nil. (nil в пути поиска означает “попробовать текущий каталог”).
Две специальные команды, hTABi и S-hTABi, полезны для перемещения по буферу настройки. hTABi (widget-forward) перемещает вперед на следующее активное или редактируемое поле; S-hTABi (widget-backward) перемещает в обратном направлении на предыдущее активное или редактируемое поле.
Нажимая hRETi на редактируемом поле, вы также перемещаетесь на следующее поле, аналогично действию hTABi. Причина этого заключается в том, что люди часто нажимают hRETi по завершении редактирования поля. Если вам понадобится вставить в редактируемое поле перевод строки, используйте C-o или C-q C-j.
Установка параметра изменяет его значение в текущем сеансе Emacs; сохранение зна-
чения изменяет его и для будущих сеансов. Это работает путем записи кода в ваш файл
Источник: Ричард Столмен, Руководство по GNU Emacs

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