Теория
Иногда хочется, что бы при создании нового файла, в него автоматически записывалось какое-то содержимое. В emacs для этого существует режим „auto-insert-mode“. Если этот режим включён, то, при создании нового файла, предлагается использовать автовставку. Что именно будет записано в создаваемом файле определяет переменная „auto-insert-alist“.
Документация:
auto-insert-alist — список, определяющий текст, вставляемый в созанный файл.
Элементы такого списка имеют вид:
(УСЛОВИЕ . ДЕЙСТВИЕ)
или
((УСЛОВИЕ . ОПИСАНИЕ) . ДЕЙСТВИЕ).
УСЛОВИЕ — это или регулярное выражение, которому должно соответсвовать имя созданного файла, или символ, совпадающий с основным режимом(major mode) созданного файла.
Если созданному файлу соответствует два или больше элементов списка, используется только первый элемент.
Необезательное ОПИСАНИЕ — строка для использования в „auto-insert-prompt“.
ДЕЙСТВИЕ — это или скелет(см. функцию „skeletom-insert“) или путь к файлу(абсолютный, или относительно директории, содержащейся в переменной „auto-insert-directory“) или функция.
ДЕЙСТВИЕ так же может быть массивом, содержащим несколько простых действий, например: «["header.insert" date-and-author-update]».
На этом кончается теория и начинается практика.
Практика
Рассмотрим пример использования автовставки для python-программиста. Этот программист работает с двумя типами файлов:
- Файлы-модули, имеют расширение «.py» и в первой строке содержат указание кодировки файла.
- Файлы-программы, не имеют расширения, зато в первой строке содержат указание интерпретатора, а указание кодировки содержат во второй строке.
Таким образом, можно определить два файла шаблона:
python-module-insert.py:
# -*- coding: utf-8 -*-
python-program-insert.py:
#!/bin/env python
# -*- coding: utf-8 -*-
Если в дальнейшем хочется использовать относительный путь, то эти файлы нужно положить в „auto-insert-directory“. Теперь нужно добавить пару элементов к списку „auto-insert-alist“.
Первый элемент выглядит так: «("\\.py\\'" . "python-module-insert.py")», а второй — так: «(python-mode . "python-program-insert.py")». Несмотря на то, что файл, созданный с расширением «.py», как правило, открывается в «python-mode», используется файл-шаблон для модуля, потому как он идёт первым в списке. С шаблоном для программы будет немножко хитрее: поскольку созданный файл не содержит расширения, а так же текста, позволяющего определить его режим, то «python-mode» придётся включать явно(M-x python-mode), а потом вызывать автовставку(M-x auto-insert).
Настройка
Я придерживаюсь той точки зрения, что всё, что может быть настроено через customize — должно быть настроено через customize. Зря его, что ли, писали? Поэтому, для настройки автовставки, нужно вызвать customize(M-x customize) и перейти в группу Files->Auto Insert. Там включить «Auto Insert Mode», сменить «Auto Insert Directory»(до тех пор, пока файлы-шаблоны используются исключительно emacs'ом, директорию с ними лучше держать в ~/.emacs.d) и отредактировать «Auto Insert Alist». Однако, редактирование «Auto Insert Alist» приводит к добавлению не слишком красивого куска кода в конфигурационный файл. Поэтому, можно просто добавить туда две строчки:
(add-to-list 'auto-insert-alist '(python-mode . "python-program-insert.py"))
(add-to-list 'auto-insert-alist '("\\.py\\'" . "python-module-insert.py"))
Эффект будет тот же, а смотрится несколько приятнее. Нужно только помнить две вещи: функция „add-to-list“ добавляет элементы в начало списка, поэтому, что бы шаблон для модуля оказался первым в списке, его следует добавлять после шаблона для программы. И второе: обе строчки должны идти после установки „auto-insert-mode“ и „auto-insert-directory“. То есть после блока „custom-set-variables“, если использовался „customize“.
Комментариев нет:
Отправить комментарий