gnu: Move pspp from maths.scm to statistics.scm
[jackhill/guix/guix.git] / emacs / guix-read.el
1 ;;; guix-read.el --- Minibuffer readers
2
3 ;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
4
5 ;; This file is part of GNU Guix.
6
7 ;; GNU Guix is free software; you can redistribute it and/or modify
8 ;; it under the terms of the GNU General Public License as published by
9 ;; the Free Software Foundation, either version 3 of the License, or
10 ;; (at your option) any later version.
11
12 ;; GNU Guix is distributed in the hope that it will be useful,
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ;; GNU General Public License for more details.
16
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
19
20 ;;; Commentary:
21
22 ;; This file provides functions to prompt a user for packages, system
23 ;; types, hash formats and other guix related stuff.
24
25 ;;; Code:
26
27 (require 'guix-help-vars)
28 (require 'guix-utils)
29 (require 'guix-backend)
30 (require 'guix-guile)
31
32 \f
33 ;;; Receivable lists of packages, lint checkers, etc.
34
35 (guix-memoized-defun guix-graph-type-names ()
36 "Return a list of names of available graph node types."
37 (guix-eval-read (guix-make-guile-expression 'graph-type-names)))
38
39 (guix-memoized-defun guix-refresh-updater-names ()
40 "Return a list of names of available refresh updater types."
41 (guix-eval-read (guix-make-guile-expression 'refresh-updater-names)))
42
43 (guix-memoized-defun guix-lint-checker-names ()
44 "Return a list of names of available lint checkers."
45 (guix-eval-read (guix-make-guile-expression 'lint-checker-names)))
46
47 (guix-memoized-defun guix-package-names ()
48 "Return a list of names of available packages."
49 (sort
50 ;; Work around <https://github.com/jaor/geiser/issues/64>:
51 ;; list of strings is parsed much slower than list of lists,
52 ;; so we use 'package-names-lists' instead of 'package-names'.
53
54 ;; (guix-eval-read (guix-make-guile-expression 'package-names))
55
56 (mapcar #'car
57 (guix-eval-read (guix-make-guile-expression
58 'package-names-lists)))
59 #'string<))
60
61 (guix-memoized-defun guix-license-names ()
62 "Return a list of names of available licenses."
63 (guix-eval-read (guix-make-guile-expression 'license-names)))
64
65 \f
66 ;;; Readers
67
68 (guix-define-readers
69 :completions-var guix-help-system-types
70 :single-reader guix-read-system-type
71 :single-prompt "System type: ")
72
73 (guix-define-readers
74 :completions-var guix-help-source-types
75 :single-reader guix-read-source-type
76 :single-prompt "Source type: ")
77
78 (guix-define-readers
79 :completions-var guix-help-hash-formats
80 :single-reader guix-read-hash-format
81 :single-prompt "Hash format: ")
82
83 (guix-define-readers
84 :completions-var guix-help-refresh-subsets
85 :single-reader guix-read-refresh-subset
86 :single-prompt "Refresh subset: ")
87
88 (guix-define-readers
89 :completions-getter guix-refresh-updater-names
90 :multiple-reader guix-read-refresh-updater-names
91 :multiple-prompt "Refresh updater,s: "
92 :multiple-separator ",")
93
94 (guix-define-readers
95 :completions-var guix-help-key-policies
96 :single-reader guix-read-key-policy
97 :single-prompt "Key policy: ")
98
99 (guix-define-readers
100 :completions-var guix-help-elpa-archives
101 :single-reader guix-read-elpa-archive
102 :single-prompt "ELPA archive: ")
103
104 (guix-define-readers
105 :completions-var guix-help-verify-options
106 :multiple-reader guix-read-verify-options
107 :multiple-prompt "Verify option,s: "
108 :multiple-separator ",")
109
110 (guix-define-readers
111 :completions-getter guix-graph-type-names
112 :single-reader guix-read-graph-type
113 :single-prompt "Graph node type: ")
114
115 (guix-define-readers
116 :completions-getter guix-lint-checker-names
117 :multiple-reader guix-read-lint-checker-names
118 :multiple-prompt "Linter,s: "
119 :multiple-separator ",")
120
121 (guix-define-readers
122 :completions-getter guix-package-names
123 :single-reader guix-read-package-name
124 :single-prompt "Package: "
125 :multiple-reader guix-read-package-names
126 :multiple-prompt "Package,s: "
127 :multiple-separator " ")
128
129 (guix-define-readers
130 :completions-getter guix-license-names
131 :single-reader guix-read-license-name
132 :single-prompt "License: ")
133
134 (provide 'guix-read)
135
136 ;;; guix-read.el ends here