Execute arbitrary command from a Python dictionary.
Warning: While this plugin can do everything what a command plugin can, this should only be used for personal usage. If the usage is sufficiently general, it's recommended to make a Plover command plugin instead.
See also: plover-run-shell
, plover-run-py
, plover-open-url
.
First, this assumes you know what a Python dictionary is.
Maybe you want to write a dictionary that looks like this:
LONGEST_KEY = 1
def lookup(key):
if key == ("SKWR-F",):
return "{PLOVER:OPEN_URL:https://www.openstenoproject.org/}"
The {PLOVER:OPEN_URL:…}
obviously opens the said URL, using Plover Open URL plugin.
Problem: what if the task you want to do is not already covered by some command plugin?
While you can certainly write a new command plugin, that is rather time-consuming.
The following will not work:
import webbrowser
LONGEST_KEY = 1
def lookup(key):
if key == ("SKWR-F",):
webbrowser.open("https://www.openstenoproject.org/")
It's because the dictionary may be looked up multiple times.
Write the plugin like the following.
import webbrowser
import plover_python_dictionary_cmd
LONGEST_KEY = 1
@plover_python_dictionary_cmd.register
def f(engine):
webbrowser.open("https://www.openstenoproject.org/")
def lookup(key):
if key == ("SKWR-F",):
return str(f)
As an extra bonus, you get access to the engine
object inside the function f
above.
It uses a global lookup table to store the reference to the function f
. Then str(f)
as above
returns something like {plover:python_dictionary_cmd:123456}
where 123456
is some unique ID.
Don't rely on this implementation detail.