[Python-mode] [ python-mode-Bugs-1180180 ] Proposed improvement for pycomplete
SourceForge.net
noreply at sourceforge.net
Sun Feb 26 17:18:57 CET 2006
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
More information about the Python-mode
mailing list