emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Inline completion preview


From: Alexander Adolf
Subject: Re: Inline completion preview
Date: Mon, 30 Oct 2023 13:42:51 +0100

João Távora <joaotavora@gmail.com> writes:

> On Sun, Oct 29, 2023 at 4:25 PM Alexander Adolf
> <alexander.adolf@condition-alpha.com> wrote:
>>
>> Company provides an ecosystem of its own, and that can make one’s setup more 
>> complicated.
>
> I agree it provides more abstractions then are essential, but you don't
> have to use them.  Eglot-managed buffers prefer the company-capf backend
> by default and it works fine just fine.
>
> So the "complicated setup" you're looking for might just be one line:
>
>    (setq company-backends '(company-capf))

Indeed. But the complexity I was intending to refer to came with
integrating company with other 3rd party packages. Because of comapny's
age (it predates some of Emacs's current completion infrastructure),
many 3rd party packages have specific company adaptation code. As
packages and Emacs evolve, an adaptation or two tend to break with each
update. This kept my company config growing and growing.

My corfu config is still as small as it was on day one.

>> I have moved to corfu, which fully builds on Emacs’s ecosystem, and
>> have never looked back.
>
> company-capf is perfectly compatible with Emacs's completion functions
> as well.

It does. But in such a configuration you're only using a rather small
subset of company's code. What's the point of having such a big codebase
then? Lot sof unneeded complexity, IMHO.

> Corfu has known problems with Eglot, for example.

And it used to have with LSP. To my experience, in 99% of the cases the
problem and the fix lies with the other package, which was not using
Emacs's completion system properly (as was for instance teh case with
LSP).

> As far I understand, the way to fix them (presumably) is based on an
> additional thing called "cape" which works by monkey patching Eglot's
> functions via advice, which I don't think is really elegant.

Cape can wrap completion code, which is not compliant with Emacs's
completion framework, into wrapper functions which make it compliant
with the interfaces Emacs provides for, and expects from completion
functions. Thus, cape is a migration aid. You can switch from whatever
you used before to corfu, and keep using all your legacy completion
sources. This buys you time to find other completion sources which are
good `completion-at-point` citizens to replace your legacy ones.

> Also company works on TTY Emacs out of the box, and I think Corfu
> doesn't.  More stuff to add in.

Corfu works with TTY Emacs of of the box, too.

Under a graphical environment, corfu uses a frame provided by the
graphical environment (for instance the window manager) to display the
candidates. That way the display of the "popover" is independent of the
fonts used in the buffer. Consider as an example an Org buffer, where
the headings are rendered in a bigger font. Company will render popvover
text in that area using the bigger font.

Result with company:
----------------------------------------------------------------------

       The quick brown fox jum
                              +-------------+
                              | candidate 1 |
       * BIG FONT HEADING      | CANDIDATE 2    |
         BIG FONT HEADING      | CANDIDATE 2    |
                              | candidate 3 |
                              | candidate 4 |
                              +-------------+
----------------------------------------------------------------------

Duh! Company certainly showing its age here.


Result with corfu:
----------------------------------------------------------------------

       The quick brown fox jum
                              +-------------+
                              | candidate 1 |
       * BIG FONT HEADING     | candidate 2 |
         BIG FONT HEADING     | candidate 3 |               
                              | candidate 4 |
                              +-------------+
----------------------------------------------------------------------

> So, as I see it, with Company you get hassle free completion by
> customizing a way a bit of its functionality, whereas with Corfu you
> have to add stuff to your .emacs.  As I see it, it's really Corfu
> that has the most complicated setup.

My experience is the exact opposite.

As mentioned, I used company for many years. I kept compiling
complexities over complexities, and hacks for this and that in my
dot-emacs.

Making the switch to corfu was like a liberation. Tiny config, zero
hassle ever since.

Just my two cents anyway.

  --alexander




reply via email to

[Prev in Thread] Current Thread [Next in Thread]