;;; create-license.el --- Conveniently create license files -*- lexical-binding: t; -*- ;; Copyright (C) 2024 Tristan Riehs ;; Author: Tristan Riehs ;; Keywords: convenience ;; 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: ;; This packages aims at providing a convenient way of creating license ;; files. The core command is `create-license', which you can invoke ;; interactively using M-x. ;; The licenses are stored in the directory `create-license-directory'. ;;; Code: (defgroup create-license nil "Conveniently create license files." :group 'emacs :prefix "create-license-") (defcustom create-license-file-name "COPYING" "The name of the license file." :group 'create-license :type 'string :safe 'stringp) (defcustom create-license-directory (file-name-as-directory (expand-file-name "licenses" user-emacs-directory)) "Directory where licenses are stored. `create-license' ignores files in this directory whose name start by a dot." :group 'create-license :type 'string) ;;;###autoload (defun create-license (dir name) "Copy the license NAME in DIR. The destination file name under DIR is given by `create-license-file-name'." (interactive (list default-directory (let ((files (directory-files create-license-directory nil "^[^\\.].*"))) (if files (completing-read "License: " files nil 'require-match) nil)))) (if name (copy-file (expand-file-name name create-license-directory) (expand-file-name create-license-file-name dir)) (message "No license found in \"%s\", you may want to run \ `create-license-download-common'" create-license-directory))) (defcustom create-license-common '(("GPL3" . "https://www.gnu.org/licenses/gpl-3.0.txt") ("GPL2" . "https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt") ("Apache2" . "https://www.apache.org/licenses/LICENSE-2.0.txt") ("MPL2" . "https://www.mozilla.org/media/MPL/2.0/index.f75d2927d3c1.txt") ("CC-BY" . "https://creativecommons.org/licenses/by/4.0/legalcode.txt") ("CC-BY-SA" . "https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt") ("FDL" . "https://www.gnu.org/licenses/fdl-1.3.txt")) "Common known licenses. Each member of this list is of the form (NAME . URL)." :group 'create-license :type '(list (cons string string))) ;;;###autoload (defun create-license-download-common () "Download licenses listed in `create-license-common'." (interactive) (require 'url-handlers) (dolist (license create-license-common) (url-copy-file (cdr license) (expand-file-name (car license) create-license-directory)))) (provide 'create-license) ;;; create-license.el ends here