Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

External autocomplete #48

Open
rjkroege opened this issue Apr 19, 2018 · 10 comments
Open

External autocomplete #48

rjkroege opened this issue Apr 19, 2018 · 10 comments
Labels
enhancement New feature or request

Comments

@rjkroege
Copy link
Owner

Acme has a built-in simple autocomplete system that Edwood has inherited. The inclusion of this functionality isn't necessarily compatible with the Acme "IDE built of UNIX commands" model. We should consider implementing a scheme where an external command (perhaps configurable per Window) would be responsible for autocompletion functionality.

@rjkroege rjkroege added the enhancement New feature or request label Apr 19, 2018
@rjkroege
Copy link
Owner Author

Conceivably #47 should be folded into this?

@sirnewton01
Copy link

Having just discovered that Ctrl-F works in Acme. How does one pick one of the completions in in the +Errors window? Just Snarf it?

I think it would be really interesting to hook this into one of Go's auto-complete libraries.

@rjkroege
Copy link
Owner Author

rjkroege commented Sep 5, 2018

Yes. Snarf the result or type more until there is only one choice.

And yes. The point of the bug would be to permit an external auto-completion system to be added with the libraries that you're thinking about or something like YCM running as a separate program.

@rjkroege
Copy link
Owner Author

rjkroege commented Nov 1, 2018

Note: bash has some kind of external autocomplete system. It might be worth when designing this feature to see if an external autocomplete engine could reuse bash autocomplete data.

@fhs
Copy link
Contributor

fhs commented Dec 5, 2018

Language Server Protocol (LSP) has support for auto-completion. I've been working on a tool that integrates LSP with acme. Currently I can have a window in acme that shows a list of possible completions in a window and update it as I move the cursor. However, the way I'm implementing it is very inefficient because it reads the whole body when I move the cursor (or type something).

I think what's needed for an external auto-completion (and other LSP features) is a log file for each window, similar to the global log file, but it'd allow clients to passively monitor each window. In theory this should already be possible with the event file, but somehow writing back events to the event file doesn't always update the tag correctly. So, perhaps the event file needs to be fixed instead.

Something else to think about: can we expand the file server enough, so that it's possible to separate the acme file server part from the GUI part? This would make something like sam -r possible with acme.

@rjkroege
Copy link
Owner Author

Several comments:

  • LSP sounds cool. It would really cool for your tool to connect Edwood to LSP. I'll have to try out your tool.
  • Feel free to share your ideas on what the UI should be for picking auto-completions.
  • Per-Window log files seem comparatively easy as a feature enhancement
  • Can you expand on what the event file issue? In particular, do you have a simple replica case that shows the problem?
  • Splitting the acme file server from the GUI is major surgery. I think that I'll eventually make it easier to contemplate with what I'm doing with Idiomatic text buffers #97 but at least at present, model updates and view updates are tightly intertwined.

@fhs
Copy link
Contributor

fhs commented Dec 26, 2018

My LSP tool should already work with Edwood, since the file server is currently compatible with acme. I've been using it for a while instead of A and acmego for Go programming. It doesn't use the official Go lsp server yet, but it will when that's ready.

The problem with event file is that if you run a simple program (see below) that just writes back the events, "Put" and "Undo" doesn't automatically show up when you modify the text in the window. The window is marked as dirty but somehow the tag isn't updated so that the user can Save/Undo the file.

I'm not too concerned with picking auto-completion just yet. I'd be happy just to get a list of completions that's computed fast.

package main

import (
	"log"
	"os"
	"strconv"

	"9fans.net/go/acme"
)

func main() {
	n, err := strconv.Atoi(os.Getenv("winid"))
	if err != nil {
		panic(err)
	}
	w, err := acme.Open(n, nil)
	if err != nil {
		panic(err)
	}
	for {
		e, err := w.ReadEvent()
		if err != nil {
			break
		}
		if err := w.WriteEvent(e); err != nil {
			log.Printf("WriteEvent: %v\n", err)
		}
	}
}

@dertuxmalwieder
Copy link

Out of curiosity, as I am currently trying to make it work:

My LSP tool should already work with Edwood

How do I use acme-lsp with Edwood on Windows where plumb is not a native command?

@fhs
Copy link
Contributor

fhs commented Aug 26, 2019

How do I use acme-lsp with Edwood on Windows where plumb is not a native command?

You can't unfortunately. I've opened 9fans/acme-lsp#14.

@dertuxmalwieder
Copy link

Thank you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants