[IPython-dev] function specific tab completion via annotations
Robert McGibbon
rmcgibbo at gmail.com
Tue Dec 18 04:52:20 EST 2012
Matthias,
Good call. That's it exactly. Unfortunately, I think dealing with this issue is a little above my expertise/experience.
When I apply this patch (pasted below) to the PR, the tab completions show in the notebook for foo(<TAB>.
The problem is that behavior kind of conflicts with the tooltip feature, which is not a feature of the terminal console.
-Robert
p.s.
I think I'm finally starting to see the wisdom of the comment on line 1046 of IPython/core/complete.py,
> # FIXME: we should extend our api to return a dict with completions for
> # different types of objects. The rlcomplete() method could then
> # simply collapse the dict into a list for readline, but we'd have
> # richer completion semantics in other evironments.
$ git diff
diff --git a/IPython/frontend/html/notebook/static/js/codecell.js b/IPython/frontend/html/notebook/static/js/codecell.js
index ea34719..000734b 100644
--- a/IPython/frontend/html/notebook/static/js/codecell.js
+++ b/IPython/frontend/html/notebook/static/js/codecell.js
@@ -155,6 +155,8 @@ var IPython = (function (IPython) {
IPython.tooltip.request(that);
// Prevent the event from bubbling up.
event.stop();
+ console.log('RTM DEBUG');
+ this.completer.startCompletion();
// Prevent CodeMirror from handling the tab.
return true;
} else {
diff --git a/IPython/frontend/html/notebook/static/js/completer.js b/IPython/frontend/html/notebook/static/js/completer.js
index ac2d95c..94aff4b 100644
--- a/IPython/frontend/html/notebook/static/js/completer.js
+++ b/IPython/frontend/html/notebook/static/js/completer.js
@@ -105,8 +105,9 @@ var IPython = (function (IPython) {
// we need to check that we are still on a word boundary
// because while typing the completer is still reinvoking itself
if (!/[0-9a-z._/\\:~-]/i.test(pre_cursor)) {
- this.close();
- return;
+ //this.close();
+ //return;
+ console.log('RTM DEBUG2');
}
this.autopick = false;
On Dec 18, 2012, at 1:17 AM, Matthias Bussonnier wrote:
> Ah... Then it's probably the tooltip code that take over.
>
> Same folder, codecell.js look for TAB or pre_cursor.
>
> Completion is not triggerd if char in front of cursor is space or opening bracket.
>
> Short from my phone.
>
> Le 18 déc. 2012 09:28, "Robert McGibbon" <rmcgibbo at gmail.com> a écrit :
> Marrhias
>
> the baz(notevaluated).<TAB> is working in the notebook.
>
> it's the foo(<TAB> that's not working... yet.
>
> my fridge is not out of beer, so i'm still working :)
>
> -Robert
>
> On Dec 18, 2012, at 12:22 AM, Matthias BUSSONNIER wrote:
>
>>
>> Le 18 déc. 2012 à 09:03, Robert McGibbon a écrit :
>>
>>> It's not working in the notebook with the argument specific completions, but the return value completion is working. There must be some issue with a difference in the line splitting with readline and without. I'll track it down.
>>
>> That's probably the js that removes everything between bracket by nothing
>> (IIRC, first completer was doing that.)
>>
>> baz(notevaluated).<tab>
>> to
>> baz.<tab>
>>
>> before completion. (or is it tooltip... that does it)
>>
>> Or a security about 'as you type'
>>
>> Actually every key press recall the completer once it has been invoked and it decide to 'kill itself'
>> on certain things (like closing bracket, spaces...)
>>
>> That would be
>>
>> IPython/frontend/html/notebook/static/js/completer.js ~L 100 smth.
>> --
>> Matthias
>>
>>
>>
>>>
>>> -Robert
>>>
>>> On Dec 17, 2012, at 11:51 PM, Brian Granger wrote:
>>>
>>>> This looks really great. Have you tested it with the notebook yet? I
>>>> would imagine that it should already work there as well.
>>>>
>>>> On Mon, Dec 17, 2012 at 11:27 PM, Robert McGibbon <rmcgibbo at gmail.com> wrote:
>>>>> Hey,
>>>>>
>>>>> I just posted a new PR for annotation based custom tab completion.
>>>>> https://github.com/ipython/ipython/pull/2701
>>>>>
>>>>> The code is fairly complex (~1000 new lines), so I assume that there are
>>>>> bugs. For that reason (and because its fun!), I encourage people
>>>>> to try taking it out for a spin.
>>>>>
>>>>>
>>>>> It lets you do things like this:
>>>>>
>>>>> In [1]: from IPython.extensions.completion import tab_complete, globs_to,
>>>>> literal
>>>>>
>>>>> In [2]: @tab_complete
>>>>> ...: def baz(x) -> str:
>>>>> ...: pass
>>>>> ...:
>>>>>
>>>>> In [3]: baz(notevaluated).<TAB>
>>>>> .capitalize .find .isspace .partition .rstrip .translate
>>>>> .center .format .istitle .replace .split .upper
>>>>> .count .index .isupper .rfind .splitlines .zfill
>>>>> .decode .isalnum .join .rindex .startswith
>>>>> .encode .isalpha .ljust .rjust .strip
>>>>> .endswith .isdigit .lower .rpartition .swapcase
>>>>> .expandtabs .islower .lstrip .rsplit .title
>>>>>
>>>>>
>>>>> And this:
>>>>>
>>>>> In [4]: @tab_complete
>>>>> ...: def foo(x : globs_to('*.txt'), mode : literal('r', 'w')):
>>>>> ...: pass
>>>>> ...:
>>>>>
>>>>> In [5]: foo(<TAB>
>>>>> 'COPYING.txt' 'dist/' 'setupext/'
>>>>> 'IPython/' 'docs/' 'tools/'
>>>>> '__pycache__/' 'ipython.egg-info/'
>>>>> 'build/' 'scripts/'
>>>>>
>>>>> In[6]: foo('COPYING.txt', <TAB>
>>>>> 'r', 'w'
>>>>>
>>>>>
>>>>>
>>>>> -Robert
>>>>>
>>>>> _______________________________________________
>>>>> IPython-dev mailing list
>>>>> IPython-dev at scipy.org
>>>>> http://mail.scipy.org/mailman/listinfo/ipython-dev
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Brian E. Granger
>>>> Cal Poly State University, San Luis Obispo
>>>> bgranger at calpoly.edu and ellisonbg at gmail.com
>>>> _______________________________________________
>>>> IPython-dev mailing list
>>>> IPython-dev at scipy.org
>>>> http://mail.scipy.org/mailman/listinfo/ipython-dev
>>>
>>> _______________________________________________
>>> IPython-dev mailing list
>>> IPython-dev at scipy.org
>>> http://mail.scipy.org/mailman/listinfo/ipython-dev
>>
>> _______________________________________________
>> IPython-dev mailing list
>> IPython-dev at scipy.org
>> http://mail.scipy.org/mailman/listinfo/ipython-dev
>
>
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev
>
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ipython-dev/attachments/20121218/187c49b2/attachment.html>
More information about the IPython-dev
mailing list