This is my first post, so I don't really know how to start... [DONE].
My goal is to improve the usability of the time tracking software included in KDE: KTimeTracker, just because I don't want to spend time to track it.
I'll try to expose the whole (good! It'll mean that I found a solution!) of the process I am following to get a working KDE Runner written in Python.
KDE4 (actually Plasma) brings a very useful tool called KRunner. It's a launcher that can be customized with our own actions. The plugins that implements this functionality are Runners.
So, after looking for a tutorial or example, I found the tutorials page for Plasma and, starting from the generic plasmoid tutorial, I developed a first version that looks like:
To highlight:
Then you have to summon KRunner (usually Alt+F2) and activate the new Runner in Settings->Plugins.
Wonderful! But... it doesn't work!
To be continued...
My goal is to improve the usability of the time tracking software included in KDE: KTimeTracker, just because I don't want to spend time to track it.
I'll try to expose the whole (good! It'll mean that I found a solution!) of the process I am following to get a working KDE Runner written in Python.
KDE4 (actually Plasma) brings a very useful tool called KRunner. It's a launcher that can be customized with our own actions. The plugins that implements this functionality are Runners.
So, after looking for a tutorial or example, I found the tutorials page for Plasma and, starting from the generic plasmoid tutorial, I developed a first version that looks like:
# -*- coding: utf-8 -*- from PyKDE4.plasma import Plasma import sys sys.path.append('/usr/share/kde4/apps/plasma_scriptengine_python') import plasma_importer class PythonRunner(Plasma.RunnerScript): importer = None def __init__(self, parent): super(PythonRunner, self).__init__(parent) if PythonRunner.importer is None: PythonRunner.importer = plasma_importer.PlasmaImporter() self.initialized = False def init(self): self.m_moduleName = str(self.runner().name()) self.plugin_name = self.m_moduleName.replace('-', '_') PythonRunner.importer.register_top_level(self.plugin_name, str(self.runner().package().path())) self.initialized = True return True def __dtor__(self): PythonRunner.importer.unregister_top_level(self.plugin_name) self.pyrunner = None def match(self, search): if not search.isValid(): return term = search.query() if term.length < 2: return m = Plasma.QueryMatch(self) m.setType(Plasma.QueryMatch.ExactMatch) m.setText('You said "%s"' % term) m.setData(term) search.addMatch(m) def run(self, search, action): print(action.data().toString()) def CreatePlugin(widget_parent, parent, component_data): return PythonRunner(parent)
To highlight:
- match(...) method receives the query from KRunner and fills the response with the found matches (if any).
- run(...) method receives the match that user selects in KRunner if it's one of the ours. Through the action.data() method, we reach the QVariant object stored in the match(...) method.
plasmapkg -t runner -i hello-python.zip
Then you have to summon KRunner (usually Alt+F2) and activate the new Runner in Settings->Plugins.
Wonderful! But... it doesn't work!
To be continued...
So... it just ain't work? ;)
ReplyDelete