[Qgis-developer] [New Feature] - AutoCompletion for QGIS Python Console based on QScintilla2

Salvatore Larosa lrssvtml at gmail.com
Tue Sep 4 15:31:40 PDT 2012


Hi Larry,
thank you so much this is a great feedback! (sorry if my reply is so short!)
I will carefully read your mail.....there are plenty of good advice!

I'll do some tests on the basis of what you told me and let you know!

All the best!

-SL

2012/9/4 Larry Shaffer <larrys at dakotacarto.com>:
> Hi Salvatore,
>
> On Tue, Sep 4, 2012 at 9:13 AM, Salvatore Larosa <lrssvtml at gmail.com> wrote:
>> Hello everyone, I am working to implement the auto complete in QGIS
>> python console.
>> At the time, I came to this result: [1]
>
> That looks great already! Very welcome addition.
>
>> Still a few things missing:
>> 1) run command with multi-line text
>> 2) styled text for errors, traceback, message etc.
>
> If you're thinking of tinkering with the traceback output dialog,
> please consider some of the suggestions put forth here [0], which
> include more complete frame info, like variables, etc. There is
> already good sample code for this in the Django project debug output
> (as mentioned by Martin)[1].
>
> For styling purposes, it may be possible to output the traceback in
> HTML, like with Django, then style it with CSS in a QWebView (see
> Martin's initial response to my post).
>
> [0] http://osgeo-org.1560.n6.nabble.com/Changes-to-python-utils-py-td4977090.html
> [1] https://github.com/django/django/blob/master/django/views/debug.py
>
>> 3) fix up events when keys are pressed (keyPressEvent)
>> 4) other minor errors.
>>
>> Basically I changed the class QTextEdit with QsciScintilla using
>> pieces of code from [2]
>> and, for API syntax, the files provided by Larry Shaffer (thanks).
>>
>> I'm having some difficulties as disable the undo/redo and I can not
>> use styles to the text (font, color, etc) if the Lexer is enabled!
>
> Concerning undo, it looks like you can't turn it off, but maybe you
> can just make sure its buffer is always emptied if it contains
> anything instead? (not tested)
>
> Qsci-object.SendScintilla(QsciScintilla.SCI_EMPTYUNDOBUFFER)
>
>
> Concerning styles, some are set for the Qsci object and some are set
> for its currently bound lexer (I assume you are using
> QsciLexerPython). I believe styles can be adjusted either before the
> lexer is applied or after (though you may have to clear them first, if
> after).
>
> For examples of doing this see Eric4 source here [0], specifically
> __setTextDisplay() method for styling Qsci object at line #2156 and
> here[1] for info on setting lexer style blocks. For the lexer styles,
> you instantiate the lexer then override the styles you want using
> their lexer-specific enum value as a reference (e.g. keyword, number,
> operator, etc.) [2], then apply the lexer to the Qsci object:
>
> lexer-object.setColor(QColor, 1) # for setting color of operators
>
> If you change the coloring styles, I believe you lastly need to call
> Qsci-object.recolor().
>
> [0] http://die-offenbachs.homelinux.org:48888/viewvc/eric4%20IDE/eric4/trunk/QScintilla/MiniEditor.py?view=markup
> [1] http://die-offenbachs.homelinux.org:48888/viewvc/eric4%20IDE/eric4/trunk/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py?view=markup
> [2] http://www.riverbankcomputing.co.uk/static/Docs/QScintilla2/classQsciLexer.html
> , http://www.riverbankcomputing.co.uk/static/Docs/QScintilla2/classQsciLexerPython.html
>
>
>> Any feedback and help are welcome!
>
> I did some research on QScintilla2 APIs and QGIS supported platforms
> and their distros. I came to the conclusion that, at this time, the
> QScintilla2 API to use is 2.4.5 (no higher). This supports as far back
> as Natty on Ubuntu desktop, but is possibly even a bit too new for
> some distros like CentOS. You can download the docs as part of the
> source here [0].
>
> [0] http://packages.ubuntu.com/source/natty/qscintilla2
>
>
> Also, concerning the compiled .api files, it would be very
> advantageous to have the Python 2.7 .api mixed in there as well (if
> it's not). That api file should be included in the current source of
> QScintilla2 ( <src-dir>/qsci/api/python or
> /usr/local/Qt4.?/qsci/api/python/ ). Not sure if you included a PyQt4
> api as well, but that should probably be based off of Qt 4.6 or 4.7,
> depending upon current unfinished(?) decision on QGIS base Qt version
> to support with next release.
>
> I have most of these api files archived, if you need any. I have
> tested the Qsci editor in QGIS with over 54,000 compiled api lines
> with no appreciable slow down, though the list of possible completions
> gets too long.
>
> In my Plugin Editor plugin, I currently store a user-generated
> compiled api file in ~/.config/QGIS_PluginEditor/python.pap [0].
> However, if it were QGIS-generic, say, ~/.config/qgis_apis/python.pap
> instead, anyone who uses my plugin or Eric4 can compile a custom
> python.pap and place it in ~/.config/qgis_apis/python.pap to
> user-override the console's auto-completion and call tips (very
> handy!). Most Python packages (osgeo, for example) can be loaded into
> Eric4 and have a Qsci-compatible api file generated.
>
> [0] http://dl.dropbox.com/u/4058089/qgis/editor_apis.png
>
> Regards,
>
> Larry
>
>
>> Regards,
>>
>> -SL
>>
>> [1] - http://lrssvt.ns0.it/autocompletion.ogv
>> [2] - https://code.google.com/p/pydee/
>>
>> --
>> Salvatore Larosa
>> linkedIn: http://linkedin.com/in/larosasalvatore
>> twitter: @lrssvt
>> skype: s.larosa
>> IRC: lrssvt on freenode
>> _______________________________________________
>> Qgis-developer mailing list
>> Qgis-developer at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/qgis-developer



-- 
Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode


More information about the Qgis-developer mailing list