From 557d9c8d7a843bf06e75b4e1a742654ccf951fa3 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Fri, 13 Jan 2017 18:47:15 +0100 Subject: etc: Support indentation of whole files. * etc/indent-package.el.in: Rename to... * etc/indent-code.el.in: ... this. Add case for a single argument. * doc/contributing.texi (Formatting Code): Adjust accordingly. * configure.ac: Likewise. --- etc/indent-code.el.in | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100755 etc/indent-code.el.in (limited to 'etc/indent-code.el.in') diff --git a/etc/indent-code.el.in b/etc/indent-code.el.in new file mode 100755 index 0000000000..7556b30cc8 --- /dev/null +++ b/etc/indent-code.el.in @@ -0,0 +1,62 @@ +#!@EMACS@ --script +;;; indent-code.el --- Run Emacs to indent a package definition. + +;; Copyright © 2017 Alex Kost +;; Copyright © 2017 Ludovic Courtès + +;; This file is part of GNU Guix. + +;; GNU Guix 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. + +;; GNU Guix 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 scripts indents the given file or package definition in the specified +;; file using Emacs. + +;;; Code: + +;; Load Scheme indentation rules from the current directory. +(with-temp-buffer + (scheme-mode) + (let ((default-directory (file-name-as-directory ".")) + (enable-local-variables :all)) + (hack-dir-local-variables) + (hack-local-variables-apply))) + +(pcase command-line-args-left + (`(,file-name ,package-name) + ;; Indent the definition of PACKAGE-NAME in FILE-NAME. + (find-file file-name) + (goto-char (point-min)) + (if (re-search-forward (concat "^(define\\(-public\\) +" + package-name) + nil t) + (let ((indent-tabs-mode nil)) + (beginning-of-defun) + (indent-sexp) + (save-buffer) + (message "Done!")) + (error "Package '%s' not found in '%s'" + package-name file-name))) + (`(,file-name) + ;; Indent all of FILE-NAME. + (find-file file-name) + (let ((indent-tabs-mode nil)) + (indent-region (point-min) (point-max)) + (save-buffer) + (message "Done!"))) + (x + (error "Usage: indent-code.el FILE [PACKAGE]"))) + +;;; indent-code.el ends here -- cgit v1.2.3