From 2bec99d49ffdf89b5f2e3521cde5306d4ae72c64 Mon Sep 17 00:00:00 2001 From: Oleh Krehel Date: Thu, 26 Nov 2015 12:52:34 +0100 Subject: [PATCH] Ease production of functions like ivy-format-function-default * ivy.el (ivy--format-function-generic): New defun. (ivy-format-function-default): (ivy-format-function-arrow): (ivy-format-function-line): Use `ivy--format-function-generic'. * counsel.el (counsel--M-x-transformer): Add an extra space to simplify the logic. Re #307 --- counsel.el | 4 ++-- ivy.el | 64 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/counsel.el b/counsel.el index 549149572..0ced4b902 100644 --- a/counsel.el +++ b/counsel.el @@ -833,8 +833,8 @@ CAND-PAIR is (command-name . extra-info)." cand-pair (cons command-name (if extra-info - (format "%s (%s)" extra-info (propertize binding 'face 'font-lock-keyword-face)) - (format "(%s)" (propertize binding 'face 'font-lock-keyword-face))))))) + (format " %s (%s)" extra-info (propertize binding 'face 'font-lock-keyword-face)) + (format " (%s)" (propertize binding 'face 'font-lock-keyword-face))))))) (defvar smex-initialized-p) (defvar smex-ido-cache) diff --git a/ivy.el b/ivy.el index 5578acd67..f3c760d3f 100644 --- a/ivy.el +++ b/ivy.el @@ -1909,48 +1909,50 @@ This string will be inserted into the minibuffer." (- (length str) 3))) "...") str)) -(defun ivy-format-function-default (cand-pairs) - "Transform CAND-PAIRS into a string for minibuffer." +(defun ivy--format-function-generic (selected-fn other-fn cand-pairs separator) + "Transform CAND-PAIRS into a string for minibuffer. +SELECTED-FN and OTHER-FN each take two string arguments. +SEPARATOR is used to join the candidates." (let ((i -1)) (mapconcat (lambda (pair) - (let ((stub (car pair)) + (let ((str (car pair)) (extra (cdr pair)) (curr (eq (cl-incf i) ivy--index))) - (when curr - (ivy--add-face stub 'ivy-current-match)) - (if extra (format "%s %s" stub extra) stub))) - cand-pairs "\n"))) + (if curr + (funcall selected-fn str extra) + (funcall other-fn str extra)))) + cand-pairs + separator))) + +(defun ivy-format-function-default (cand-pairs) + "Transform CAND-PAIRS into a string for minibuffer." + (ivy--format-function-generic + (lambda (str extra) + (concat (ivy--add-face str 'ivy-current-match) extra)) + #'concat + cand-pairs + "\n")) (defun ivy-format-function-arrow (cand-pairs) "Transform CAND-PAIRS into a string for minibuffer." - (let ((i -1)) - (mapconcat - (lambda (pair) - (let ((stub (car pair)) - (extra (cdr pair)) - (curr (eq (cl-incf i) ivy--index))) - (when curr - (ivy--add-face stub 'ivy-current-match)) - (concat (if curr "> " " ") - (if extra (format "%s %s" stub extra) stub)))) - cand-pairs "\n"))) + (ivy--format-function-generic + (lambda (str extra) + (concat "> " (ivy--add-face str 'ivy-current-match) extra)) + (lambda (str extra) + (concat " " str extra)) + cand-pairs + "\n")) (defun ivy-format-function-line (cand-pairs) "Transform CAND-PAIRS into a string for minibuffer." - (let ((i -1)) - (mapconcat - (lambda (pair) - (let* ((stub (car pair)) - (extra (cdr pair)) - (curr (eq (cl-incf i) ivy--index)) - (line (if extra - (format "%s %s\n" stub extra) - (concat stub "\n")))) - (when curr - (ivy--add-face line 'ivy-current-match)) - line)) - cand-pairs ""))) + (ivy--format-function-generic + (lambda (str extra) + (ivy--add-face (concat str extra "\n") 'ivy-current-match)) + (lambda (str extra) + (concat str extra "\n")) + cand-pairs + "")) (defface ivy-minibuffer-match-face-1 '((((class color) (background light)) -- 2.39.2