Bugs item #1180180, was opened at 2005-04-10 20:33 Message generated for change (Comment added) made by liujin You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=581349&aid=1180180&group_id=86916
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Hugo Haas (hugoh) Assigned to: Nobody/Anonymous (nobody) Summary: Proposed improvement for pycomplete Initial Comment: Hi. I really like the idea of pycomplete a lot. However, it only completes simple cases: "sys.cl" becomes "sys.clock" once completed. What would be interesting would be to get a list of completions for "sys.". I believe that what needs to be changed is the following: - have pycomplete.py return a list of all possibilities - in py-complete() in pycomplete.el, use the output of pycomplete.py to call try-completion; if it works, use it, if not and there are several possibilities, display all the possibilities given by all-completions and allow to chose between them. The former is trivial (patch attached). I tried to do the latter, but my lack of knowledge in elisp put a rapid stop to it, so in case somebody knows elisp and is interested by this (I think it would be a cool feature), I thought I'd record the idea here. Regards, Hugo ---------------------------------------------------------------------- Comment By: Liu Jin (liujin) Date: 2006-02-27 00:18 Message: Logged In: YES user_id=1462104 Unable to see errebepe's patch, but here's my attempt following IPython's implemention. It's like other completions in Emacs: - No completion: ring bell and display in echo area "Can't find completion for 'foo'" - Sole completion: complete - Multiple completion: open a window with mouse-clickable entries [pycomplete.py] --- pycomplete.py.old Wed Jan 11 21:07:19 2006 +++ pycomplete.py Sun Feb 26 23:49:19 2006 @@ -74,12 +74,21 @@ def pycomplete(s, imports=None): completions = get_all_completions(s, imports) + if len(completions) == 0: + return None + dots = s.split(".") - return os.path.commonprefix([k[len(dots[-1]):] for k in completions]) + prefix = os.path.commonprefix([k for k in completions]) + if len(completions)==1 or len(prefix)>len(dots[-1]): + return [prefix[len(dots[-1]):]] + + return completions [pycomplete.el] --- pycomplete.el.old Sat Dec 3 00:30:11 2005 +++ pycomplete.el Sun Feb 26 23:51:16 2006 @@ -10,9 +10,21 @@ (defun py-complete () (interactive) - (let ((pymacs-forget-mutability t)) - (insert (pycomplete-pycomplete (py-symbol-near-point) - (py-find-global- imports))))) + (let* ((pymacs-forget-mutability t) + (symbol (py-symbol-near-point)) + (completions + (pycomplete-pycomplete symbol + (py-find-global- imports)))) + (cond ((null completions) ; no matching symbol + (message "Can't find completion for \"%s\"" symbol) + (ding)) + ((null (cdr completions)) ; sole completion + (insert (car completions))) + (t + (message "Making completion list...") + (with-output-to-temp-buffer "*Python Completions*" + (display-completion-list completions)) + (message "Making completion list...% s" "done"))))) (defun py-find-global-imports () (save-excursion ---------------------------------------------------------------------- Comment By: Rodrigo Bernardo Pimentel (errebepe) Date: 2005-06-28 11:26 Message: Logged In: YES user_id=374783 Ahn... Sorry, false alarm. I was still using my code completion code and hadn't realized it. No wonder it was so similar ;) Haven't had much luck using Semantic yet, though I still think it's the best approach. ---------------------------------------------------------------------- Comment By: Rodrigo Bernardo Pimentel (errebepe) Date: 2005-06-28 05:44 Message: Logged In: YES user_id=374783 I just managed to use Semantic with ECB (http://ecb.sourceforge.net/). Installed both, fired up ECB (M-x ecb-activate). From then on, on a source file, I type M-Tab and it completes (using the same "interface" my patch provides, which I found cool, BTW). I've spotted what is apparently a bug (when importing a module from a file I created on the current directory), but otherwise it seems to work! ---------------------------------------------------------------------- Comment By: Rodrigo Bernardo Pimentel (errebepe) Date: 2005-06-28 04:13 Message: Logged In: YES user_id=374783 I used minibuffer because it seems to be the way Emacs usually handles these things. It's also a close analogy with the way Eclipse does it. Anyway, I've been thinking about code-completion for a while, and it seems the best way to do it would be to parse the code and act according to context. Apparently, the Semantic package (http://cedet.sourceforge.net/semantic.shtml) does this. Now, if I can get it to work... ---------------------------------------------------------------------- Comment By: Hugo Haas (hugoh) Date: 2005-06-27 06:37 Message: Logged In: YES user_id=331657 It seems to do exactly what I was after! Except maybe for the completion prompt, as maybe it could just give a list of possibilities in a separate buffer without requiring the use of the mini-buffer, but that's a detail. Thanks a lot. ---------------------------------------------------------------------- Comment By: Rodrigo Bernardo Pimentel (errebepe) Date: 2005-05-27 08:52 Message: Logged In: YES user_id=374783 I've implemented these suggestions and put the resulting files at http://isnomore.net/prog/pycomplete/ . Please take a look and let me know what you (all) think. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=581349&aid=1180180&group_id=86916 _______________________________________________ Python-mode mailing list Python-mode@python.org http://mail.python.org/mailman/listinfo/python-mode