From 3330269a2bbe248c6fad65c4c2d2c93b1885ae9b Mon Sep 17 00:00:00 2001 From: Clemens Radermacher Date: Tue, 24 Mar 2020 21:29:24 +0100 Subject: [PATCH 1/5] Respect predicate passed to `selectrum-read-buffer' (fix #32) --- selectrum.el | 52 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/selectrum.el b/selectrum.el index 1c06d689..3289fb18 100644 --- a/selectrum.el +++ b/selectrum.el @@ -706,30 +706,40 @@ PREDICATE, see `read-buffer'." (orig-refine-function selectrum-refine-candidates-function) (selectrum-preprocess-candidates-function #'ignore) (selectrum-refine-candidates-function - (lambda (input _) - (let ((candidates (mapcar #'buffer-name (buffer-list)))) - (if (string-prefix-p " " input) - (progn - (setq input (substring input 1)) + (let ((balist ())) + ;; predicate gets passed an alist + (dolist (buf (buffer-list)) + (push (cons (buffer-name buf) buf) + balist)) + (when predicate + (setq balist (cl-delete-if-not predicate (nreverse balist)))) + (lambda (input _) + (let ((candidates (mapcar #'car balist))) + (if (string-prefix-p " " input) + (progn + (setq input (substring input 1)) + (setq candidates + (cl-delete-if-not + (lambda (name) + (string-prefix-p " " name)) + candidates))) + (unless predicate (setq candidates - (cl-delete-if-not + (cl-delete-if (lambda (name) (string-prefix-p " " name)) - candidates))) - (setq candidates - (cl-delete-if - (lambda (name) - (string-prefix-p " " name)) - candidates))) - `((candidates . ,(funcall - orig-refine-function - input - (funcall - orig-preprocess-function - candidates))) - (input . ,input)))))) - (selectrum-completing-read - prompt nil predicate require-match nil nil def))) + candidates)))) + `((candidates . ,(funcall + orig-refine-function + input + (funcall + orig-preprocess-function + candidates))) + (input . ,input))))))) + (selectrum-read + prompt nil + :default-candidate def + :require-match require-match))) (defvar selectrum--old-read-buffer-function nil "Previous value of `read-buffer-function'.") From f414684d4cd91f7fea78b57ead2dc117ba9a3b87 Mon Sep 17 00:00:00 2001 From: Clemens Radermacher Date: Tue, 24 Mar 2020 21:37:29 +0100 Subject: [PATCH 2/5] Always use correct buffer order --- selectrum.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/selectrum.el b/selectrum.el index 3289fb18..16e7916d 100644 --- a/selectrum.el +++ b/selectrum.el @@ -711,8 +711,9 @@ PREDICATE, see `read-buffer'." (dolist (buf (buffer-list)) (push (cons (buffer-name buf) buf) balist)) + (setq balist (nreverse balist)) (when predicate - (setq balist (cl-delete-if-not predicate (nreverse balist)))) + (setq balist (cl-delete-if-not predicate balist))) (lambda (input _) (let ((candidates (mapcar #'car balist))) (if (string-prefix-p " " input) From 83d5b6397b29da4349bc5d90a59ffbcc0e620610 Mon Sep 17 00:00:00 2001 From: Clemens Radermacher Date: Tue, 24 Mar 2020 22:09:41 +0100 Subject: [PATCH 3/5] Behave like default read-buffer if predicate is given --- selectrum.el | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/selectrum.el b/selectrum.el index 16e7916d..38d86c12 100644 --- a/selectrum.el +++ b/selectrum.el @@ -724,12 +724,11 @@ PREDICATE, see `read-buffer'." (lambda (name) (string-prefix-p " " name)) candidates))) - (unless predicate - (setq candidates - (cl-delete-if - (lambda (name) - (string-prefix-p " " name)) - candidates)))) + (setq candidates + (cl-delete-if + (lambda (name) + (string-prefix-p " " name)) + candidates))) `((candidates . ,(funcall orig-refine-function input From dd797a7e8bf632b5bfa1203cf32f53d34e10be75 Mon Sep 17 00:00:00 2001 From: Clemens Radermacher Date: Wed, 25 Mar 2020 18:15:18 +0100 Subject: [PATCH 4/5] Pass buffer names to predicate of read buffer function --- selectrum.el | 55 ++++++++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/selectrum.el b/selectrum.el index 38d86c12..51baf4cb 100644 --- a/selectrum.el +++ b/selectrum.el @@ -706,36 +706,31 @@ PREDICATE, see `read-buffer'." (orig-refine-function selectrum-refine-candidates-function) (selectrum-preprocess-candidates-function #'ignore) (selectrum-refine-candidates-function - (let ((balist ())) - ;; predicate gets passed an alist - (dolist (buf (buffer-list)) - (push (cons (buffer-name buf) buf) - balist)) - (setq balist (nreverse balist)) - (when predicate - (setq balist (cl-delete-if-not predicate balist))) - (lambda (input _) - (let ((candidates (mapcar #'car balist))) - (if (string-prefix-p " " input) - (progn - (setq input (substring input 1)) - (setq candidates - (cl-delete-if-not - (lambda (name) - (string-prefix-p " " name)) - candidates))) - (setq candidates - (cl-delete-if - (lambda (name) - (string-prefix-p " " name)) - candidates))) - `((candidates . ,(funcall - orig-refine-function - input - (funcall - orig-preprocess-function - candidates))) - (input . ,input))))))) + (lambda (input _) + (let* ((buffers (mapcar #'buffer-name (buffer-list))) + (candidates (if predicate + (cl-delete-if-not predicate buffers) + buffers))) + (if (string-prefix-p " " input) + (progn + (setq input (substring input 1)) + (setq candidates + (cl-delete-if-not + (lambda (name) + (string-prefix-p " " name)) + candidates))) + (setq candidates + (cl-delete-if + (lambda (name) + (string-prefix-p " " name)) + candidates))) + `((candidates . ,(funcall + orig-refine-function + input + (funcall + orig-preprocess-function + candidates))) + (input . ,input)))))) (selectrum-read prompt nil :default-candidate def From b91e027348cbfb46a078c463c882841ce93cf9a6 Mon Sep 17 00:00:00 2001 From: Clemens Radermacher Date: Thu, 26 Mar 2020 21:23:12 +0100 Subject: [PATCH 5/5] Add changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f591334..ffd1c25b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog]. +## Unreleased +### Bugs fixed +`selectrum-read-buffer` did not apply the filter predicate argument. This has +been fixed. + ## 1.0 (released 2020-03-23) ### Added * Package `selectrum`