Skip to main content

Execute arbitrary command from a Python dictionary

Project description

plover-python-dictionary-cmd

PyPI

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.

What problem does this plugin solve?

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.

The solution

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)  # or: f.str_with_args()

As an extra bonus, you get access to the engine object inside the function f above.

Extra

f.str_with_args() works as follows: f.str_with_args(1, 2) returns a string, which when interpreted as a Plover command and executed, will call f(engine, 1, 2).

As such, you can also modify the code above as follows:

@plover_python_dictionary_cmd.register
def f(engine, url):
    webbrowser.open(url)

def lookup(key):
    if key == ("SKWR-F",):
        return f.str_with_args("https://www.openstenoproject.org/")

Internal implementation detail

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plover_python_dictionary_cmd-0.0.1.tar.gz (15.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

plover_python_dictionary_cmd-0.0.1-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file plover_python_dictionary_cmd-0.0.1.tar.gz.

File metadata

File hashes

Hashes for plover_python_dictionary_cmd-0.0.1.tar.gz
Algorithm Hash digest
SHA256 b0e70caeb44c0aa9a16dc361245117ccccf3c0e8c606ef4836395cbf66fc7f0b
MD5 f89c5b8f2092c76036d5ec8e6b29adba
BLAKE2b-256 9fa152c8519466b9ecf5bccdd860c50e67195fceb9221a88f51358ef57765c37

See more details on using hashes here.

File details

Details for the file plover_python_dictionary_cmd-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for plover_python_dictionary_cmd-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e5a6ad96785860bfc4edf90bcd4e109f12c971e2594b0435ec8ea0be0b6cb723
MD5 d0d9e0cdeb28bbfb4c44e7bbd4839b09
BLAKE2b-256 129e2e80092a622f3d307e47f2d1ad91a50275b94e42736caca1b4ced94232df

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page