Next Previous Contents

## 6. "Грязные" приемы

## 6.1 Вставка заголовка автоматически

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

Библиотека autoinsert использует это свойство: когда вы открываете новый файл в Emacs, эта библиотека вставляет, соответственно типу файла некоторый стандартный заголовок.

В нашем случае этот стандартный заголовок, может содержать объявления типа документа (LinuxDoc), заголовок самого документа, имя автора, и дату.

Я здесь опишу два способа для вставки таких заголовков. Вы можете вставить файл шаблона, который содержит вставляемую информацию, или вы можете запустить процедуру на elisp.

### Вставка файла

Вы должны сначала заставить Emacs запустить `auto-insert` при открытии файла, затем считать библиотеку autoinsert, которая объявляет список `auto-insert-alist`, который необходимо изменить. Этот список определяет вставляемые заголовки для каждого типа файлов. По умолчанию, вставляемый файл должен находиться в директории `~/insert/`, но можно переопределить переменную `auto-insert-directory`, если вы хотите поместить заголовки в другое место.

Добавьте следующие строки в ваш фал `.emacs` для вставки файла `~/emacs/sgml-insert.sgml` при каждом открытии нового файла SGML:

          (add-hook 'find-file-hooks 'auto-insert)

          (load-library "autoinsert")

          (setq auto-insert-directory "~/emacs/")

          (setq auto-insert-alist

                (append '((sgml-mode .  "sgml-insert.sgml"))

                        auto-insert-alist))

Затем вы можете написать файл `~/emacs/sgml-insert.sgml` тот заголовок, который вам необходим, затем перезапустить Emacs и открыть какой-нибудь новый файл (например `foobar.sgml`). Emacs должен спросить у вас подтверждение автоматической вставки заголовка, и если вы ответите утвердительно, то он вставит заголовок.

### Запуск программы

Этот метод работает почти как предыдущий, но вместо установки указателя `auto-insert-alist` на вставляемый файл, вам необходимо указать какую процедуру надо выполнить. Теперь как это работает, допуская, что вы хотите записать эту функцию в файл, названный `~/emacs/sgml-header.el`. (нет необходимости перегружать ваш файл `.emacs` такими функциями, поскольку они могут долго не использоваться):

          (add-hook 'find-file-hooks 'auto-insert)

          (load-library "autoinsert")

          (add-to-list 'load-path "~/emacs")

          (load-library "sgml-header")

          (setq auto-insert-alist

                (append '(((sgml-mode .  "SGML Mode") . insert-sgml-header))

                        auto-insert-alist))

Вы найдете в разделе appendix пример функции `insert-sgml-header`.

Next Previous Contents