Next Previous Contents

4. Настройка Emacs

Вся настройка Emacs выполняется через код на Lisp. Вы можете изменять переменные, которые влияют на то, каким образом работает Emacs или вы можете добавить новую функцию к Emacs (или переопределить существующие функции--заменяя их на свои собственные.

4.1 Временная настройка

Во время экспериментов с настройкой Emacs вы вероятно захотите сделать ее на некоторое время. Если что-то пойдет неправильно, то вы сможете просто нажать на C-x C-c для выхода из emacs и запустить его и запустить его снова. После того как вы определите, какие изменения вы хотите сделать постоянными, вы можете добавить их в ваш файл .emacs, так что они будут действовать каждый раз при старте Emacs. Это обсуждается в следующем разделе.

Присвоение переменных

Самым легким способом настройки является изменение значений переменных в Emacs. Для того, чтобы сделать это используется примерно такой код:

(setq variable-name new-value)

Где variable-name это имя переменной, а new-value это значение, которое вы хотите задать для этой переменной. (В Lisp, вы связываете переменную и значение). Функция setq в lisp аналогична оператору присваивания (обычно =) в других языках программирования.

Замечание: Я рассказываю без многих деталей ради упрощения. Вы также можете указать мне или другим на использования функций Lisp set и даже setq-default. Если вы действительно любознательны, то вы можете посмотреть их описание в руководстве по Emacs Lisp.

Давайте глянем на строку из моего файла .emacs

(setq-default transient-mark-mode t)

Переменная transient-mark-mode контролирует должна ли подсвечиваться область при ее выделении. Во многих приложениях с графическим интерфейсом пользователя, если вы щелкнете кнопкой мыши и сделаете протягивание для выделения текста, то он будет выделен цветом или инверсией. Emacs будет работать так же, если переменная transient-mark-mode будет установлена (в не-nil значение).

Что такое значение?

Ok. Немного отвлечемся. Большинство языков программирования имеют некоторое понятие о значениях true/false (истина/ложь). В C/C++ значение считается истинным, если оно имеет ненулевое значение. В Perl, не-null или ненулевое значение считается истинным. В Lisp, применяются те же идеи, но имена и символы отличаются.

Истина обычно записывается как t, а ложь (или null) записывается как nil. Подобно другим языкам, не-nill значения считаются истиной.

Для получения полного описания того, что делает transient-mark-mode, вы можете использовать оперативную справку. Наберите C-h v или M-x describe-variable, затем transient-mark-mode. Если вы ленивы, как и я, то вы можете воспользоваться дополнением имени переменной с помощью кнопки Tab. Просто наберите часть имени переменной и нажмите клавишу Tab. Если вы набрали недостаточно для уникальной идентификации имени, то вы можете увидеть все возможные варианты дополнений.

Другой часто используемой переменной является fill-column. Она сообщает Emacs насколько широким должен быть экран для переноса слов (и auto-fill-mode использует это значение). Для установки этой переменной в какое-нибудь значение вы можете набрать:

(setq fill-column 20)

Но оно в действительности ничего не делает. Вам необходимо сказать Emacs чтобы он вычислил (evaluate) выражение, которое вы набрали. Чтобы сделать это поместите точку (курсор) в конец выражения и наберите сочетание C-x C-e, что вызовет функцию eval-last-sexp. Когда вы сделаете это заметьте, что число 20 (или что вы набрали) отобразится в мини-буфере внизу экрана. Это просто возвращенное при вычислении значение.

Просто для проверки его работы наберите пару предложений. Если у вас включен auto-fill-mode (он может быть и не включен), то вы заметите, что слова переносятся на отметке 20 колонки. Иначе, после того как вы набрали некоторый текст, нажмите M-q, что вызовет функцию fill-paragraph. Она выполнит перенос слов.

Связывание с файлами

Вы можете настроить Emacs на автоматическое выполнение чего-нибудь при открытии файлов с определенным типом (подобно как многие графические среды автоматически запускают приложения если вы щелкаете на значке определенного файла). Например, я хочу чтобы Emacs автоматически переключался в text-mode при открытии файлов с расширением .txt. Хорошо, это уже происходит. :-) Теперь я хочу заставить Emacs всегда переходить в text-mode при открытии файлов с именем ``README''.

(setq auto-mode-alist (cons '("README" . text-mode) auto-mode-alist))

Без погружения в дебри программирования на Lisp, которое знать не обязательно (но будет не вредно его выучить), просто указываем, что переменная auto-mode-alist содержит список пар. Каждая пара содержит регулярное выражение и название режима Emacs. Если открываемый файл соответствует указанному выражению (в нашем случае это строка README), то Emacs переходит в указанный режим.

Странный синтаксис в приведенном примере используется потому, что мы хотим добавить пару в список режимов. Вы не захотите просто присвоить данные переменной auto-mode-alist с потерей уже содержавшихся в ней данных.

И если я хочу, чтобы Emacs автоматически переключался в html-helper-mode каждый раз, когда я открываю файл, оканчивающийся на .html или .htm, то я должен добавить следующие строки в мой файл .emacs:

(setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\\.htm$" . html-helper-mode) auto-mode-alist))

Существует бесконечное количество возможных значений.

4.2 Использование файла .emacs

После того, как вы провели некоторое время в работе с Emacs и имеете идеи о том, что надо настроить, вы вероятно захотите настроить некоторые вещи навсегда (или по крайней мере до тех пор, пока вы не измените свою точку зрения). Если вы будете использовать Emacs в каждодневной работе, то вы также заметите, что ваш файл .emacs увеличивается со временем. Это Хорошо, потому-что вы определили как заставить Emacs работать так, как вы хотите. Для многих программ является позором, что они позволяют сделать это.

В случае, если вы еще не догадались, Каждый раз при запуске Emacs, он ищет файл с именем .emacs в вашем домашнем каталоге. Ваш файл .emacs---это место, куда вы должны помещать код на Lisp, если хотите, чтобы он автоматически выполнялся при запуске, а также файл включает в себя те настройки, которые вы хотите использовать.

Вот другой пример из моего файла .emacs:

(setq inhibit-startup-message t)

Переменная inhibit-startup-message задает будет ли показывать Emacs приветственное сообщение на старте, или нет. После того как я насмотрелся на него (потому-что я уже знал как найти помощь) я нашел способ отключить его.

Как упражнение попробуйте создать собственный файл .emacs и добавить эту строку в него. Затем выйдите из Emacs и запустите его снова. Вы не должны увидеть стартового сообщения.

Часто когда вы читаете о режиме Emacs (или о пакете), то документация будет вам предлагать добавить некоторый код в ваш файл .emacs для того, чтобы режим или пакет работали как надо.

GNU Emacs FAQ (C-h F) содержит некоторые пункты, относящиеся к файлам .emacs, которые вы можете найти полезными.

4.3 Пакет Customize

После того как Emacs начал приобретать популярность и продолжал развиваться, некоторые люди сказали ``должен быть лучший способ, позволяющий начинающим пользователям настроить Emacs''. И родился пакет customize.

Customize обеспечивает более интуитивный метод настройки частей Emacs. Чтобы попробовать работать с ним, либо выберите подменю Customize в вашем меню Help, или наберите M-x customize.

Customize группирует настройки в логические группы ``Editing'', ``Programming'', ``Files'' и т.п. Некоторые группы содержат подгруппы.

Если вы сделаете изменения, используя интерфейс настройки, то Emacs сохранит изменения в ваш файл .emacs. Это намного легче, потому-что вы можете легко изучать изменения, которые вы он сделал для вас.

Я не использую пакет Customize так, что я не могу сказать о нем больше..

4.4 Дисплей X Windows

Подобно всем нормальным X-приложениям, Emacs работает с вашими X-ресурсами. Это означает, что вы можете контролировать начальные цвета, геометрию и другие специфические для X вещи, также как и в xterm, nxterm или чем-то другом.

Вот соответствующий кусок моего файла ~/.Xdefaults:

emacs*Background: DarkSlateGray
emacs*Foreground: Wheat
emacs*pointerColor: Orchid
emacs*cursorColor: Orchid
emacs*bitmapIcon: on
emacs*font: fixed
emacs.geometry: 80x25

Посмотрите справочную страницу X для более детального описания X-ресурсов.

Chris Gray ( cgray4@po-box.mcgill.ca) также заметил:

В Debian, файл ~/.Xdefaults кажется не используется. Однако работающие в Debian могут поместить то, что вы хотите в /etc/X11/Xresources/emacs и могут получить то, что они делали в RedHat.


Next Previous Contents