Tweak the general skeleton to allow a completely variable first line
(defaulting to `new-comment' as before). Introduce a new `skelrc.script'
which fills in a shebang line instead, and sets the major mode from it
using `interpreter-mode-alist' in the proper way.
skel_DATA += skelrc.el
## Scripting languages
-skel_DATA += skelrc.shelly
+skel_DATA += skelrc.shelly skelrc.script
skel_DATA += skelrc.sh
skel_DATA += skelrc.py skelrc.pyx
skel_DATA += skelrc.pl skelrc.pm
-[[new-comment]] -*-[[emacs-mode]]-*-
+[[first-line]]
[[cont-comment]]
[[cont-comment]] [[purpose]]
[[cont-comment]]
(setq skel-alist
(append
- `((emacs-mode . (skelrc-decode-major-mode))
+ `((first-line . "[[new-comment]] -*-[[emacs-mode]]-*-")
+ (emacs-mode . (skelrc-decode-major-mode))
(year . (substring (current-time-string) 20 24))
(header . "[[licence]][[preamble]]")
(basename . (skel-basename))
--- /dev/null
+;;; -*-emacs-lisp-*-
+
+(skel-include "skelrc.shelly")
+(setq skel-alist
+ (append
+ '((first-line . "#! [[shebang-line]]"))
+ skel-alist))
+
+(let ((alist interpreter-mode-alist)
+ (interp (skel-lookup "shebang-line")))
+ (catch 'found
+ (save-match-data
+ (while alist
+ (if (string-match (caar alist) interp)
+ (progn
+ (skelrc-force-mode (cdar alist))
+ (throw 'found nil)))
+ (setq alist (cdr alist))))))