<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 à 06:12, klo uo a écrit :</div><br class="Apple-interchange-newline"><blockquote type="cite">This is example for auto-completion in IPython terminal console:<br>========================================<br><span style="font-family:courier new,monospace">In [3]: api.<br>api.AdaptToWordStr &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.GetMutableIterator &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.PrintVariables<br>
api.AllWordConfidences &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.GetPageSegMode &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.ProcessPage<br>api.AnalyseLayout &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetRegions &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.ProcessPages<br>api.Clear &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetStringVariable &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.ReadConfigFile<br>
api.ClearAdaptiveClassifier &nbsp; &nbsp; &nbsp; &nbsp;api.GetStrips &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.ReadDebugConfigFile<br>api.DeleteBlockList &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetTextDirection &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.Recognize<br>api.DetectOS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.GetTextlines &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.RecognizeForChopTest<br>
api.DumpPGM &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetThresholdedImage &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.RunAdaptiveClassifier<br>api.End &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetThresholdedImageScaleFactor api.SetDebugVariable<br>api.FindLinesCreateBlockList &nbsp; &nbsp; &nbsp; api.GetUNLVText &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.SetImage<br>
api.FindRowForBox &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetUTF8Text &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.SetInputName<br>api.GetBlockTextOrientations &nbsp; &nbsp; &nbsp; api.GetUnichar &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.SetOutputName<br>api.GetBoolVariable &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.GetVariableAsString &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.SetPageSegMode<br>
api.GetBoxText &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.GetWords &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.SetRectangle<br>api.GetConnectedComponents &nbsp; &nbsp; &nbsp; &nbsp; api.Init &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.SetSourceResolution<br>api.GetCubeRecoContext &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.InitForAnalysePage &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.SetVariable<br>
api.GetDawg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.InitLangMod &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.TesseractRect<br>api.GetDoubleVariable &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.InitTruthCallback &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.Version<br>api.GetFeaturesForBlob &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.IsValidWord &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.oem<br>
api.GetHOCRText &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.MakeTBLOB &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.set_min_orientation_margin<br>api.GetInitLanguagesAsString &nbsp; &nbsp; &nbsp; api.MakeTessOCRRow &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.tesseract<br>api.GetIntVariable &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.MeanTextConf &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; api.this<br>
api.GetIterator &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;api.NormalizeTBLOB<br>api.GetLoadedLanguagesAsVector &nbsp; &nbsp; api.NumDawgs</span><br>========================================<br><br>This is in IPython qtconsole:<br>========================================<br>
<span style="font-family:courier new,monospace">In [3]: api.<br>AdaptToWordStr &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GetUTF8Text &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tesseract<br>AllWordConfidences &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GetUnichar &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;this<br>AnalyseLayout &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GetVariableAsString &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br>
Clear &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GetWords &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br>ClearAdaptiveClassifier &nbsp; &nbsp; &nbsp; &nbsp; Init &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br>DeleteBlockList &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InitForAnalysePage &nbsp;<br>DetectOS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InitLangMod &nbsp; &nbsp; &nbsp; &nbsp; <br>
DumpPGM &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InitTruthCallback &nbsp; <br>... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ...<br></span>========================================<br><br>I believe it's because of the initial size of IPython qtconsole window upon startup, which I resized afterwards before entering commands, but it had no effect.<br></blockquote><div><br></div><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><br><blockquote type="cite">
Also in qtconsole we can use TAB once again (after evoking auto-completion) and enter in some kind of table mode, which traverses by row while table is made alphabetical by column. It would be more intuitive when table would be generated alphabetically by row, </blockquote><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><br><blockquote type="cite">as that's how cursor TAB interaction has been made.<br></blockquote><div><br></div>There is no good answer with how tab works.&nbsp;</div><div>The behavior I came up with is quite tricky</div><div><br></div><div><div>you might have seen that when going over the</div><div>(1) edge on right it goes to next line,&nbsp;</div><div>(2) at the end of a column with arrow it goes to next column.</div></div><div><br></div><div>The problem here, is that when you have few completion (one line).</div><div>You obviously want tab to cycle through your completions.&nbsp;</div><div><br></div><div>So either you have it go horizontally, or vertically.&nbsp;</div><div>Well obviously if vertical you want (2) otherwise you are stuck with the current completion when pressing tab.</div><div><br></div><div>But this come with 2 drawbacks.&nbsp;</div><div>&nbsp; * First is that sometime tab make the cursor go horizontally (one completion line) , sometime vertically (several line completion),&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and trust me your brain get confused and your visual memory hurts a lot.&nbsp;</div><div>&nbsp; * with several line completion (lets say 30) keeping tab press make the completion scroll, so it's unreadable</div><div><br></div><div>But his is what zsh does, and it drives (at least me) crazy.</div><div><br></div><div>Horizontal does indeed not cycle alphabetically, but is it really useful when you look for something ?</div><div>You can still use the arrow keys if you want to move vertically.</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><br></div><div>If you wan't to give a shot a making things configurable, or write your on completer-gui, take a look at&nbsp;</div><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><br></div><div><br></div><blockquote type="cite">
Anyhow, can I configure qtconsole to roll more candidates on auto-completion?
</blockquote><div>Well, for now you will have to digg in the code a little.</div><div>but keep us informed or send a PR if you get something, or need more pointers.&nbsp;</div><div>--&nbsp;</div><div>Matthias</div><div><br></div><br><div><br></div><div>[*] I'm not sure it will be strait forward to make it configurable as it inherit from QWidget, and you will have to set the metaclass to something like &nbsp;MetaQObjectHasTraits</div><br><blockquote type="cite">_______________________________________________<br>IPython-User mailing list<br><a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>http://mail.scipy.org/mailman/listinfo/ipython-user<br></blockquote></div><br></body></html>