在动态/上下文之间切换自动插入

时间:2011-06-30 09:20:50

标签: emacs lisp elisp

将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....

我可以用M-x set-variable设置mg-auto-insert-style,没关系。但我想根据当前缓冲区的文件路径自动设置变量。因此,如果我打开一个缓冲区或访问〜/ 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。后来,没有问题......

你有什么想法吗?

cu,Markus

2 个答案:

答案 0 :(得分:1)

我使用自动插入包以及不同的模板来实现这一点。请参阅my config示例(+ templates

答案 1 :(得分:0)

请参阅库header2.el和此Emacs Wiki页面:Automatic File Headers。您可以根据需要配置标头。