Question for PythonScript users
-
the first time I have to thank google for caching :-)
I’m still working to get a python3 scripting interface for npp.
Most of the part already works but now the fancy stuff needs to be addressed.
One open point on my list addresses callbacks.The question I have is how do you use and clear callbacks currently.
The issue I’m facing is that if I run a script to register a callback function it is hard
to identify the registered callback function if I want to clear it from another script.Currently I’m saving the hash of a func.code.code object and compare it once
a clearCallback request comes in.
But this, obviously has the drawback if one wants to register the same function
multiple times with the same notification.
But I’m questioning that this makes sense at all - so are there other constructs
you might think of which could break your code when I’m doing such comparison?
Or does it make sense to register the same function multiple times for the same notification? -
@Ekopalypse said in Question for PythonScript users:
Or does it make sense to register the same function multiple times for the same notification?
I’m a fairly extensive Pythonscripter and I’ve never needed to do this, so I’d say NO.
But maybe there is a use for it…for someone…
-
@Ekopalypse I don’t use callback even it’s very powerfull, I always trigger my scripts through shortcut.
I’m very interrested in your python script implementation. Have you forked the original one our did you rewrite a new one ? Are you on github ?
Thanks -
Thx for the input.
I’m writing a completely new version as my c/c++ skills are terrible aka non-existant
I’m using cffi for creating the necessary code for the plugin and cpython interpreter.
Everything else is written in python3.7 (actually should work with all versions >3.4 if compiled with it).
Surprisingly, it is often faster than the current pythonscript version and
can use pip (not officially supported but seems to work) on embedded python package.I do have an account on github and it is planned to release it to github
once I have all important functionality, currently available in pythonscript, covered.Currently I do have two issues I want to have fixed before releasing the
first version, namely the two in the important section below.Current open points
{IMPORTANT (no release until those are done) - editor object used in scripts is fixed !! AARRRGGGG - boost::regex = python re (not sure if boost::regex can be implemented at all) cython seems to be able to use boost templates - investigating. ;;} {MEDIUM (should have points but not worth to stop releasing version) - create tests for notepad, scintilla and console objects - create sphinx docs - console object needs run combo/textbox - consider using pyshell(?) - editor callback factory needs to be coded otherwise each instance holds it own list of subscribers - maybe move to plugin.py (!?) - console hotspot functionality missing ;;} {LOW (nice to have but does not affect functionality) - startup.py (really needed? __init__.py might do the job as well) - create readme - different console output colors - console configuration gui - reconsider using cython for notepad and scintilla objects - PS functions which do return int but docu and iface suggest it shouldn't setSelection int None <-- PS error? addText int None <-- PS error? addSelection int None <-- PS error? changeInsertion int None <-- PS error? setStylingEx int None <-- PS error? appendText int None <-- PS error? addStyledText int None <-- PS error? copyText int None <-- PS error? write int None <-- PS error? - list of messages not implemented yet as wasn't implented by pythonscript either NPPM_GETCURRENTSCINTILLA NPPM_MODELESSDIALOG NPPM_DMMSHOW NPPM_DMMHIDE NPPM_DMMUPDATEDISPINFO NPPM_DMMREGASDCKDLG NPPM_DMMVIEWOTHERTAB NPPM_SETMENUITEMCHECK NPPM_ADDTOOLBARICON NPPM_DMMGETPLUGINHWNDBYNAME NPPM_MSGTOPLUGIN NPPM_SETBUFFERLANGTYPE NPPM_GETBUFFERENCODING NPPM_GETSHORTCUTBYCMDID NPPM_REMOVESHORTCUTBYCMDID NPPM_GETPLUGINHOMEPATH NPPM_GETFULLCURRENTPATH NPPM_GETCURRENTDIRECTORY NPPM_GETFILENAME NPPM_GETNAMEPART NPPM_GETEXTPART NPPM_GETCURRENTWORD NPPM_GETFILENAMEATCURSOR NPPM_GETCURRENTLINE NPPM_GETCURRENTCOLUMN NPPM_GETNPPFULLFILEPATH ;;} {DONE - scintilla wrapped - assert scintilla functions - notepad wrapped - assert notepad functions - console wrapped - assert console functions - dynamic menu creation, like adding an menu item when creating a new script ;;} {INFO pymlreplace (deprecated function) pyreplace (deprecated function) no editor.flash (notepad has flashWindow which from my point of view is better) no editor.createLoader function, seems that it doesn't make sense from scripting point of view editor.search returns a tuple (start_position, end_position) editor.research and rereplace are currently implemented using python re engine. editor.callbacks are, like notepad.callbacks synchronous console.encoding is a property, not a function anymore (python3 related) no console.softspace as softspace is not used in python3 print function anymore console.run = console.execute (threading uses run) notepad.outputDebugString has not been migrated ;;
-
Just to illustrate (and to test the new picture upload functionality :-) what
the first important open point is.
The callback mechanism itself works, the problem is, that the editor object,
once it gets created WIHTIN an import statement, is fixed and not dynamic anymore.
Meaning that if editor pointed to editor1 at the time it was imported
it will always point to editor1, regardless if one does editor=editor2.
But if a script gets executed (BUT NOT IMPORTED) then editor points to either editor1 or editor2. Hmmmm ??? -
@Ekopalypse Thanks very much for your involvement.
Once you’are ready for beta testing, you can contact me.