Переключение между авто-вставками на лету / по контексту - PullRequest
2 голосов
/ 30 июня 2011

Используя emacs для нескольких проектов от старых до текущих, я должен использовать несколько соглашений, например, для комментариев или заголовков файлов.Например, я использую эту функцию для вставки заголовков файлов для файлов C ++:

(defun mg-c-file-header()
  "Inserts a c/c++ file header"
  (if (boundp 'mg-auto-insert-style)
      (case mg-auto-insert-style
    (project-a
     (insert
      " * @file "(file-name-nondirectory buffer-file-name)"\n"
      " * \n"
      " * (c) 2000 - "( format-time-string "%Y" )" by someone\n"))
    (project-b
     (insert "/** another header*/\n"))
    (otherwise (message "Meh.")))))

Я вызываю эту функцию в этом контексте:

(setq auto-insert-alist
      '(
        (("\\.\\([C]\\|cc\\|cpp\\)\\'" . "C++ Program")
         nil
         ( mg-c-file-header )
         "// --- includes --- \n"
;; and do on....

Я могу установить mg-auto-insert-стиль с Mx set-variable, это нормально.Но я хотел бы автоматически установить переменную в зависимости от пути к файлу для текущего буфера.Поэтому, если я открою буфер или зайду в новый файл в ~ / projects / project-a, mg-auto-insert-style должен быть project-a.

Это будет работать, но не идеально:

(ede-cpp-root-project "project-a"
 :file "~/projects/project-a/trunk/src/Makefile"
 :local-variables (list
   (cons 'mg-auto-insert-style 'project-a )))

Если я создаю новый файл, mg-auto-insert-style не привязывается, когда автоматическая вставка завершена.Позже проблем нет ...

У вас есть идея?

у.е., Маркус

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Я использую пакет автоматической вставки вместе с различными шаблонами для реализации этого.См. my config как пример (+ templates )

0 голосов
/ 04 января 2012

См. Библиотеку header2.el и эту вики-страницу Emacs: Автоматические заголовки файлов .Вы можете настроить заголовки так, как вам нравится.

...