From aeb845c3f005b183221faffbf8db9a5bddef7ad5 Mon Sep 17 00:00:00 2001 From: Daniel Mendler Date: Thu, 22 Jan 2026 09:11:06 +0100 Subject: Improve cape--properties-table --- cape.el | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/cape.el b/cape.el index 89b3a34..607e87d 100644 --- a/cape.el +++ b/cape.el @@ -250,26 +250,24 @@ BODY is the wrapping expression." Some metadata properties of the table must be overridden, since they take precedence over the properties specified as part of the Capf result. This function is used by `cape-wrap-properties'." - (let* ((cat (plist-get properties :category)) - (dsort (plist-get properties :display-sort-function)) - (csort (plist-get properties :cycle-sort-function)) - (ann (plist-get properties :annotation-function)) - (aff (plist-get properties :affixation-function)) - (alist (append (and cat `((category . ,cat))) - (and dsort `((display-sort-function . ,dsort))) - (and csort `((cycle-sort-function . ,csort))) - (and ann `((annotation-function . ,ann))) - (and aff `((affixation-function . ,aff)))))) - (if alist - (lambda (str pred action) - ;; We cannot use `completion-table-with-metadata' since the new - ;; metadata should be merged with the one of the underlying table. - (if (eq action 'metadata) - `(metadata ,@alist - ,@(and (functionp table) - (cdr (funcall table str pred action)))) - (complete-with-action action table str pred))) - table))) + (if-let* ((alist (cl-loop + for (x . y) in + '((:category . category) + (:display-sort-function . display-sort-function) + (:cycle-sort-function . cycle-sort-function) + (:annotation-function . annotation-function) + (:affixation-function . affixation-function)) + if (plist-member properties x) + collect `(,y . ,(plist-get properties x))))) + (lambda (str pred action) + ;; We cannot use `completion-table-with-metadata' since the new + ;; metadata should be merged with the one of the underlying table. + (if (eq action 'metadata) + `(metadata ,@alist + ,@(and (functionp table) + (cdr (funcall table str pred action)))) + (complete-with-action action table str pred))) + table)) (defvar cape--debug-length 5 "Length of printed lists in `cape--debug-print'.") -- cgit v1.0