<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>Le 21 sept. 2012 à 11:43, klo uo a écrit :</div><br class="Apple-interchange-newline"><blockquote type="cite"><div class="gmail_quote">On Fri, Sep 21, 2012 at 9:31 AM, Matthias BUSSONNIER wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">
<div><br><div>Yes, it is hard coded, not related to the qtconsole size.&nbsp;</div><div>You would have to update the width of the completion_widget when resizing windows for the number of columns.</div><div>This should not be too hard, just to bind the correct signal.</div>
<div>The number of rows could just be made a Trait to be configurable[*].&nbsp;</div><div><br></div><div>One of the reason to keep a "low" number of column is that with ultra wide qtconsole navigation become a pain.&nbsp;</div>
<div>For example, with 16 completions, with 4 by 4 any item is at Manhattan distance of less than 4 than any other, instead of 8 for 1x16</div><div>But I guess the current behavior could be improved for sure.</div></div></div>
</blockquote><div><br>I looked in "completion_widget.py" but can't see anything that I can change.<br>I expected that maybe number of rows (which is now 8) can be tweaked, as trying with columns sounds complicated.<br></div></div></blockquote><div><br></div>That would be 'width' parameter of SlidingInterval &nbsp;constructor. In&nbsp;completion_**html**.py , and not 8 but 6 because 8 = 6+2*1 where 6 and 1 should configurable.</div><div>6 being always 6 shown rows.</div><div>2*1 being potential '…' on top and '…' on bottom that are "allowed" to be completion result when near the edges.</div><div><br></div><div><br><blockquote type="cite"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; "><div style="word-wrap:break-word"><div><div>I assure you that is would not be as you more easily see the differences when items are order vertically.</div>
<div><br></div><div><br></div><div>=====================================</div><div>api.getString &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.getStrings</div><div>=====================================</div><div><br></div><div>vs</div><div>=====================================</div>
<div>api.getString</div><div>api.getStrings</div><div>=====================================</div><div><br></div><div>especially for non native english readers.&nbsp;</div><div><br></div><div>It would have been much more easier on implementation side to do so, but common shell like bash or zsh</div>
<div>came across the same problem and decided to do it by column so I think this is the good choice.&nbsp;</div></div></div></blockquote><div><br>If auto-complete functions were sorted alphabetically by row we would have seen full 3 columns with 24 functions, while currently we see just 2 items in 3rd column (in posted qtconsole example). For me it's easier to read alphabetically sorted table by row in this case when table is clipped<br></div></div></blockquote><div><br></div><div>No, because to do so the 3 colums would have been more than 80 characters wide.</div><div>Under the hood the colomnizer create the column to be sure it does not get wider than a give width.</div><div>and the visible items are not the only one taken into account.</div><div><br></div><div>as you can see here it's 86 chars width</div><div>====</div><div><font class="Apple-style-span" face="Courier">api.AdaptToWordStr &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.AllWordConfidences &nbsp; &nbsp; &nbsp;api.AnalyseLayout &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.Clear &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.ClearAdaptiveClassifier api.DeleteBlockList &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.DetectOS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.DumpPGM &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.End &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.FindLinesCreateBlockList api.FindRowForBox &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.GetBlockTextOrientations &nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetBoolVariable &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetBoxText &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetConnectedComponents &nbsp; &nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetCubeRecoContext &nbsp; &nbsp; &nbsp; api.GetDawg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.GetDoubleVariable &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetFeaturesForBlob &nbsp; &nbsp; &nbsp; api.GetHOCRText &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.GetInitLanguagesAsString &nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetIntVariable &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.GetIterator &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.GetLoadedLanguagesAsVector &nbsp;</font></div><div>====&nbsp;</div><div>by row, colonize would have given you 2 columns.</div><div>===</div><div><div><font class="Apple-style-span" face="Courier">api.AdaptToWordStr &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.AllWordConfidences &nbsp; &nbsp; &nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.AnalyseLayout &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.Clear &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.ClearAdaptiveClassifier &nbsp;api.DeleteBlockList &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.DetectOS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.DumpPGM &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.End &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.FindLinesCreateBlockList&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.FindRowForBox &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetBlockTextOrientations &nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetBoolVariable &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetBoxText &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetConnectedComponents &nbsp; api.GetCubeRecoContext &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetDawg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetDoubleVariable &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetFeaturesForBlob &nbsp; &nbsp; &nbsp; api.GetHOCRText &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetInitLanguagesAsString api.GetIntVariable &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">api.GetIterator &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetLoadedLanguagesAsVector</font></div><div>===</div></div><div><br></div><div>it is a tricky problem,&nbsp;</div><div>considering this :</div><div>====</div><div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb ccc</font></div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb ccc</font></div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb&nbsp;</font></div></div><div>===</div><div><br></div><div>wanting to decrease the number of rows from 5 to 4 to fill the last column will give you this :</div><div>===</div><div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb</font></div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bbbbbb</font></div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ccc</font></div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ccc</font></div><div><font class="Apple-style-span" face="Courier">aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbb&nbsp;</font></div><div><font class="Apple-style-span" face="Courier">===</font></div><div><font class="Apple-style-span" face="Courier">so almost twice as wide.&nbsp;</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><br></div></div><div><br></div><br><blockquote type="cite"><div class="gmail_quote"><div>
 <br></div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; "><div style="word-wrap:break-word"><div><div class="im"><blockquote type="cite">as that's how cursor TAB interaction has been made.<br>
</blockquote><div><br></div></div>[...]</div><div><br></div><div>Writing this was much more complicated to do than I first thought, but I'll be happy if you find a better solution than mine.&nbsp;</div>
</div></blockquote><div><br>I get you. I don't speak English too ;)<br>It's tricky when you think more about it. If I look for a function I can't remember it's name I usually "know/suspect" the beginning and using TAB to move through available function which aren't alphabetically sorted is unintuitive for sure. But hey, I didn't know that arrow keys work, so that's good thing to know ;)<br></div></div></blockquote><div><br></div><div>Yes, and one might want to also bing PgUP, PgDown, and shift tab...</div><br><blockquote type="cite"><div class="gmail_quote"><div>
</div><div><br><br>&nbsp;If you wan't to give a shot a making things configurable, or write your on completer-gui, take a look at&nbsp;</div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">
<div style="word-wrap:break-word"><div>ipython/IPython/frontend/qt/console/completion_html.py</div><div>ipython/IPython/frontend/qt/console/console_widget.py &nbsp;: &nbsp;L96</div><div><div class="im"><div><br></div></div></div></div>
</blockquote><div><br>Yet another tip. That's great. I also didn't know about it.<br>So plain mode is just like auto-completion in terminal console, while there is also drop-down control available!<br></div></div></blockquote><div><br></div><div>yes, plain mode is just the old mode, and drop-down has been around for a while.</div><br><blockquote type="cite"><div class="gmail_quote"><div>Thanks again Matthias for your always insightful support&nbsp;</div></div></blockquote><blockquote type="cite"><div class="gmail_quote"><div>Case closed</div></div></blockquote><div><br></div><div>You can still try to make row number configurable.</div><div>And columns which adapt with window width.</div><div><br></div><div>And we are not forgetting qtconsole.</div><div>We jus want a more feature/protocol 'stable' notebook.</div><div>Ultimately it would be great to have a qtconsole that use QtWebkit instead of QRichText Widget</div><div>But that would be a huge re-write.</div><div>--&nbsp;</div><div>Matthias</div></div></body></html>