skeleton, skelrc, skelrc.script: Variable shebang lines.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 18 Dec 2011 16:18:45 +0000 (16:18 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 19 Dec 2011 10:18:11 +0000 (10:18 +0000)
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.

Makefile.am
skeleton
skelrc
skelrc.script [new file with mode: 0644]

index 25fb87e..d92d38d 100644 (file)
@@ -73,7 +73,7 @@ skel_DATA             += skelrc.scm
 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
index 7ccd4df..2d28c1b 100644 (file)
--- a/skeleton
+++ b/skeleton
@@ -1,4 +1,4 @@
-[[new-comment]] -*-[[emacs-mode]]-*-
+[[first-line]]
 [[cont-comment]]
 [[cont-comment]] [[purpose]]
 [[cont-comment]]
diff --git a/skelrc b/skelrc
index f082eb3..86096cf 100644 (file)
--- a/skelrc
+++ b/skelrc
@@ -167,7 +167,8 @@ option) any later version."))
 
 (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))
diff --git a/skelrc.script b/skelrc.script
new file mode 100644 (file)
index 0000000..e6c6b03
--- /dev/null
@@ -0,0 +1,18 @@
+;;; -*-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))))))