summaryrefslogtreecommitdiff
path: root/emacs
diff options
context:
space:
mode:
authorAlex Kost <alezost@gmail.com>2014-10-16 21:35:47 +0400
committerAlex Kost <alezost@gmail.com>2014-10-17 10:56:27 +0400
commit189cea2782df67ea048a3982be69c8b1ff9762e9 (patch)
treef353da6c0b24a43cfad0da4635e3deaa7f7b1d71 /emacs
parent347e17b47450a0fcc120c29e8b307e87b9182c21 (diff)
downloadguix-189cea2782df67ea048a3982be69c8b1ff9762e9.tar.gz
guix-189cea2782df67ea048a3982be69c8b1ff9762e9.tar.xz
emacs: Add 'guix-generations-by-time' command.
* emacs/guix-main.scm (find-generations): Add finding generations by time. * emacs/guix-utils.el (guix-read-date): New procedure. * emacs/guix-base.el (guix-messages): Add new messages. * emacs/guix.el (guix-generations-by-time): New command. * doc/emacs.texi (emacs Commands): Document it.
Diffstat (limited to 'emacs')
-rw-r--r--emacs/guix-base.el6
-rw-r--r--emacs/guix-main.scm11
-rw-r--r--emacs/guix-utils.el8
-rw-r--r--emacs/guix.el12
4 files changed, 35 insertions, 2 deletions
diff --git a/emacs/guix-base.el b/emacs/guix-base.el
index 15a26de01e..e9c1e00245 100644
--- a/emacs/guix-base.el
+++ b/emacs/guix-base.el
@@ -626,7 +626,11 @@ This function will not update the information, use
(all
(0 "No available generations.")
(1 "A single available generation.")
- (many "%d available generations." count)))))
+ (many "%d available generations." count))
+ (time
+ (0 "Generations not found.")
+ (1 "A single generation matching time period.")
+ (many "%d generations matching time period." count)))))
(defun guix-result-message (entries entry-type search-type search-vals)
"Display an appropriate message after displaying ENTRIES."
diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index 7e26876dfa..b2f63351f0 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -669,6 +669,15 @@ If NUMBER is 0 or less, return all generations."
(last-generations profile (car search-vals)))
((all)
(last-generations profile +inf.0))
+ ((time)
+ (match search-vals
+ ((from to)
+ (matching-generations
+ profile
+ (lambda (gen)
+ (let ((time (time-second (generation-time profile gen))))
+ (< from time to)))))
+ (_ '())))
(else (search-type-error "generation" search-type))))
(define (generation-sexps profile params search-type search-vals)
@@ -696,7 +705,7 @@ SEARCH-TYPE should be one of the following symbols:
'installed', 'obsolete', 'generation'.
- If ENTRY-TYPE is 'generation':
- 'id', 'last', 'all'.
+ 'id', 'last', 'all', 'time'.
PARAMS is a list of parameters for receiving. If it is an empty list,
get information with all available parameters, which are:
diff --git a/emacs/guix-utils.el b/emacs/guix-utils.el
index f99c2ba884..878781489e 100644
--- a/emacs/guix-utils.el
+++ b/emacs/guix-utils.el
@@ -138,6 +138,14 @@ split it into several short lines."
hist def inherit-input-method)
:test #'string=))
+(declare-function org-read-date "org" t)
+
+(defun guix-read-date (prompt)
+ "Prompt for a date or time using `org-read-date'.
+Return time value."
+ (require 'org)
+ (org-read-date nil t nil prompt))
+
(defun guix-get-key-val (alist &rest keys)
"Return value from ALIST by KEYS.
ALIST is alist of alists of alists ... which can be consecutively
diff --git a/emacs/guix.el b/emacs/guix.el
index a1425161c4..b91a88dc14 100644
--- a/emacs/guix.el
+++ b/emacs/guix.el
@@ -31,6 +31,7 @@
(require 'guix-base)
(require 'guix-list)
(require 'guix-info)
+(require 'guix-utils)
(defgroup guix nil
"Interface for Guix package manager."
@@ -134,6 +135,17 @@ Interactively, NUMBER is defined by a numeric prefix."
(guix-get-show-generations 'last number)
(guix-get-show-generations 'all)))
+;;;###autoload
+(defun guix-generations-by-time (from to)
+ "Display information about generations created between FROM and TO.
+FROM and TO should be time values."
+ (interactive
+ (list (guix-read-date "Find generations (from): ")
+ (guix-read-date "Find generations (to): ")))
+ (guix-get-show-generations 'time
+ (float-time from)
+ (float-time to)))
+
(provide 'guix)
;;; guix.el ends here