* Re: scratch/backend-completion aaaa016056 2/2: Speed it up [not found] ` <20221203131739.3FCF9C004BE@vcs2.savannah.gnu.org> @ 2022-12-03 14:10 ` Stefan Monnier 2022-12-03 23:30 ` João Távora 0 siblings, 1 reply; 14+ messages in thread From: Stefan Monnier @ 2022-12-03 14:10 UTC (permalink / raw) To: emacs-devel; +Cc: João Távora > diff --git a/lisp/external-completion.el b/lisp/external-completion.el > index da3a986b8c..25e94e540b 100644 > --- a/lisp/external-completion.el > +++ b/lisp/external-completion.el > @@ -104,8 +104,10 @@ taking a (STRING POINT) as arguments. The default is to set to > `(external-completion-allc . ,(if pred (seq-filter pred all) all)))) > (`(boundaries . ,_) nil) > (_ > - (let ((all (funcall lookup string (length string)))) > - (complete-with-action action all string pred)))))) > + ;; FIXME: Stefan had a call to `lookup' and > + ;; `complete-with-action' again here, but that just seems to > + ;; slow down things for no good reason, so I took it out. > + )))) The code was definitely needed for some cases like `try-completion` and `all-completions` (e.g. to make sure we only return completion of the `string` *prefix* as callers of those functions expect and to make sure we obey `pred`). But I'm surprised it made things slow: this code should only be involved when the user choose some *other* completion style, so could you check which method of the completion table was invoked? Maybe we should only use that code when `action` is one of `t` or `nil`? Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion aaaa016056 2/2: Speed it up 2022-12-03 14:10 ` scratch/backend-completion aaaa016056 2/2: Speed it up Stefan Monnier @ 2022-12-03 23:30 ` João Távora 2022-12-04 0:18 ` Stefan Monnier 0 siblings, 1 reply; 14+ messages in thread From: João Távora @ 2022-12-03 23:30 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 852 bytes --] > But I'm surprised it made things slow: this code should only be involved > when the user choose some *other* completion style, so could you check > which method of the completion table was invoked? It seems to be called with both `nil` and `lambda`. I've added this to the FIXME comment. It made things slow because when selecting a candidate with fido-vertical-mode it did another useless 0.5s/1s lookup for the thing I had just selected. > Maybe we should only use that code when `action` is one of `t` or `nil`? Maybe. Anyway in my tests it's working fine without it. But `nil` doesn't break them, so I'm fine if you add them. I'm just confused about the possible benefits that may come from that complexity. I wish you could post an illustrative example with some strings that a mere mortal might follow along. João [-- Attachment #2: Type: text/html, Size: 1088 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion aaaa016056 2/2: Speed it up 2022-12-03 23:30 ` João Távora @ 2022-12-04 0:18 ` Stefan Monnier 2022-12-04 11:11 ` João Távora 0 siblings, 1 reply; 14+ messages in thread From: Stefan Monnier @ 2022-12-04 0:18 UTC (permalink / raw) To: João Távora; +Cc: emacs-devel >> But I'm surprised it made things slow: this code should only be involved >> when the user choose some *other* completion style, so could you check >> which method of the completion table was invoked? > It seems to be called with both `nil` and `lambda`. I've added this to the > FIXME comment. Hmm... can you get a backtrace for when it's called with `nil`? > It made things slow because when selecting a candidate with > fido-vertical-mode it did another useless 0.5s/1s lookup for the thing > I had just selected. Yes, it's only meant as a fallback case (and if we intend it to work more or less acceptably we'd need to add some caching). >> Maybe we should only use that code when `action` is one of `t` or `nil`? > Maybe. Anyway in my tests it's working fine without it. But `nil` doesn't > break them, so I'm fine if you add them. I'm just confused about the > possible benefits that may come from that complexity. I wish you could > post an illustrative example with some strings that a mere mortal might > follow along. As I said, it's for the case where the users want to use that completion table with another completion-style. Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion aaaa016056 2/2: Speed it up 2022-12-04 0:18 ` Stefan Monnier @ 2022-12-04 11:11 ` João Távora 0 siblings, 0 replies; 14+ messages in thread From: João Távora @ 2022-12-04 11:11 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 5049 bytes --] On Sun, Dec 4, 2022 at 12:18 AM Stefan Monnier <monnier@iro.umontreal.ca> wrote: > > >> But I'm surprised it made things slow: this code should only be involved > >> when the user choose some *other* completion style, so could you check > >> which method of the completion table was invoked? > > It seems to be called with both `nil` and `lambda`. I've added this to the > > FIXME comment. > > Hmm... can you get a backtrace for when it's called with `nil`? See after my sig: > > It made things slow because when selecting a candidate with > > fido-vertical-mode it did another useless 0.5s/1s lookup for the thing > > I had just selected. > > Yes, it's only meant as a fallback case (and if we intend it to work > more or less acceptably we'd need to add some caching). Been there, done that :-) > >> Maybe we should only use that code when `action` is one of `t` or `nil`? > > Maybe. Anyway in my tests it's working fine without it. But `nil` doesn't > > break them, so I'm fine if you add them. I'm just confused about the > > possible benefits that may come from that complexity. I wish you could > > post an illustrative example with some strings that a mere mortal might > > follow along. > > As I said, it's for the case where the users want to use that completion > table with another completion-style. See the comment block. I think we should just error if the user tries to do that. João Here's the backtrace you ordered, sir: Debugger entered: nil #f(compiled-function (--cl-lookup-internal-- string pred action method) #<bytecode -0x1dfbb45767c3fc90>)(#f(compiled-function (string point) #<bytecode -0x1a49dbcf59322b1d>) "doc/misc/eglot.texi" nil nil nil) #f(compiled-function (string pred action) #<bytecode -0x6cbef0a719c4d65>)("doc/misc/eglot.texi" nil nil) try-completion("doc/misc/eglot.texi" #f(compiled-function (string pred action) #<bytecode -0x6cbef0a719c4d65>) nil) completion--complete-and-exit(41 60 exit-minibuffer #f(compiled-function () #<bytecode -0x18333a20a7fa497>)) minibuffer-force-complete-and-exit() icomplete-force-complete-and-exit() icomplete-fido-ret() funcall-interactively(icomplete-fido-ret) call-interactively(icomplete-fido-ret nil nil) command-execute(icomplete-fido-ret) read-from-minibuffer("Eel find file in ~/Source/Emacs/emacs/: " nil (keymap (menu-bar keymap (minibuf "Minibuf" keymap (tab menu-item "Complete" minibuffer-complete :help "Complete as far as possible") (space menu-item "Complete Word" minibuffer-complete-word :help "Complete at most one word") (63 menu-item "List Completions" minibuffer-completion-help :help "Display all possible completions") "Minibuf")) (M-down . minibuffer-next-completion) (M-up . minibuffer-previous-completion) (27 keymap (13 . minibuffer-choose-completion) (103 keymap (27 keymap (99 . switch-to-completions))) (118 . switch-to-completions)) (prior . switch-to-completions) (63 . minibuffer-completion-help) (32 . minibuffer-complete-word) (backtab . minibuffer-complete) (9 . minibuffer-complete) keymap (menu-bar keymap (minibuf "Minibuf" keymap (previous menu-item "Previous History Item" previous-history-element :help "Put previous minibuffer history element in the min...") (next menu-item "Next History Item" next-history-element :help "Put next minibuffer history element in the minibuf...") (isearch-backward menu-item "Isearch History Backward" isearch-backward :help "Incrementally search minibuffer history backward") (isearch-forward menu-item "Isearch History Forward" isearch-forward :help "Incrementally search minibuffer history forward") (return menu-item "Enter" exit-minibuffer :key-sequence "\15" :help "Terminate input and exit minibuffer") (quit menu-item "Quit" abort-recursive-edit :help "Abort input and exit minibuffer") "Minibuf")) (24 keymap (down . minibuffer-complete-defaults) (up . minibuffer-complete-history)) (13 . exit-minibuffer) (10 . exit-minibuffer) (7 . minibuffer-keyboard-quit) (C-tab . file-cache-minibuffer-complete) (9 . self-insert-command) (XF86Back . previous-history-element) (up . previous-line-or-history-element) (prior . previous-history-element) (XF86Forward . next-history-element) (down . next-line-or-history-element) (next . next-history-element) (27 keymap (60 . minibuffer-beginning-of-buffer) (114 . previous-matching-history-element) (115 . next-matching-history-element) (112 . previous-history-element) (110 . next-history-element))) nil nil nil nil) completing-read-default("Eel find file in ~/Source/Emacs/emacs/: " #f(compiled-function (string pred action) #<bytecode -0x6cbef0a719c4d65>) nil nil nil nil nil nil) completing-read("Eel find file in ~/Source/Emacs/emacs/: " #f(compiled-function (string pred action) #<bytecode -0x6cbef0a719c4d65>) nil nil nil nil) eel-find-file("~/Source/Emacs/emacs/") funcall-interactively(eel-find-file "~/Source/Emacs/emacs/") call-interactively(eel-find-file nil nil) command-execute(eel-find-file) [-- Attachment #2: Type: text/html, Size: 5890 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <20221203131739.2A601C004BA@vcs2.savannah.gnu.org>]
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" [not found] ` <20221203131739.2A601C004BA@vcs2.savannah.gnu.org> @ 2022-12-03 14:26 ` Stefan Monnier 2022-12-03 23:36 ` João Távora 0 siblings, 1 reply; 14+ messages in thread From: Stefan Monnier @ 2022-12-03 14:26 UTC (permalink / raw) To: emacs-devel; +Cc: João Távora > Integrate Stefan suggestions but rename it to "external-completion.el" Ha! Great minds thing alike! > +(add-to-list 'completion-styles-alist > + '(external-completion-style This sounds a bit like the RAS syndrome, just without the acronym. Why not use just `external`? > +(defun external-completion-table (lookup > + category &optional metadata > + try-completion-function) Ah, I see you made tryc optional :-) I'd put `category` on the first line, tho. If you don't like the resulting indentation of the second line, then just add a space before "lookup" :-). > +TRY-COMPLETION-FUNCTION is an poorly understood implementation detail. Not at all. It's a functionality that only makes sense for some UIs (not those based on the idea of selecting among a set of choices), and it tends to work better with more "primitive" completion styles (it asymptotically becomes useless the harder the completion style tries to find completions). The goal of "try completion" is, given STRING and POINT, to return the longest string COMPLETION (together with a NEWPOINT) such that (allc STRING POINT) = (allc COMPLETION NEWPOINT). > +(defun external-completion--try-completion (string table pred point) > + (external-completion--call 'external-completion-tryc string table pred point)) AFAICT the `external-completion-tryc/allc` symbols are not exposed to users of this library any more so we could use ones with a double hyphen. Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" 2022-12-03 14:26 ` scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" Stefan Monnier @ 2022-12-03 23:36 ` João Távora 2022-12-04 0:31 ` Stefan Monnier 0 siblings, 1 reply; 14+ messages in thread From: João Távora @ 2022-12-03 23:36 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1781 bytes --] On Sat, Dec 3, 2022 at 2:26 PM Stefan Monnier <monnier@iro.umontreal.ca> wrote: > > Integrate Stefan suggestions but rename it to "external-completion.el" > Ha! Great minds thing alike! Nice! > > +(add-to-list 'completion-styles-alist > > + '(external-completion-style > > This sounds a bit like the RAS syndrome, just without the acronym. > Why not use just `external`? Good idea. Done. > > +(defun external-completion-table (lookup > > + category &optional metadata > > + try-completion-function) > > Ah, I see you made tryc optional :-) > I'd put `category` on the first line, tho. > If you don't like the resulting indentation of the second line, then > just add a space before "lookup" :-). Haha. Yes I fixed it. And category is now the first argument, I think it's slightly more logical. > > +TRY-COMPLETION-FUNCTION is an poorly understood implementation detail. > > Not at all. It's a functionality that only makes sense for some UIs > (not those based on the idea of selecting among a set of choices), and > it tends to work better with more "primitive" completion styles (it > asymptotically becomes useless the harder the completion style tries to > find completions). I'm still confused, I need examples to understand this stuff, and I'm afraid If I do I'll forget all about it next time around. But personally I don't _have_ to understand it, really. Been using this for years successfully without understanding it, so why should I start now? I made the docstring even more cheeky so you can see what I mean. > AFAICT the `external-completion-tryc/allc` symbols are not exposed to > users of this library any more so we could use ones with a double hyphen. Good idea. Done. [-- Attachment #2: Type: text/html, Size: 2349 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" 2022-12-03 23:36 ` João Távora @ 2022-12-04 0:31 ` Stefan Monnier 2022-12-04 10:02 ` João Távora 0 siblings, 1 reply; 14+ messages in thread From: Stefan Monnier @ 2022-12-04 0:31 UTC (permalink / raw) To: João Távora; +Cc: emacs-devel >> > +TRY-COMPLETION-FUNCTION is an poorly understood implementation detail. >> >> Not at all. It's a functionality that only makes sense for some UIs >> (not those based on the idea of selecting among a set of choices), and >> it tends to work better with more "primitive" completion styles (it >> asymptotically becomes useless the harder the completion style tries to >> find completions). > > I'm still confused, I need examples to understand this stuff, and I'm afraid E.g. for the completion table of ELisp commands the `try-completion` for the `partial-completion` style of "r-bu" might be "re-bu" because all the completion candidates of "r-bu" have an "e" right after the "r", so "re-bu" selects exactly the same set of candidates. Similarly for "di-hu" it may return "diff-hunk" because all the candidates have "ff" after the "di" and "nk" after the "-hu". This is the standard "TAB completion" behavior: instead of asking you to *select* a candidate it "types the text for you" (hence the name "completion") without trying to guess which candidate you're going to go for: its only "guess" is that your goal is somewhere among the candidates. For prefix completion, it works great. For completion styles like `flex`, it's rarely able to complete anything. Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" 2022-12-04 0:31 ` Stefan Monnier @ 2022-12-04 10:02 ` João Távora 2022-12-04 16:54 ` Stefan Monnier 0 siblings, 1 reply; 14+ messages in thread From: João Távora @ 2022-12-04 10:02 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1202 bytes --] On Sun, Dec 4, 2022, 00:31 Stefan Monnier <monnier@iro.umontreal.ca> wrote:. > > For prefix completion, it works great. > For completion styles like `flex`, it's rarely able to complete anything. Alright, that helps, thanks. But what use can you imagine try-completion having with an external tool like LSP or my everything.exe client which does regex-style? Or some other external tool you can think of... Is it perhaps that the caller of our new function might look at the tool's results for PATTERN and then, knowing the implicit style the tool is employing, use TRY-COMPLETION-FUNCTION to extend the string being used for PATTERN at the completion locus? This would make some sense, but then again probably only be actually useful if the caller is adept of caching the results of the calls to LOOKUP. Else, I think we end up contacting the external tool one too many times for the same PATTERN. That's at least with the popular completion front-ends such as fido/vertico who probably go for the 'allc' immediately. Maybe 'external-completion-function' could be doing some per-table-per-PATTERN caching, to relieve the caller of this complication. João > > [-- Attachment #2: Type: text/html, Size: 1917 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" 2022-12-04 10:02 ` João Távora @ 2022-12-04 16:54 ` Stefan Monnier 2022-12-04 20:04 ` João Távora 0 siblings, 1 reply; 14+ messages in thread From: Stefan Monnier @ 2022-12-04 16:54 UTC (permalink / raw) To: João Távora; +Cc: emacs-devel >> For prefix completion, it works great. >> For completion styles like `flex`, it's rarely able to complete anything. > Alright, that helps, thanks. But what use can you imagine try-completion > having with an external tool like LSP or my everything.exe client which > does regex-style? Or some other external tool you can think of... There's one I can think of: SLY, because there external tool's completion code can be tweaked to fit the needs of Emacs :-) For most others it's probably difficult, indeed, which is why I suggested to make it optional (unless you know how the tool does its matching in which case you may be able to re-use `completion-pcm--merge-try` or to implement something similar). > Else, I think we end up contacting the external tool one too many times for > the same PATTERN. That's at least with the popular completion front-ends > such as fido/vertico who probably go for the 'allc' immediately. The default UI uses either tryc (when you hit TAB) or allc (when you ask the see *Completions*) not both. Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" 2022-12-04 16:54 ` Stefan Monnier @ 2022-12-04 20:04 ` João Távora 2022-12-06 0:14 ` Stefan Monnier 0 siblings, 1 reply; 14+ messages in thread From: João Távora @ 2022-12-04 20:04 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1316 bytes --] On Sun, Dec 4, 2022, 16:54 Stefan Monnier <monnier@iro.umontreal.ca> wrote: There's one I can think of: SLY, because there external tool's > completion code can be tweaked to fit the needs of Emacs :-) > > For most others it's probably difficult, indeed, which is why > I suggested to make it optional (unless you know how the tool > does its matching in which case you may be able to re-use > `completion-pcm--merge-try` or to implement something similar). > Yup, this rhymes exactly with what I wrote in the docstring in the latest version. I understand how it could be used now. Another question is if I as SLY author would use it. I don't think so, to be honest, seems to much hassle for not a lot of benefit. But others may want to, of course. > Else, I think we end up contacting the external tool one too many times > for > > the same PATTERN. That's at least with the popular completion front-ends > > such as fido/vertico who probably go for the 'allc' immediately. > > The default UI uses either tryc (when you hit TAB) or allc (when you > ask the see *Completions*) not both. Yes and eventually if you hit TAB twice that's two requests. So we need caching. But that's fine, I've implemented that already. Have a look at the latest commit when you find the time. João [-- Attachment #2: Type: text/html, Size: 2018 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" 2022-12-04 20:04 ` João Távora @ 2022-12-06 0:14 ` Stefan Monnier 2022-12-07 11:09 ` João Távora 0 siblings, 1 reply; 14+ messages in thread From: Stefan Monnier @ 2022-12-06 0:14 UTC (permalink / raw) To: João Távora; +Cc: emacs-devel > Yup, this rhymes exactly with what I wrote in the docstring in the latest > version. I understand how it could be used now. Looks great to me, thanks, > Another question is if I as SLY author would use it. I don't think > so, to be honest, seems to much hassle for not a lot of benefit. > But others may want to, of course. Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" 2022-12-06 0:14 ` Stefan Monnier @ 2022-12-07 11:09 ` João Távora 2022-12-07 13:56 ` Eli Zaretskii 0 siblings, 1 reply; 14+ messages in thread From: João Távora @ 2022-12-07 11:09 UTC (permalink / raw) To: Eli Zaretskii, Stefan Monnier; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1210 bytes --] On Tue, Dec 6, 2022 at 12:14 AM Stefan Monnier <monnier@iro.umontreal.ca> wrote: > > > Yup, this rhymes exactly with what I wrote in the docstring in the latest > > version. I understand how it could be used now. > > Looks great to me, thanks, Great! I've now tidied up the branch and pushed it to feature/external-completion Eli, if you haven't been following this discussion closely, this is a refactor of functionality already present in Eglot that consolidates the support for offering completions coming from external tools (like LSP servers, but not only) and makes it available to more third party packages. I think there shouldn't be any adverse effects of pushing this to the emacs-29 branch, but if you think it's better, I'll push it to master instead. It shouldn't make much of a difference since the new external-completion.el file is going to be a GNU ELPA :core package and as such it will be available in Emacs 28 anyway via package-install. Let me know what you think. The commentary of the new file, the docstring of external-completion-table and the commit messages should give details. I'll be happy to fix them further if you have comments. João [-- Attachment #2: Type: text/html, Size: 1539 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" 2022-12-07 11:09 ` João Távora @ 2022-12-07 13:56 ` Eli Zaretskii 2022-12-07 19:09 ` João Távora 0 siblings, 1 reply; 14+ messages in thread From: Eli Zaretskii @ 2022-12-07 13:56 UTC (permalink / raw) To: João Távora; +Cc: monnier, emacs-devel > From: João Távora <joaotavora@gmail.com> > Date: Wed, 7 Dec 2022 11:09:02 +0000 > Cc: emacs-devel <emacs-devel@gnu.org> > > Eli, if you haven't been following this discussion closely, this is a refactor of > functionality already present in Eglot that consolidates the support for > offering completions coming from external tools (like LSP servers, but not only) > and makes it available to more third party packages. > > I think there shouldn't be any adverse effects of pushing this to the emacs-29 > branch, but if you think it's better, I'll push it to master instead. > > It shouldn't make much of a difference since the new external-completion.el > file is going to be a GNU ELPA :core package and as such it will be available > in Emacs 28 anyway via package-install. > > Let me know what you think. The commentary of the new file, the docstring > of external-completion-table and the commit messages should give details. > I'll be happy to fix them further if you have comments. I'm fine with installing this on the emacs-29 branch, but I think external-completion.el warrants a NEWS entry. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" 2022-12-07 13:56 ` Eli Zaretskii @ 2022-12-07 19:09 ` João Távora 0 siblings, 0 replies; 14+ messages in thread From: João Távora @ 2022-12-07 19:09 UTC (permalink / raw) To: Eli Zaretskii; +Cc: monnier, emacs-devel [-- Attachment #1: Type: text/plain, Size: 483 bytes --] On Wed, Dec 7, 2022 at 1:56 PM Eli Zaretskii <eliz@gnu.org> wrote: > > Let me know what you think. The commentary of the new file, the > docstring > > of external-completion-table and the commit messages should give details. > > I'll be happy to fix them further if you have comments. > > I'm fine with installing this on the emacs-29 branch, but I think > external-completion.el warrants a NEWS entry. > Okay. I added a NEWS entry and pushed to emacs-29. João [-- Attachment #2: Type: text/html, Size: 814 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2022-12-07 19:09 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <167007345844.23701.8454474119701440468@vcs2.savannah.gnu.org> [not found] ` <20221203131739.3FCF9C004BE@vcs2.savannah.gnu.org> 2022-12-03 14:10 ` scratch/backend-completion aaaa016056 2/2: Speed it up Stefan Monnier 2022-12-03 23:30 ` João Távora 2022-12-04 0:18 ` Stefan Monnier 2022-12-04 11:11 ` João Távora [not found] ` <20221203131739.2A601C004BA@vcs2.savannah.gnu.org> 2022-12-03 14:26 ` scratch/backend-completion 9a62da21c2 1/2: Integrate Stefan suggestions but rename it to "external-completion.el" Stefan Monnier 2022-12-03 23:36 ` João Távora 2022-12-04 0:31 ` Stefan Monnier 2022-12-04 10:02 ` João Távora 2022-12-04 16:54 ` Stefan Monnier 2022-12-04 20:04 ` João Távora 2022-12-06 0:14 ` Stefan Monnier 2022-12-07 11:09 ` João Távora 2022-12-07 13:56 ` Eli Zaretskii 2022-12-07 19:09 ` João Távora
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).