[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Any objection to adding completing-read-function?
From: |
Leo |
Subject: |
Re: Any objection to adding completing-read-function? |
Date: |
Tue, 28 Dec 2010 19:02:31 +0000 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.2.91 (Mac OS X 10.6.5) |
On 2010-12-28 14:34 +0000, Stefan Monnier wrote:
>> So I wonder if there is any objection to adding a new variable
>> completing-read-function that when set replaces completing-read? Let me
>> know if I should submit it to the bug tracker.
>
> There's been such requests in the past, which I've usually resisted.
> But I guess it's OK to do such a thing.
> A few points to note, tho:
OK. I'll submit it to the bug tracker later.
>> Here are some screenshots:
>> I switching to a bookmark:
> [...]
>> Switching to a branch in magit:
> [...]
>> Loading lisp systems in slime:
> [...]
>
> You can get similar results with M-x icomplete-mode, possibly combined
> with changing completion-styles (e.g. to add substring matching).
>
> Generally, I'd much rather see the default completion improved than
> side-stepped.
I agree.
> One other thing: a variable completing-read-function should not allow
> a nil value, instead its default value should be
> `completing-read-default' which is the current completing-read, so you
> can always funcall completing-read-function without checking if it's
> nil.
I have modified the patch to be like this. Since there are quite a few
libraries both in emacs and 3rd party calling completing-read directly,
in the patch the old completing-read is now completing-read-default and
the new completing-read calls completing-read-function, which defaults
to completing-read-default. Is this OK? Thanks.
>
> Stefan
Leo
diff --git a/lisp/ido.el b/lisp/ido.el
index e52a753..0f464d3 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -2011,7 +2011,7 @@
(setq ido-exit nil)
(setq ido-final-text
(catch 'ido
- (completing-read
+ (completing-read-default
(ido-make-prompt item prompt)
'(("dummy" . 1)) nil nil ; table predicate require-match
(prog1 ido-text-init (setq ido-text-init nil))
;initial-contents
@@ -4835,7 +4835,7 @@ See `read-directory-name' for additional parameters."
(concat ido-current-directory filename)))))
;;;###autoload
-(defun ido-completing-read (prompt choices &optional predicate require-match
initial-input hist def)
+(defun ido-completing-read (prompt choices &optional predicate require-match
initial-input hist def inherit-input-method)
"Ido replacement for the built-in `completing-read'.
Read a string in the minibuffer with ido-style completion.
PROMPT is a string to prompt with; normally it ends in a colon and a space.
diff --git a/src/minibuf.c b/src/minibuf.c
index 564346f..6e7e18b 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -132,6 +132,7 @@ Lisp_Object Vminibuffer_completion_table,
Qminibuffer_completion_table;
Lisp_Object Vminibuffer_completion_predicate, Qminibuffer_completion_predicate;
Lisp_Object Vminibuffer_completion_confirm, Qminibuffer_completion_confirm;
Lisp_Object Vminibuffer_completing_file_name;
+Lisp_Object Qcompleting_read_default, Vcompleting_read_function;
Lisp_Object Quser_variable_p;
@@ -1721,6 +1722,27 @@ with a space are ignored unless STRING itself starts
with a space. */)
DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0,
doc: /* Read a string in the minibuffer, with completion.
+This function calls `completing-read-function' to do the work, which
+defaults to `completing-read-default' (which see). */)
+ (prompt, collection, predicate, require_match, initial_input, hist, def,
inherit_input_method)
+ Lisp_Object prompt, collection, predicate, require_match, initial_input;
+ Lisp_Object hist, def, inherit_input_method;
+{
+ Lisp_Object args[9];
+ args[0] = Vcompleting_read_function;
+ args[1] = prompt;
+ args[2] = collection;
+ args[3] = predicate;
+ args[4] = require_match;
+ args[5] = initial_input;
+ args[6] = hist;
+ args[7] = def;
+ args[8] = inherit_input_method;
+ return Ffuncall (9, args);
+}
+
+DEFUN ("completing-read-default", Fcompleting_read_default,
Scompleting_read_default, 2, 8, 0,
+ doc: /* Default function for `completing-read-function'.
PROMPT is a string to prompt with; normally it ends in a colon and a space.
COLLECTION can be a list of strings, an alist, an obarray or a hash table.
COLLECTION can also be a function to do the completion itself.
@@ -1741,9 +1763,9 @@ REQUIRE-MATCH can take the following values:
- anything else behaves like t except that typing RET does not exit if it
does non-null completion.
-If the input is null, `completing-read' returns DEF, or the first element
-of the list of default values, or an empty string if DEF is nil,
-regardless of the value of REQUIRE-MATCH.
+If the input is null, `completing-read-default' returns DEF, or the
+first element of the list of default values, or an empty string if DEF
+is nil, regardless of the value of REQUIRE-MATCH.
If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
with point positioned at the end.
@@ -2077,6 +2099,9 @@ syms_of_minibuf ()
minibuf_save_list = Qnil;
staticpro (&minibuf_save_list);
+ Qcompleting_read_default = intern_c_string ("completing-read-default");
+ staticpro (&Qcompleting_read_default);
+
Qcompletion_ignore_case = intern_c_string ("completion-ignore-case");
staticpro (&Qcompletion_ignore_case);
@@ -2216,6 +2241,11 @@ If the value is `confirm-after-completion', the user may
exit with an
doc: /* Non-nil means completing file names. */);
Vminibuffer_completing_file_name = Qnil;
+ DEFVAR_LISP ("completing-read-function",
+ &Vcompleting_read_function,
+ doc: /* The function to be called by `completing-read'. */);
+ Vcompleting_read_function = Qcompleting_read_default;
+
DEFVAR_LISP ("minibuffer-help-form", &Vminibuffer_help_form,
doc: /* Value that `help-form' takes on inside the minibuffer.
*/);
Vminibuffer_help_form = Qnil;
@@ -2291,6 +2321,7 @@ properties. */);
defsubr (&Stest_completion);
defsubr (&Sassoc_string);
defsubr (&Scompleting_read);
+ defsubr (&Scompleting_read_default);
}
/* arch-tag: 8f69b601-fba3-484c-a6dd-ceaee54a7a73
- Re: Any objection to adding completing-read-function?, (continued)
- Re: Any objection to adding completing-read-function?, Stefan Monnier, 2010/12/28
- RE: Any objection to adding completing-read-function?, Drew Adams, 2010/12/28
- Re: Any objection to adding completing-read-function?, Stefan Monnier, 2010/12/28
- RE: Any objection to adding completing-read-function?, Drew Adams, 2010/12/28
- Re: Any objection to adding completing-read-function?, Stefan Monnier, 2010/12/28
- Re: Any objection to adding completing-read-function?, Leo, 2010/12/28
- Re: Any objection to adding completing-read-function?, Stefan Monnier, 2010/12/28
- Re: Any objection to adding completing-read-function?, Leo, 2010/12/29
- Re: Any objection to adding completing-read-function?, Stefan Monnier, 2010/12/29
- Re: Any objection to adding completing-read-function?, Leo, 2010/12/29
Re: Any objection to adding completing-read-function?,
Leo <=
RE: Any objection to adding completing-read-function?, Drew Adams, 2010/12/28