summaryrefslogtreecommitdiff
path: root/templates
diff options
context:
space:
mode:
authorbenj <benj@rse8.com>2018-03-17 20:03:19 -0700
committerbenj <benj@rse8.com>2018-03-17 20:03:19 -0700
commiteb7fa99cc8afbc47306f112eed8f9a68d4cd06ef (patch)
treed52841596ed5bef10366fbb7b8c7bc8417ab5ebe /templates
parentc38ef385a9af288cf2d2ff0f306b6b2176fcf47d (diff)
downloademacs-eb7fa99cc8afbc47306f112eed8f9a68d4cd06ef.tar
emacs-eb7fa99cc8afbc47306f112eed8f9a68d4cd06ef.tar.gz
emacs-eb7fa99cc8afbc47306f112eed8f9a68d4cd06ef.tar.bz2
emacs-eb7fa99cc8afbc47306f112eed8f9a68d4cd06ef.tar.lz
emacs-eb7fa99cc8afbc47306f112eed8f9a68d4cd06ef.tar.xz
emacs-eb7fa99cc8afbc47306f112eed8f9a68d4cd06ef.tar.zst
emacs-eb7fa99cc8afbc47306f112eed8f9a68d4cd06ef.zip
1. refactored snippets into templates
2. added slime for common lisp 3. created some auto-templates for c
Diffstat (limited to 'templates')
-rw-r--r--templates/auto-insert/.yas-setup.el73
-rw-r--r--templates/auto-insert/template.c7
-rw-r--r--templates/auto-insert/template.h16
l---------templates/snippets/c-mode/doxycomments1
-rw-r--r--templates/snippets/c-mode/headerDEF8
-rw-r--r--templates/snippets/clojure-mode/defn8
-rw-r--r--templates/snippets/clojure-mode/let5
-rw-r--r--templates/snippets/doxygen/doxycomments48
-rw-r--r--templates/snippets/python-mode/import_from5
-rw-r--r--templates/snippets/python-mode/lambda5
-rw-r--r--templates/snippets/python-mode/print5
-rw-r--r--templates/snippets/python-mode/print format5
-rw-r--r--templates/snippets/python-mode/script10
13 files changed, 196 insertions, 0 deletions
diff --git a/templates/auto-insert/.yas-setup.el b/templates/auto-insert/.yas-setup.el
new file mode 100644
index 0000000..ed5d6b9
--- /dev/null
+++ b/templates/auto-insert/.yas-setup.el
@@ -0,0 +1,73 @@
+;;; .yas-setup.el --- Utility functions for c-mode -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2018 Benj Bellon
+
+;; Author: Benj Bellon <benj@benj-ad1>
+;; Keywords: c
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; As description
+
+;;; Code:
+(require 'dash)
+
+(defun fetch-project-path (root-dir)
+ "Retrieve path from project's root-dir to file as list.
+NOTE: The closest parent root-dir is considered the root.
+ROOT-DIR: the root directory with no path delimiters."
+ (let* ((full-path (locate-dominating-file buffer-file-name root-dir)))
+ (if full-path
+ (let* ((proj-root-dir (nth 1 (reverse (split-string full-path "/"))))
+ (full-path-list (cons proj-root-dir
+ (-flatten (cdr (-split-on proj-root-dir (split-string buffer-file-name "/")))))))
+
+ ;; turn dashes into underscores
+ (mapcar (lambda (x) (replace-regexp-in-string "-" "_" x))
+ full-path-list))
+ nil)
+ ))
+
+(defun build-include-guard-header (root-dir)
+ "Create a full include guard header for c files.
+If the path cannot be found, just use the filename.
+ROOT-DIR: the root directory with no path delimiters.
+FORMAT: PROJDIR_FULL_PATH_TO_FILE_H"
+ (if (fetch-project-path root-dir)
+ (let* ((path-no-file (reverse (cdr (reverse (fetch-project-path root-dir)))))
+ (file-no-ext (car (split-string (car (reverse (fetch-project-path root-dir))) "\\." t))))
+ (concat
+ (mapconcat 'identity
+ (mapcar 'upcase
+ (reverse (cons file-no-ext (reverse path-no-file)))) "_")
+ "_H")
+ )
+ ;; no lazy evaluation, so just do it here
+ (concat
+ (upcase
+ (car (-filter (lambda (x) (not (s-blank? x)))
+ (split-string
+ (car (reverse (split-string buffer-file-name "/")))
+ "\\."))))
+ "_H")
+ ))
+
+(defun git-include-guard-path ()
+ "Build include guard headers for git projects."
+ (build-include-guard-header ".git"))
+
+(provide '.yas-setup)
+;;; .yas-setup.el ends here
diff --git a/templates/auto-insert/template.c b/templates/auto-insert/template.c
new file mode 100644
index 0000000..d9afc65
--- /dev/null
+++ b/templates/auto-insert/template.c
@@ -0,0 +1,7 @@
+/*
+ * @file `(buffer-name)`
+ * @brief $0
+ *
+ * @author `user-full-name`
+ * @date `(format-time-string "%Y-%m-%d")`
+ */
diff --git a/templates/auto-insert/template.h b/templates/auto-insert/template.h
new file mode 100644
index 0000000..0f9cb8e
--- /dev/null
+++ b/templates/auto-insert/template.h
@@ -0,0 +1,16 @@
+/**
+ * @file `(buffer-name)`
+ * @brief $1
+ *
+ * $2
+ *
+ * @author MAGIT_USER or SYSTEM_USER
+ * @date `(format-time-string "%Y-%m-%d")`
+ */
+
+#ifndef `(git-include-guard-path)`
+#define `(git-include-guard-path)`
+
+$0
+
+#endif
diff --git a/templates/snippets/c-mode/doxycomments b/templates/snippets/c-mode/doxycomments
new file mode 120000
index 0000000..62fd598
--- /dev/null
+++ b/templates/snippets/c-mode/doxycomments
@@ -0,0 +1 @@
+../doxygen/doxycomments \ No newline at end of file
diff --git a/templates/snippets/c-mode/headerDEF b/templates/snippets/c-mode/headerDEF
new file mode 100644
index 0000000..a07587b
--- /dev/null
+++ b/templates/snippets/c-mode/headerDEF
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: headerDEF
+# key: #if
+# --
+#ifndef
+#define
+
+#endif \ No newline at end of file
diff --git a/templates/snippets/clojure-mode/defn b/templates/snippets/clojure-mode/defn
new file mode 100644
index 0000000..0907e4a
--- /dev/null
+++ b/templates/snippets/clojure-mode/defn
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: defn
+# key: defn
+# --
+defn ${1:name}
+ "${2:docstring}"
+ [${3:arg-list}]
+ $0 \ No newline at end of file
diff --git a/templates/snippets/clojure-mode/let b/templates/snippets/clojure-mode/let
new file mode 100644
index 0000000..426caa2
--- /dev/null
+++ b/templates/snippets/clojure-mode/let
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: let
+# key: let
+# --
+let [$0]
diff --git a/templates/snippets/doxygen/doxycomments b/templates/snippets/doxygen/doxycomments
new file mode 100644
index 0000000..94209bc
--- /dev/null
+++ b/templates/snippets/doxygen/doxycomments
@@ -0,0 +1,48 @@
+# -*- mode: snippet -*-
+# name: doxcomments
+# key: dox
+# type: command
+# --
+;; Command to generate doxygen comments for c functions
+
+(defun flatten (ls)
+ "Implements standard flatten function"
+ (cond
+ ((atom ls) (list ls))
+ ((null (cdr ls)) (flatten (car ls)))
+ (t (append (flatten (car ls)) (flatten (cdr ls))))))
+
+(defun find-retval ()
+ "Returns the return value of the next parsed function"
+ (interactive)
+ (let ((struct-type "struct"))
+ (search-forward "(" nil t)
+ (move-beginning-of-line nil)
+ (let ((return-type (thing-at-point 'symbol)))
+ (if (string= return-type struct-type)
+ "NOT_IMPLEMENTED"
+ return-type))))
+
+(defun find-args ()
+ "Returns a list of function args for the next parsed function"
+ (interactive)
+ (let* ((struct-type "struct")
+ (start (search-forward "(" nil t))
+ (end (search-forward ")" nil t))
+ (args-string (buffer-substring-no-properties start (1- end)))
+ (args (mapcar 'string-trim-left (split-string args-string "," t))))
+ (mapcar (lambda (x) (car (reverse x))) (mapcar 'split-string args))))
+
+(let* ((retval (find-retval))
+ (args (find-args))
+ (args-len (length args))
+ (brief "@brief $1\n *")
+ (params (mapcar (lambda (x) (format "@param: %s ${%d:}" (cdr x) (car x)))
+ (mapcar* 'cons
+ (mapcar '1+ (number-sequence 1 args-len))
+ args)))
+ (retval (format "@return %s $0" retval))
+ (snippet-text (mapconcat 'identity (flatten (list "/**" brief params (concat "\n * " retval)))
+ "\n * ")))
+ (move-beginning-of-line nil)
+ (yas-expand-snippet (concat snippet-text "\n*/\n")))
diff --git a/templates/snippets/python-mode/import_from b/templates/snippets/python-mode/import_from
new file mode 100644
index 0000000..767f344
--- /dev/null
+++ b/templates/snippets/python-mode/import_from
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: import_from
+# key: from
+# --
+from $1 import $0
diff --git a/templates/snippets/python-mode/lambda b/templates/snippets/python-mode/lambda
new file mode 100644
index 0000000..08b268b
--- /dev/null
+++ b/templates/snippets/python-mode/lambda
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: lambda
+# key: lam
+# --
+lambda ${1:x}: $0 \ No newline at end of file
diff --git a/templates/snippets/python-mode/print b/templates/snippets/python-mode/print
new file mode 100644
index 0000000..2392fbd
--- /dev/null
+++ b/templates/snippets/python-mode/print
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: print
+# key: print
+# --
+print("$0") \ No newline at end of file
diff --git a/templates/snippets/python-mode/print format b/templates/snippets/python-mode/print format
new file mode 100644
index 0000000..704cb53
--- /dev/null
+++ b/templates/snippets/python-mode/print format
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: print format
+# key: printf
+# --
+print("$1".format($0)) \ No newline at end of file
diff --git a/templates/snippets/python-mode/script b/templates/snippets/python-mode/script
new file mode 100644
index 0000000..3113da9
--- /dev/null
+++ b/templates/snippets/python-mode/script
@@ -0,0 +1,10 @@
+# -*- mode: snippet -*-
+# name: script
+# key: script
+# --
+#!/usr/bin/env python
+def main():
+ ${1:pass}
+
+if __name__ == '__main__':
+ main() \ No newline at end of file