guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 7/7] emacs: Add 'guix-devel-use-current-module'.


From: Alex Kost
Subject: [PATCH 7/7] emacs: Add 'guix-devel-use-current-module'.
Date: Sat, 25 Jul 2015 11:49:57 +0300

Suggested by Ludovic Courtès <address@hidden>.

* emacs/guix-guile.el (guix-guile-definition-regexp): New variable.
  (guix-guile-current-definition): New function.
* emacs/guix-devel.el (guix-devel-build-current-package-definition): New
  command.
* doc/emacs.texi (Emacs Development): Document it.
---
 doc/emacs.texi      |  6 ++++++
 emacs/guix-devel.el |  9 +++++++++
 emacs/guix-guile.el | 17 +++++++++++++++++
 3 files changed, 32 insertions(+)

diff --git a/doc/emacs.texi b/doc/emacs.texi
index 6920bef..5f1584c 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -571,6 +571,12 @@ want to use a module it defines, so you switch to the 
Geiser REPL and
 write @code{,use (some module)} there.  You may just use this command
 instead.
 
address@hidden M-x guix-devel-build-current-package-definition
+Build package defined by the current variable definition.  If you
+modified the current package definition, don't forget to reevaluate it
+before calling this command (for example, with @kbd{C-M-x} (@pxref{To
+eval or not to eval,,, geiser, Geiser User Manual})).
+
 @end table
 
 And as always if you use a command often, it is a good idea to bind a
diff --git a/emacs/guix-devel.el b/emacs/guix-devel.el
index e99b289..1d3f381 100644
--- a/emacs/guix-devel.el
+++ b/emacs/guix-devel.el
@@ -39,6 +39,15 @@
     (guix-devel-use-modules module)
     (message "Using %s module." module)))
 
+;;;###autoload
+(defun guix-devel-build-current-package-definition ()
+  "Build package defined by the current top-level variable definition."
+  (interactive)
+  (guix-devel-use-modules "(guix scripts build)"
+                          (guix-guile-current-module))
+  (guix-geiser-call-in-repl "build-package"
+                            (guix-guile-current-definition)))
+
 (provide 'guix-devel)
 
 ;;; guix-devel.el ends here
diff --git a/emacs/guix-guile.el b/emacs/guix-guile.el
index ffa8848..aa5d747 100644
--- a/emacs/guix-guile.el
+++ b/emacs/guix-guile.el
@@ -26,6 +26,23 @@
 
 (require 'geiser-guile)
 
+(defvar guix-guile-definition-regexp
+  (rx bol "(define"
+      (zero-or-one "*")
+      (zero-or-one "-public")
+      (one-or-more space)
+      (zero-or-one "(")
+      (group (one-or-more (or word (syntax symbol)))))
+  "Regexp used to find the guile definition.")
+
+(defun guix-guile-current-definition ()
+  "Return string with name of the current top-level guile definition."
+  (save-excursion
+    (beginning-of-defun)
+    (if (looking-at guix-guile-definition-regexp)
+        (match-string-no-properties 1)
+      (error "Couldn't find the current definition"))))
+
 (defun guix-guile-current-module ()
   "Return string with current guile module.
 Return nil, if current buffer does not define a module."
-- 
2.4.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]