From eb7fa99cc8afbc47306f112eed8f9a68d4cd06ef Mon Sep 17 00:00:00 2001 From: benj Date: Sat, 17 Mar 2018 20:03:19 -0700 Subject: 1. refactored snippets into templates 2. added slime for common lisp 3. created some auto-templates for c --- templates/auto-insert/.yas-setup.el | 73 +++++++++++++++++++++++++++++ templates/auto-insert/template.c | 7 +++ templates/auto-insert/template.h | 16 +++++++ templates/snippets/c-mode/doxycomments | 1 + templates/snippets/c-mode/headerDEF | 8 ++++ templates/snippets/clojure-mode/defn | 8 ++++ templates/snippets/clojure-mode/let | 5 ++ templates/snippets/doxygen/doxycomments | 48 +++++++++++++++++++ templates/snippets/python-mode/import_from | 5 ++ templates/snippets/python-mode/lambda | 5 ++ templates/snippets/python-mode/print | 5 ++ templates/snippets/python-mode/print format | 5 ++ templates/snippets/python-mode/script | 10 ++++ 13 files changed, 196 insertions(+) create mode 100644 templates/auto-insert/.yas-setup.el create mode 100644 templates/auto-insert/template.c create mode 100644 templates/auto-insert/template.h create mode 120000 templates/snippets/c-mode/doxycomments create mode 100644 templates/snippets/c-mode/headerDEF create mode 100644 templates/snippets/clojure-mode/defn create mode 100644 templates/snippets/clojure-mode/let create mode 100644 templates/snippets/doxygen/doxycomments create mode 100644 templates/snippets/python-mode/import_from create mode 100644 templates/snippets/python-mode/lambda create mode 100644 templates/snippets/python-mode/print create mode 100644 templates/snippets/python-mode/print format create mode 100644 templates/snippets/python-mode/script (limited to 'templates') 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 +;; 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 . + +;;; 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 -- cgit v1.2.3