Skip to main content

Dragonfly command API

Project description

Breathe

Build Status codecov

A convenient API for creating dragonfly grammars with automatic CCR (continuous command recognition).

  • Very quick start-up
  • Command activity can be controlled either using dragonfly contexts or using "enable" and "disable" commands.
  • All commands which match the current context may be chained together in any order in the same utterance.

Installation

pip install dfly-breathe

Instructions

  • If you are creating a command set from scratch, start by cloning the Breathe skeleton project, which will give you a file structure to start with.

Adding commands

from dragonfly import *
from breathe import Breathe, CommandContext

Breathe.add_commands(
    # Commands will be active either when we are editing a python file
    # or after we say "enable python". pass None for the commands to be global.
    context = AppContext(title=".py") | CommandContext("python"),
    mapping = {
        "for each"              : Text("for  in :") + Key("left:5"),
        "for loop"              : Text("for i in range():") + Key("left:2"),
        "from import"           : Text("from  import ") + Key("home, right:5"),
        "function"              : Text("def ():") + Key("left:3"),
        "(iffae | iffy)"        : Text("if :") + Key("left"),
        "iffae not"             : Text("if not :") + Key("left"),
        "import"                : Text("import "),
        "lambda"                : Text("lambda :") + Key("left"),
        "while loop"            : Text("while :") + Key("left"),
        "shell iffae"           : Text("elif :") + Key("left"),
        "shells"                : Text("else:"),
        "return"                : Text("return "),
        # ------------------------------------------------
        "method <snaketext>"    : Text("def %(snaketext)s(self):") + Key("left:2"),
        "function [<snaketext>]": Text("def %(snaketext)s():") + Key("left:2"),
        "selfie [<snaketext>]"  : Text("self.%(snaketext)s"),
        "pointer [<snaketext>]" : Text(".%(snaketext)s"),
        "classy [<classtext>]"  : Text("class %(classtext)s:") + Key("left"),
    },
    extras = [
        Dictation("snaketext", default="").lower().replace(" ", "_"),
        Dictation("classtext", default="").title().replace(" ", ""),
    ]
)

For full details of the available contexts, actions and extras you can use, see the dragonfly documentation.

Loading command files

Breathe provides the command "rebuild everything" for reloading all of your commands, allowing you to modify commands without restarting the engine. In order for this to work, your command files need to be loaded by giving your directory structure to Breathe.load_modules().

For example, given a directory set up like this:

|   _main.py
|   __init__.py
+---my_commands
|   |   __init__.py
|   +---apps
|   |       chrome.py
|   |       notepad.py
|   |       __init__.py
|   +---core
|   |       alphabet.py
|   |       keys.py
|   |       __init__.py
|   +---language
|   |       c.py
|   |       python.py
|   |       __init__.py

Inside _main.py, the file which will be loaded by the engine, we load all of our command files by passing a dictionary with keys representing folder names and values being either a single module to import, a list of modules to import, or another dictionary. Like so:

from breathe import Breathe

Breathe.load_modules(
    {
        "my_commands": {
            "apps": ["chrome", "notepad"],
            "language": ["python", "c"],
            "core": ["keys", "alphabet"],
        }
    }
)

Given this setup, calling the "rebuild everything" command will reload all of your command files, making any changes available.

Custom top level commands

Advanced feature, if you are just getting started you should ignore this.

Top level commands allow you to embed sequences of breathe CCR commands inside other commands. This gives finer control over the way in which commands are recognised and executed.

Top level commands should be added in a separate add_commands call with the top_level option set to True. A couple of new elements - Exec and CommandsRef - are required to control them.

For example in the following, the first command implements "greedy" dictation by creating a top level command which recognises between zero and twelve of the commands which are active in the current context, followed by a dictation command which will consume the rest of the utterance. The second allows an arbitrary sequence of commands to be repeated a given number of times.

from dragonfly import *
from breathe import Breathe, CommandsRef, Exec

Breathe.add_commands(
    None,
    {
        "[<sequence_of_commands>] dictate <text>":
            Exec("sequence_of_commands") + Text("%(text)s"),
        "<sequence_of_commands> and repeat that <n> times":
            Exec("sequence_of_commands") * Repeat("n"),
    },
    [
        Dictation("text"),
        IntegerRef("n", 1, 100),
        CommandsRef("sequence_of_commands", 12)
    ],
    top_level=True
)

Examples

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

dfly-breathe-0.2.4.tar.gz (12.2 kB view details)

Uploaded Source

Built Distributions

dfly_breathe-0.2.4-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

dfly_breathe-0.2.4-py2-none-any.whl (16.2 kB view details)

Uploaded Python 2

File details

Details for the file dfly-breathe-0.2.4.tar.gz.

File metadata

  • Download URL: dfly-breathe-0.2.4.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for dfly-breathe-0.2.4.tar.gz
Algorithm Hash digest
SHA256 85bb1425439130c644c379a948084cab2fea3ecc235300fb317372f28b186440
MD5 755b5ee961fbe345fd0b1549e421affe
BLAKE2b-256 84ba0db9aab615f317bcf8a849de2bab2dc4f0ce64983a2fbafcb4cb5f732256

See more details on using hashes here.

File details

Details for the file dfly_breathe-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: dfly_breathe-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for dfly_breathe-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 15eb25884c2e838c59e857b50ad8462206e555b9a308cce93f4d0b9e3ce7d241
MD5 7e84bba90f11f103ad91cc594257ca93
BLAKE2b-256 1aed80bd7ad6483302f448ed7fa084163c61f4ab6fa46d0aacaec1ff45e945a7

See more details on using hashes here.

File details

Details for the file dfly_breathe-0.2.4-py2-none-any.whl.

File metadata

  • Download URL: dfly_breathe-0.2.4-py2-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for dfly_breathe-0.2.4-py2-none-any.whl
Algorithm Hash digest
SHA256 1e5be5706118b767737a2461a06eb349eb03bd428e6e10eb41a4f9b73855db76
MD5 680c1dab267e05841a78948c0647170b
BLAKE2b-256 6f7508f4af56b4507a21f97bba5d72d6cf2f3565eb57d1dc98ac8010453588c9

See more details on using hashes here.

Supported by

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