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