У меня есть запись, которая в основном идентична найденной здесь:
(defun perl-boilerplate ()
(if (not (file-exists-p (buffer-file-name (current-buffer))))
(cond
((string-match "\.pl$" buffer-file-name)
(insert
"#!/usr/local/bin/perl\nuse warnings;\nuse strict;\n"))
((string-match "\\([^/]*\\)\.pm$" buffer-file-name)
(insert
(concat "package " (match-string 1 buffer-file-name)
";\n\nuse warnings;\nuse strict;\n\n1;\n"))
(backward-char 4)))))
(add-hook 'cperl-mode-hook 'perl-boilerplate)
... все это работало нормально, когда я использовал 22.3 на OS X. Я только что обновил до 24.1, и теперь, когда я создаю новый файл .pl, шаблон вставляется дважды. Мой файл .emacs не изменился, поэтому мне интересно, что вызывает это: хук применяется дважды? (Не думал, что это может произойти.)
Кто-нибудь сталкивался с таким же явлением, или может подсказать, как это исправить?
Также
Вот что происходит, когда я запускаю модуль. Обратите внимание, как второй экземпляр добавляется до того, как заканчивается первый, т. Е. До того, как он добавляет закрывающий '1;' линия.
package Foo;
use warnings;
use strict;
# $Id$
package Foo;
use warnings;
use strict;
# $Id$
1;
1;
Обновить
Кажется, это разница в файле cperl-mode.el, который поставляется с 22.3 и 24.1, хотя я точно не знаю, где. (Разница составляет 1124 строки.) Но выгрузка старых и новых файлов (и удаление скомпилированного файла .elc) вернули поведение к тому, что я хотел.