[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Updating *Completions* as you type
From: |
Spencer Baugh |
Subject: |
Re: Updating *Completions* as you type |
Date: |
Thu, 19 Oct 2023 02:29:20 +0000 (UTC) |
Spencer Baugh <sbaugh@catern.com> writes:
> Juri Linkov <juri@linkov.net> writes:
>
>>>> Actually there is already a nil value in completions-sort with the tag
>>>> "No sorting". This works nicely for 'C-x b'. The remaining need is
>>>> to be able to set it only for 'C-x b', not for other completion types.
>>>
>>> I feel quite strongly that we should not extend completions-sort to be
>>> able to affect different completion types differently. Instead I think
>>> we should leave completions-sort as a blanket configuration for what to
>>> do if the completion metadata does not specify display-sort-function,
>>> and if we want to allow customizing an individual completion type, that
>>> completion type should specify a display-sort-function which can be
>>> customized.
>>>
>>> If we do extend completions-sort to affect different completion types
>>> differently, I expect we'll see lots of silly things, like packages with
>>> new completion types which automatically install changes to
>>> completions-sort instead of just specifying their own
>>> display-sort-function.
>>
>> Probably different completion types should provide separate options
>> such as e.g. 'read-char-by-name-sort' defines 'display-sort-function'
>> for 'read-char-by-name'.
>
> Agreed.
>
>> The same could be added for 'C-x b'. But unfortunately currently
>> it's hard-coded in 'internal-complete-buffer':
>>
>> #+begin_src c
>> else if (EQ (flag, Qmetadata))
>> return list3 (Qmetadata,
>> Fcons (Qcategory, Qbuffer),
>> Fcons (Qcycle_sort_function, Qidentity));
>> #+end_src
>
> Not hard to fix. I will post a patch to make this customizable soon.
How about this?
>From 2c5807193713893b8cecacf6ae9318e3e504fb93 Mon Sep 17 00:00:00 2001
From: Spencer Baugh <sbaugh@catern.com>
Date: Wed, 18 Oct 2023 22:28:59 -0400
Subject: [PATCH] Add read-buffer-sort
Add the ability to customize how read-buffer (actually
internal-complete-buffer) sorts the buffer completion candidates.
* lisp/cus-start.el (standard): Add customization information for
read-buffer-sort.
* src/minibuf.c (Finternal_complete_buffer): Use read-buffer-sort.
(syms_of_minibuf): Add read-buffer-sort.
---
lisp/cus-start.el | 4 ++++
src/minibuf.c | 26 +++++++++++++++++++++++---
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 054683d7cf6..569a0cf54b3 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -439,6 +439,10 @@ minibuffer-prompt-properties--setter
(read-buffer-function minibuffer
(choice (const nil)
function))
+ (read-buffer-sort minibuffer
+ (choice (const :tag "completions-sort controls
sorting" nil)
+ (const :tag "sort matching buffer-list"
buffer-list))
+ "30.1")
;; msdos.c
(dos-unsupported-char-glyph display integer)
;; nsterm.m
diff --git a/src/minibuf.c b/src/minibuf.c
index 58adde1bf66..715b4c08886 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -2186,9 +2186,13 @@ DEFUN ("internal-complete-buffer",
Finternal_complete_buffer, Sinternal_complete
else if (EQ (flag, Qlambda))
return Ftest_completion (string, Vbuffer_alist, predicate);
else if (EQ (flag, Qmetadata))
- return list3 (Qmetadata,
- Fcons (Qcategory, Qbuffer),
- Fcons (Qcycle_sort_function, Qidentity));
+ {
+ Lisp_Object res = list2 (Fcons (Qcategory, Qbuffer),
+ Fcons (Qcycle_sort_function, Qidentity));
+ if (EQ (Vread_buffer_sort, Qbuffer_list))
+ res = Fcons (Fcons (Qdisplay_sort_function, Qidentity), res);
+ return Fcons (Qmetadata, res);
+ }
else
return Qnil;
}
@@ -2323,6 +2327,7 @@ syms_of_minibuf (void)
DEFSYM (Qcase_fold_search, "case-fold-search");
DEFSYM (Qmetadata, "metadata");
DEFSYM (Qcycle_sort_function, "cycle-sort-function");
+ DEFSYM (Qdisplay_sort_function, "display-sort-function");
/* A frame parameter. */
DEFSYM (Qminibuffer_exit, "minibuffer-exit");
@@ -2522,6 +2527,21 @@ syms_of_minibuf (void)
the minibuffer. However, if `minibuffer-restore-windows' is present
in `minibuffer-exit-hook', exiting the minibuffer will remove the window
showing the *Completions* buffer, if any. */);
+
+ DEFVAR_LISP ("read-buffer-sort", Vread_buffer_sort,
+ doc: /* Non-nil means sort completions in `read-buffer'.
+
+If this is nil (the default), completions in `read-buffer' are sorted
+according to `completions-sort'.
+
+If this is `buffer-list', completions are sorted to match the order of
+`buffer-list'.
+
+This variable only affects the default `read-buffer', so if
+`read-buffer-function' is set to a function which does not use
+`internal-complete-buffer', this variable will have no effect.*/);
+ Vread_buffer_sort = Qnil;
+
read_minibuffer_restore_windows = true;
defsubr (&Sactive_minibuffer_window);
--
2.41.0
- RE: [External] : Re: Updating *Completions* as you type, (continued)
- RE: [External] : Re: Updating *Completions* as you type, Drew Adams, 2023/10/15
- Re: Updating *Completions* as you type, Juri Linkov, 2023/10/16
- Re: Updating *Completions* as you type, sbaugh, 2023/10/17
- Re: Updating *Completions* as you type, Juri Linkov, 2023/10/17
- Re: Updating *Completions* as you type, Spencer Baugh, 2023/10/17
- RE: [External] : Re: Updating *Completions* as you type, Drew Adams, 2023/10/17
- Re: Updating *Completions* as you type, Juri Linkov, 2023/10/18
- Re: Updating *Completions* as you type, Spencer Baugh, 2023/10/18
- Re: Updating *Completions* as you type, Juri Linkov, 2023/10/18
- Re: Updating *Completions* as you type, Spencer Baugh, 2023/10/18
- Re: Updating *Completions* as you type,
Spencer Baugh <=
- Re: Updating *Completions* as you type, Juri Linkov, 2023/10/19
- Re: Updating *Completions* as you type, Juri Linkov, 2023/10/20
- Re: Updating *Completions* as you type, sbaugh, 2023/10/17
- Re: Updating *Completions* as you type, Juri Linkov, 2023/10/17
- Re: Updating *Completions* as you type, Spencer Baugh, 2023/10/17
- Re: Updating *Completions* as you type, Spencer Baugh, 2023/10/17
- Re: Updating *Completions* as you type, Juri Linkov, 2023/10/18
- Re: Updating *Completions* as you type, Spencer Baugh, 2023/10/18
- Re: Updating *Completions* as you type, Juri Linkov, 2023/10/18
- Re: Updating *Completions* as you type, Spencer Baugh, 2023/10/18