GNU bug report logs -
#19755
python.el: native completion: more problems (and solutions)
Previous Next
Reported by: Carlos Pita <carlosjosepita <at> gmail.com>
Date: Tue, 3 Feb 2015 12:41:02 UTC
Severity: normal
Tags: patch
Done: fgallina <at> gnu.org (Fabián Ezequiel Gallina)
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Here is a quick prototype of how the client/server approach would look like.
The setup code could be structured around a single class PythonElHelper, say.
The class will listen on a socket in a dedicated thread.
I have coded its output as json in order to allow to pass structured
information to the elisp side and easily parse this information as
elisp data with json-read-from-string.
I don't see a need to use a full-fledged http server, although that
could be done with url.el if desired.
The server would provide tooltips for eldoc, documentation for the
help buffer and completions for completion-at-point in a way that
doesn't interfere with history, prompt numbers, block editing, etc.
and doesn't require to deal with the shell input/output.
Do you think this approach is sensible? I'm available for coding this
along the next two months or so.
######################## python server #################
class PythonElServer:
def __init__(self):
# detect python2/3, ipython, readline, set completer, etc
pass
def complete(self, symbol):
return ["a", "b", "c"]
def tooltip(self, symbol):
return "func(a, b, c)"
def documentation(self, symbol):
return "A function that does something"
def serve(self, port):
import socket, json
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('', port))
server.listen(1)
(client, address) = server.accept()
while True:
request = client.recv(1024)
action, symbol = request.split()
response = getattr(self, action)(symbol)
client.send(json.dumps(response))
PythonElServer().serve(9090)
######################## elisp client #################
;; -*- lexical-binding: t -*-
(setq python-shell-server
(open-network-stream "pyserver" "pyserver" "localhost" 9091))
(defun python-shell-server-request (action symbol)
(set-process-filter
python-shell-server
(lambda (proc out)
(let ((response (json-read-from-string out)))
(pcase action
(`complete (python-shell-complete response))
(`tooltip (python-shell-tooltip response))
(`documentation (python-shell-documentation response))))))
(process-send-string python-shell-server
(concat (symbol-name action) " " symbol)))
(defun python-shell-complete (response)
(print (concat "complete: " response)))
(defun python-shell-tooltip (response)
(print (concat "tooltip: " response)))
(defun python-shell-documentation (response)
(print (concat "documentation: " response)))
(python-shell-server-request 'documentation "xxx")
This bug report was last modified 10 years and 47 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.