diff options
author | Alex Kost <alezost@gmail.com> | 2015-10-12 12:06:32 +0300 |
---|---|---|
committer | Alex Kost <alezost@gmail.com> | 2015-10-14 19:20:28 +0300 |
commit | 17fa842b79503dfa9972f3bfa3d5a96610263378 (patch) | |
tree | b26c962a6386758617e01833f22f1d1cb298e118 | |
parent | 9f7ae77fe287d7856718c5dfd60891be9b561b1d (diff) | |
download | guix-17fa842b79503dfa9972f3bfa3d5a96610263378.tar guix-17fa842b79503dfa9972f3bfa3d5a96610263378.tar.gz |
emacs: devel: Add indentation rules.
Suggested by Ludovic Courtès <ludo@gnu.org>.
* emacs/guix-devel.el: Add indentation rules for Guix macros/procedures.
(guix-devel-scheme-indent): New macro.
(guix-devel-indent-package): New function.
-rw-r--r-- | emacs/guix-devel.el | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/emacs/guix-devel.el b/emacs/guix-devel.el index b8330289c5..c8bfbb0a8a 100644 --- a/emacs/guix-devel.el +++ b/emacs/guix-devel.el @@ -24,6 +24,7 @@ ;;; Code: +(require 'lisp-mode) (require 'guix-guile) (require 'guix-geiser) (require 'guix-utils) @@ -189,6 +190,69 @@ to find 'modify-phases' keywords." "A list of `font-lock-keywords' for `guix-devel-mode'.") +;;; Indentation + +(defmacro guix-devel-scheme-indent (&rest rules) + "Set `scheme-indent-function' according to RULES. +Each rule should have a form (SYMBOL VALUE). See `put' for details." + (declare (indent 0)) + `(progn + ,@(mapcar (lambda (rule) + `(put ',(car rule) 'scheme-indent-function ,(cadr rule))) + rules))) + +(defun guix-devel-indent-package (state indent-point normal-indent) + "Indentation rule for 'package' form." + (let* ((package-eol (line-end-position)) + (count (if (and (ignore-errors (down-list) t) + (< (point) package-eol) + (looking-at "inherit\\>")) + 1 + 0))) + (lisp-indent-specform count state indent-point normal-indent))) + +(guix-devel-scheme-indent + (bag 0) + (build-system 0) + (call-with-compressed-output-port 2) + (call-with-container 1) + (call-with-decompressed-port 2) + (call-with-error-handling 0) + (container-excursion 1) + (emacs-batch-edit-file 1) + (emacs-batch-eval 0) + (emacs-substitute-sexps 1) + (emacs-substitute-variables 1) + (file-system 0) + (graft 0) + (manifest-entry 0) + (manifest-pattern 0) + (mbegin 1) + (mlet 2) + (mlet* 2) + (modify-phases 1) + (munless 1) + (mwhen 1) + (operating-system 0) + (origin 0) + (package 'guix-devel-indent-package) + (run-with-state 1) + (run-with-store 1) + (signature-case 1) + (substitute* 1) + (substitute-keyword-arguments 1) + (test-assertm 1) + (with-atomic-file-output 1) + (with-derivation-narinfo 1) + (with-derivation-substitute 2) + (with-directory-excursion 1) + (with-error-handling 0) + (with-monad 1) + (with-mutex 1) + (with-store 1) + (wrap-program 1)) + + (defvar guix-devel-keys-map (let ((map (make-sparse-keymap))) (define-key map (kbd "b") 'guix-devel-build-package-definition) |