[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