Reputation: 553
I'm writing a major mode for a language and I want to offer completion after '.', or following a keypress. Completions are determined by sending a request to a backgound process using process-send-string
and set-process-filter
. The returned list of completions is dependent on the background process parsing the current state of the file and being instructed to give completions at that particular point.
I have tried using the popular autocomplete
package, but it is really not written with this use case in mind. This is partly because it offers automatic suggetions (i.e. without keypress), which is a nice feature that I don't need. The function that you offer it to call needs to be called synchronously, and emacs process control is asynchronous. I have coded something up along the lines of https://github.com/Golevka/emacs-clang-complete-async, but it doesn't feel robust at all, and has been very fiddly to get it working.
I like the menus used in autocomplete
, and would like to know what would fit best with my use-case, preferably while also looking nice.
Upvotes: 1
Views: 129
Reputation: 28541
You can wait synchronously for a background process's output with accept-process-output
. You might like to take a look at gud-gdb-completions
and gud-gdb-run-command-fetch-lines
in a recent enough version of gud.el
.
Upvotes: 2