Skip to content
Snippets Groups Projects
Commit 189cea27 authored by Alex Kost's avatar Alex Kost
Browse files

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.
parent 347e17b4
No related branches found
No related tags found
No related merge requests found
......@@ -102,6 +102,11 @@ can be changed by modifying @code{guix-search-params} variable.
List generations for the current profile. With numeric prefix, show so
many last generations.
@item M-x guix-generations-by-time
List generations matching time period. You'll be prompted for the
period using Org mode time prompt based on Emacs calendar (@pxref{The
date/time prompt,,, org, Org Mode Manual}).
@end table
By default commands for displaying packages display each output on a
......
......@@ -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."
......
......@@ -669,6 +669,15 @@ (define (find-generations profile search-type search-vals)
(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 @@ (define (entries profile params entry-type search-type search-vals)
'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:
......
......@@ -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
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment