summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnosis.el41
1 files changed, 20 insertions, 21 deletions
diff --git a/gnosis.el b/gnosis.el
index 4b1f3f9..b824e15 100644
--- a/gnosis.el
+++ b/gnosis.el
@@ -101,27 +101,26 @@ Example:
(gnosis-mode)
,@body))
-;; TODO: Use gnosis-completing-read to display total notes for review
-;; option
-(defun gnosis-completing-read (prompt candidates)
- "Gnosis `completing-read' alternative.
-
-`PROMPT' for choice between `CANDIDATES'.
-CANDIDATES need to be in a format of ((\"Option1\" \"Additional Info\")).
-
-WARNING: This function is still under development, DO NOT use this as is now."
- (let* ((collection (lambda (str pred action)
- (if (eq action 'metadata)
- `(metadata
- (affixation-function . ,(lambda (cands)
- (mapcar
- (lambda (cand)
- (list cand "" (format " %s"
- (or (cdr (assoc cand candidates)) ""))))
- cands))))
- (complete-with-action action candidates str pred))))
- (choice (completing-read prompt collection)))
- choice))
+(cl-defun gnosis-completing-read (prompt options info &optional (face-for-info 'font-lock-doc-face))
+ "A version of `completing-read' with text properties, padding & choosable face.
+Returns selected option from OPTIONS.
+
+PROMPT is a string to prompt with; normally it ends in a colon and a space.
+OPTIONS is a list of strings.
+INFO is a list of strings, which will be displayed as additional info for option
+FACE-FOR-INFO is the face used to display info for option."
+ (let* ((choices (cl-mapcar 'cons options info))
+ (max-choice-length (apply 'max (mapcar 'length options)))
+ (formatted-choices
+ (mapcar (lambda (choice)
+ (cons (concat (format "%s" (car choice))
+ (make-string (- max-choice-length (length (car choice))) ? )
+ " "
+ (propertize (format "%s" (cdr choice)) 'face face-for-info))
+ (car choice)))
+ choices)))
+ (cdr (assoc (completing-read prompt formatted-choices nil t)
+ formatted-choices))))
(defun gnosis-display--question (id)
"Display main row for note ID."