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.zipThen 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