Вся настройка Emacs выполняется через код на Lisp. Вы можете изменять переменные, которые влияют на то, каким образом работает Emacs или вы можете добавить новую функцию к Emacs (или переопределить существующие функции--заменяя их на свои собственные.
Во время экспериментов с настройкой 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))
Существует бесконечное количество возможных значений.
.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
, которые вы можете найти
полезными.
После того как Emacs начал приобретать популярность и продолжал
развиваться, некоторые люди сказали ``должен быть лучший способ,
позволяющий начинающим пользователям настроить Emacs''. И родился
пакет customize
.
Customize обеспечивает более интуитивный метод настройки частей
Emacs. Чтобы попробовать работать с ним, либо выберите подменю
Customize
в вашем меню Help
, или наберите M-x
customize
.
Customize группирует настройки в логические группы ``Editing'', ``Programming'', ``Files'' и т.п. Некоторые группы содержат подгруппы.
Если вы сделаете изменения, используя интерфейс настройки, то
Emacs сохранит изменения в ваш файл .emacs
. Это намного
легче, потому-что вы можете легко изучать изменения, которые вы он
сделал для вас.
Я не использую пакет Customize так, что я не могу сказать о нем больше..
Подобно всем нормальным 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.