google download header.el 下载 header.el . 按照 Emacs 安装一个扩展包的方法 安装.
(require 'header)
这是一个很灵活的扩展,几乎可以生成任何文件头信息. header.el 太灵活了,以至于我无法描述他的所有功能.总之他可以输出任意格式 的信息.
当我们保存文件的时候,有很多信息可以自动更新.如何自动更新信息, 更新那些信息,也是可以完全自己配置. 包括文件名称,最后一次修改 时间,文件保存次数,最后一次修改的作者等等.
(setq make-header-hooks '(header-mode-line
header-blank
header-file-name
header-blank
header-copyright
header-blank
header-rcs
header-author
header-creation-date
header-modification-author
header-modification-date
header-update-count
header-blank
header-history
header-blank
))
然后就可以用 M-x make-header 自动生成文件头信息. 生成的结果 如下:
// -*- C++ -*- // // a.cc - // // Copyright (C) 1994 Karsten Thygesen (karthy@kom.auc.dk). // // // // $Locker: $ // $Log: EmacsSourceCodeHeader.muse,v $ // Revision 1.1 2006-04-26 08:55:10 chunywan // Initial revision // // Revision 1.1.1.1 2004/10/20 07:24:06 chunyewang // this is my home page. //Revision 1.1 2001/02/01 20:15:57 lassenye filer // Author : ChunYe Wang // Created On : Thu Jul 15 16:51:14 2004 // Last Modified By: ChunYe Wang // Last Modified On: Wed Apr 26 12:15:21 2006 // Update Count : 36 // // HISTORY //
如果想修改版权信息可以.
(setq header-copyright-notice " Copyright (C) 2999 your Company or Name " )
我自己配置了一个比较复杂的东西,但是可能对别人没有 太多用处, 因为很多信息都是公司特有的东西.我还是把 他贴出来,希望对读者有些启发.
(require 'header) (defvar wcy-header-project-name "XXXXXX") (defun wcy-c-mode-config-header () (interactive) (setq header-copyright-notice " (c) 2002 XXXX.LtD XXX(CHINA) INVESTMENT CO.,LTD. addr: XXX House 1, No.1211 He Ping Li Dong Jie, Beijing, 100013 PRC tel : int +86-10-xxxx Ext. xxxx fax : int +86-10-xxxx The program may be used and/or copied only with the written permission of Nokia or in accordance with the terms and conditions stipulated in the agreement/contract under which the program heve been supplied. ") (make-local-variable 'user-full-name) (make-local-variable 'user-mail-address) (setq user-full-name "ChunYe Wang") (setq user-mail-address "") (setq make-header-hooks '(header-mode-line header-blank ;;header-rcs ;;header-AFS wcy-header-file-name wcy-header-project-name wcy-header-file-description header-creation-date ;;header-rcs header-author wcy-header-author-email ;;header-modification-author ;;header-modification-date ;;header-update-count header-blank header-copyright header-blank ;;header-status ;; Re-enable the following lines if you wish header-blank ;;header-history ;;header-purpose ;;header-toc header-blank wcy-header-end-comment )) (setq file-header-update-alist nil) (progn (register-file-header-action "[ \t]Update Count[ \t]*: " 'update-write-count) (register-file-header-action "[ \t]Last Modified By[ \t]*: " 'update-last-modifier) (register-file-header-action "[ \t]Last Modified On[ \t]*: " 'update-last-modified-date) (register-file-header-action " File : *\\(.*\\) *$" 'wcy-update-file-name) )) (defun wcy-header-file-name () "Places the buffer's file name and leaves room for a description." (insert header-prefix-string "File : " (buffer-name) "\n") (setq return-to (1- (point)))) (defun wcy-header-project-name () (insert header-prefix-string "Program/Library : " wcy-header-project-name "\n")) (defun wcy-header-file-description() (insert header-prefix-string "Description : \n")) (defun wcy-header-author-email () (insert header-prefix-string "Mail : " user-mail-address "\n")) (defun wcy-header-end-comment () (if comment-end (insert comment-end "\n"))) (defun wcy-update-file-name () (beginning-of-line) ;; verify that we are looking at a file name for this mode (if (looking-at (concat (regexp-quote (header-prefix-string)) "File : *\\(.*\\) *$")) (progn (goto-char (match-beginning 1)) (delete-region (match-beginning 1) (match-end 1)) (insert (file-name-nondirectory (buffer-file-name)) ) )))