Revision: 17063
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 21, 2009 15:50 by bigfaceworm
Initial Code
(defvar insert-code-template-templates
'(((c-mode c++-mode) ".h$" "/* copyright 2001 */\n#ifndef __SOMETHING_H\n#define __SOMETHING_H\n\n#endif /* # __SOMETHING_H */\n")
((c-mode c++-mode) nil "int\nmain(int argc, char **argv)\n{\n\n}\n")
((cperl-mode perl-mode) nil "#!/usr/bin/perl -w\n\nuse strict;\n"))
"A list of triples, used for inserting code.
A triplet is composed of a symbol for the major mode (or a list of symbols),
a regular expression to match against the buffer's file name,
and the text to insert when both the major mode and regular expression match.")
(defun insert-code-template ()
"insert a code template, based on major mode
when called interactively, always do insertion
otherwise, only do so when the buffer is empty"
(interactive)
(let ((l insert-code-template-templates))
(when (or (called-interactively-p)
(eq (point-min) (point-max)))
(while l
(let* ((elt (car l))
(modes (if (listp (car elt)) (car elt) (list (car elt))))
(re (cadr elt))
(template (caddr elt)))
(when (and (member major-mode modes)
(or (null re)
(string-match re (buffer-file-name))))
(insert template)
(setq l nil)))
(setq l (cdr l))))))
(add-hook 'find-file-hook 'insert-code-template)
Initial URL
http://stackoverflow.com/questions/41522/tips-for-learning-elisp/59589#59589
Initial Description
An example solution for the 'insert-code-template exercise listed here: http://stackoverflow.com/questions/41522/tips-for-learning-elisp/59589#59589
Initial Title
insert-code-template
Initial Tags
template
Initial Language
Emacs Lisp