---
name: "basic"
description: >-
  The basic mode is active by default
  and is used for basic commands common to most programs and activities.
biases:
  # Recognizers sometimes inject certain words for some of the commands.
  # The following biases reduce the confidence score for these phrases.
  - expression: '^the\b' # vosk frequently injects "the" at the beginning of an utterance
    factor: 0.9
  - expression: '\bgo up the \w'
    factor: 0.5
  - expression: '\bgo down the \w'
    factor: 0.5
  - expression: '\bgo left the \w'
    factor: 0.5
  - expression: '\bgo right the \w'
    factor: 0.5
  - expression: '\bthe go up \w'
    factor: 0.5
  - expression: '\bthe go down \w'
    factor: 0.5
  - expression: '\bthe go left \w'
    factor: 0.5
  - expression: '\bthe go right \w'
    factor: 0.5
  - expression: '\bgo up a \w'
    factor: 0.5
  - expression: '\bgo down a \w'
    factor: 0.5
  - expression: '\bgo left a \w'
    factor: 0.5
  - expression: '\bgo right a \w'
    factor: 0.5
  - expression: '\bgo up for him\b'
    factor: 0.5
  - expression: '\bgo down for him\b'
    factor: 0.5
  - expression: '\bgo left for him\b'
    factor: 0.5
  - expression: '\bgo right for him\b'
    factor: 0.5
  - expression: '\bgo up at \w'
    factor: 0.5
  - expression: '\bgo down at \w'
    factor: 0.5
  - expression: '\bgo left at \w'
    factor: 0.5
  - expression: '\bgo right at \w'
    factor: 0.5
  - expression: '\bi go up\b'
    factor: 0.5
  - expression: '\bi go down\b'
    factor: 0.5
  - expression: '\bi go left\b'
    factor: 0.5
  - expression: '\bi go right\b'
    factor: 0.5
  - expression: '\bgo up to \w'
    factor: 0.5
  - expression: '\bgo down to \w'
    factor: 0.5
  - expression: '\bgo left to \w'
    factor: 0.5
  - expression: '\bgo right to \w'
    factor: 0.5
  - expression: '\bgo rite aid\b'
    factor: 0.5
  - expression: '\bescape the \w'
    factor: 0.5
  - expression: '\bescape a \w'
    factor: 0.5
initiallyActive: true
exclusive: false
commands:

  # Initiate screen analyzer mode

  - name: "show"
    description: >-
      Activates the "screen analyzer" exclusive mode to control the mouse.
      Once a label has been selected, a left click is performed at the label.
    functions:
      - name: "toggleMode"
        fixedArguments:
          - "on"
          - "screen analyzer"
      - name: "openMouseGuide"
        fixedArguments:
          - "screen"
          - "left"
  - name: "show double"
    description: >-
      Activates the "screen analyzer" exclusive mode to control the mouse.
      Once a label has been selected, a left double click is performed at the label.
    alternates:
      - "show w"
    functions:
      - name: "toggleMode"
        fixedArguments:
          - "on"
          - "screen analyzer"
      - name: "openMouseGuide"
        fixedArguments:
          - "screen"
          - "double"
  - name: "show middle"
    description: >-
      Activates the "screen analyzer" exclusive mode to control the mouse.
      Once a label has been selected, a middle click is performed at the label.
    functions:
      - name: "toggleMode"
        fixedArguments:
          - "on"
          - "screen analyzer"
      - name: "openMouseGuide"
        fixedArguments:
          - "screen"
          - "middle"
  - name: "show right"
    description: >-
      Activates the "screen analyzer" exclusive mode to control the mouse.
      Once a label has been selected, a right click is performed at the label.
    alternates:
      - "show rate"
    functions:
      - name: "toggleMode"
        fixedArguments:
          - "on"
          - "screen analyzer"
      - name: "openMouseGuide"
        fixedArguments:
          - "screen"
          - "right"
  - name: "show hover"
    description: >-
      Activates the "screen analyzer" exclusive mode to control the mouse.
      Once a label has been selected, the mouse is moved to the label.
    alternates:
      - "show hoover"
      - "show huffer"
    functions:
      - name: "toggleMode"
        fixedArguments:
          - "on"
          - "screen analyzer"
      - name: "openMouseGuide"
        fixedArguments:
          - "screen"
  - name: "show start drag"
    description: >-
      Activates the "screen analyzer" exclusive mode to control the mouse.
      Once a label has been selected, the position for starting a drag is marked.
    alternates:
      - "show start drug"
    functions:
      - name: "toggleMode"
        fixedArguments:
          - "on"
          - "screen analyzer"
      - name: "openMouseGuide"
        fixedArguments:
          - "screen"
          - "start"
  - name: "show finish drag"
    description: >-
      Activates the "screen analyzer" exclusive mode to control the mouse.
      Once a label has been selected, the mouse is dragged from the
      previously marked location to the selected label location.
    alternates:
      - "show finished drag"
      - "show finish drug"
      - "show finnish drug"
      - "show finished drug"
      - "show finished reg"
      - "show finnish drag"
    functions:
      - name: "toggleMode"
        fixedArguments:
          - "on"
          - "screen analyzer"
      - name: "openMouseGuide"
        fixedArguments:
          - "screen"
          - "finish"

  # Initiate mouse grid

  - name: "mouse grid"
    description: >-
      Activates the "mouse grid" exclusive mode for mouse control.
    alternates:
      - "mills grid"
      - "mel's grid"
      - "males grid"
      - "mousegrid"
      - "male scribd"
    functions:
      - name: "toggleMode"
        fixedArguments:
          - "on"
          - "mouse grid"
      - name: "openMouseGuide"
        fixedArguments:
          - "grid"

  # Initiate mouse pixels mode

  - name: "mouse position"
    description: >-
      Activates the "mouse pixels" exclusive mode to control the mouse.
    alternates:
      - "mel's position"
    functions:
      - name: "toggleMode"
        fixedArguments:
          - "on"
          - "mouse pixels"
      - name: "openMouseGuide"
        fixedArguments:
          - "pixels"

  # Basic mouse control

  - name: "mouse go up"
    description: >-
      Moves the mouse up.
      The first utterance argument is the number of pixels to move.
    alternates:
      - "moscow up"
      - "mel's go up"
      - "mills go up"
      - "mouse geaux up"
    functions:
      - name: "mouseMove"
        fixedArguments:
          - "up"
        utteranceArguments: 1
  - name: "mouse go down"
    description: >-
      Moves the mouse down.
      The first utterance argument is the number of pixels to move.
    alternates:
      - "moscow down"
      - "mel's go down"
      - "mills go down"
      - "mouse geaux down"
    functions:
      - name: "mouseMove"
        fixedArguments:
          - "down"
        utteranceArguments: 1
  - name: "mouse go left"
    description: >-
      Moves the mouse left.
      The first utterance argument is the number of pixels to move.
    alternates:
      - "moscow left"
      - "mel's go left"
      - "mills go left"
      - "mouse geaux left"
    functions:
      - name: "mouseMove"
        fixedArguments:
          - "left"
        utteranceArguments: 1
  - name: "mouse go right"
    description: >-
      Moves the mouse right.
      The first utterance argument is the number of pixels to move.
    alternates:
      - "moscow right"
      - "moscow rate"
      - "mel's go right"
      - "mills go right"
      - "mouse geaux right"
      - "mouse go write"
      - "mouse go writer"
      - "mouse go rate"
    functions:
      - name: "mouseMove"
        fixedArguments:
          - "right"
        utteranceArguments: 1
  - name: "mouse click"
    description: >-
      Left clicks the mouse at its current position.
    alternates:
      - "mouse quick"
      - "mills click"
      - "mouse cook"
      - "mouse clicker"
    functions:
      - name: "mouseClick"
        fixedArguments:
          - "left"
  - name: "mouse double click"
    description: >-
      Double left clicks the mouse at its current position.
    alternates:
      - "mouse double-click"
      - "mouse doubleclick"
    functions:
      - name: "mouseClick"
        fixedArguments:
          - "double"
  - name: "mouse middle click"
    description: >-
      Middle clicks the mouse at its current position.
    functions:
      - name: "mouseClick"
        fixedArguments:
          - "middle"
  - name: "mouse right click"
    description: >-
      Right clicks the mouse at its current position.
    alternates:
      - "mouse write click"
      - "mouse right-click"
    functions:
      - name: "mouseClick"
        fixedArguments:
          - "right"
  - name: "mouse go to"
    description: >-
      Moves the mouse to the provided position coordinates.
      The first utterance argument is the x pixel position.
      The second utterance argument is ignored.
      This argument is only needed to improve recognition of a sequence of two numbers.
      The third utterance argument is the y pixel position.
      For example: "mouse go to five hundred other five hundred".
      If you frequently click the same location of the screen for certain actions,
      you may find it useful to create variations of this command
      that provide x and y coordinates as fixed arguments.
    alternates:
      - "mills go to"
      - "mel's go to"
      - "males go to"
    functions:
      - name: "mouseGo"
        utteranceArguments: 3
  - name: "hold mouse"
    description: >-
      Holds the mouse left button down.
    alternates:
      - "hold mills"
      - "hold mel's"
      - "hold males"
    functions:
      - name: "mouseHold"
  - name: "release mouse"
    description: >-
      Releases the mouse left button from being held down.
    alternates:
      - "release mills"
      - "release mel's"
      - "release males"
      - "release smells"
    functions:
      - name: "mouseRelease"

  # Repeating keys

  - name: "tab"
    description: >-
      Presses the tab key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    alternates:
      - "tub"
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "tab"
        utteranceArguments: 1
  - name: "tab back"
    description: >-
      Presses the shift-tab key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    functions:
      - name: "keyHold"
        fixedArguments:
          - "shift"
      - name: "keyRepeat"
        fixedArguments:
          - "tab"
        utteranceArguments: 1
      - name: "keyRelease"
        fixedArguments:
          - "shift"
  - name: "backspace"
    description: >-
      Presses the backspace key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    alternates:
      - "back space"
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "backspace"
        utteranceArguments: 1
  - name: "delete"
    description: >-
      Presses the delete key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "delete"
        utteranceArguments: 1
  - name: "go up"
    description: >-
      Presses the up key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    alternates:
      - "geaux up"
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "up"
        utteranceArguments: 1
  - name: "go down"
    description: >-
      Presses the down key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    alternates:
      - "geaux down"
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "down"
        utteranceArguments: 1
  - name: "go donate"
    description: >-
      Presses the down key 8 times.
      This command exists to handle inaccurate recognition of "go down eight".
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "down"
          - "eight"
  - name: "go left"
    description: >-
      Presses the left key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    alternates:
      - "geaux left"
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "left"
        utteranceArguments: 1
  - name: "go downtown"
    description: >-
      This command executes when the recognizer hears "go downtown"
      when you say "go down ten".
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "down"
          - "10"
  - name: "go up button"
    description: >-
      This command executes when the recognizer hears "go up button"
      when you say "go up ten".
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "up"
          - "10"
  - name: "go right"
    description: >-
      Presses the right key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    alternates:
      - "go write"
      - "geaux right"
      - "go writer"
      - "go rate"
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "right"
        utteranceArguments: 1
  - name: "page up"
    description: >-
      Presses the pageup key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    alternates:
      - "page op"
      - "page of"
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "pageup"
        utteranceArguments: 1
  - name: "page down"
    description: >-
      Presses the pagedown key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    alternates:
      - "pagetown"
      - "peach town"
      - "peachtown"
      - "peach down"
      - "ph town"
      - "page town"
      - "paint town"
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "pagedown"
        utteranceArguments: 1
  - name: "repeat space"
    description: >-
      Presses the space key one or more times.
      The optional utterance argument is the number of times the key should be pressed.
      If the argument is not provided,
      the key is pressed once.
    functions:
      - name: "keyRepeat"
        fixedArguments:
          - "space"
        utteranceArguments: 1

  # Non-printing keys

  - name: "press escape"
    description: >-
      Presses the escape key.
    functions:
      - name: "keyPress"
        fixedArguments:
          - "escape"
  - name: "press f1"
    description: >-
      Presses the f1 key.
    alternates:
      - "press f one"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f1"
  - name: "press f2"
    description: >-
      Presses the f2 key.
    alternates:
      - "press f two"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f2"
  - name: "press f3"
    description: >-
      Presses the f3 key.
    alternates:
      - "press f three"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f3"
  - name: "press f4"
    description: >-
      Presses the f4 key.
    alternates:
      - "press f four"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f4"
  - name: "press f5"
    description: >-
      Presses the f5 key.
    alternates:
      - "press f five"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f5"
  - name: "press f6"
    description: >-
      Presses the f6 key.
    alternates:
      - "press f six"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f6"
  - name: "press f7"
    description: >-
      Presses the f7 key.
    alternates:
      - "press f seven"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f7"
  - name: "press f8"
    description: >-
      Presses the f8 key.
    alternates:
      - "press f eight"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f8"
  - name: "press f9"
    description: >-
      Presses the f9 key.
    alternates:
      - "press f nine"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f9"
  - name: "press f10"
    description: >-
      Presses the f10 key.
    alternates:
      - "press f ten"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f10"
  - name: "press f11"
    description: >-
      Presses the f11 key.
    alternates:
      - "press f eleven"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f11"
  - name: "press f12"
    description: >-
      Presses the f12 key.
    alternates:
      - "press f twelve"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "f12"
  - name: "go home"
    description: >-
      Presses the home key.
    functions:
      - name: "keyPress"
        fixedArguments:
          - "home"
  - name: "go end"
    description: >-
      Presses the end key.
    alternates:
      - "go and"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "end"
  - name: "control home"
    description: >-
      Presses the control-home keys.
    functions:
      - name: "keyPress"
        fixedArguments:
          - "control"
          - "home"
  - name: "control end"
    description: >-
      Presses the control-end keys.
    alternates:
      - "control and"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "control"
          - "end"

  # Printing non-letter keys

  - name: "tilda"
    description: >-
      Presses the ~ key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "~"
    spaceLeft: false
    spaceRight: false
  - name: "back tick"
    alternates:
      - "backtick"
      - "back tik"
      - "baktik"
      - "paktika"
      - "peptic"
      - "pectic"
      - "tactic"
    description: >-
      Presses the ` key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "`"
    spaceLeft: false
    spaceRight: false
  - name: "exclamation mark"
    description: >-
      Presses the ! key.
    alternates:
      - "exclamation point"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "!"
    spaceLeft: false
    spaceRight: true
  - name: "at sign"
    description: >-
      Presses the @ key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "@"
    spaceLeft: false
    spaceRight: false
  - name: "pound sign"
    description: >-
      Presses the \# key.
    alternates:
      - "hashtag"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "#"
    spaceLeft: false
    spaceRight: false
  - name: "dollar sign"
    description: >-
      Presses the $ key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "$"
    spaceLeft: true
    spaceRight: false
  - name: "percent sign"
    description: >-
      Presses the % key.
    alternates:
      - "per cent sign"
      - "present sun"
      - "present sign"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "%"
    spaceLeft: false
    spaceRight: true
  - name: "power sign"
    description: >-
      Presses the ^ key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "^"
    spaceLeft: false
    spaceRight: false
  - name: "ampersand"
    description: >-
      Presses the & key.
    alternates:
      - "and percent"
      - "empress and"
      - "amber sand"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "&"
    spaceLeft: false
    spaceRight: false
  - name: "star"
    description: >-
      Presses the * key.
    alternates:
      - "asterisk"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "*"
    spaceLeft: false
    spaceRight: false
  - name: "open parentheses"
    description: >-
      Presses the ( key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "("
    spaceLeft: true
    spaceRight: false
  - name: "close parentheses"
    description: >-
      Presses the ) key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - ")"
    spaceLeft: false
    spaceRight: true
  - name: "underscore"
    description: >-
      Presses the _ key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "_"
    spaceLeft: false
    spaceRight: false
  - name: "hyphen"
    description: >-
      Presses the - key.
    alternates:
      - "highfun"
      - "hyphens"
      - "huyfen"
      - "hi finn"
      - "how you feeling"
      - "harifen"
      - "huythin"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "-"
    spaceLeft: false
    spaceRight: false
  - name: "plus sign"
    description: >-
      Presses the + key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "+"
    spaceLeft: false
    spaceRight: false
  - name: "equal sign"
    description: >-
      Presses the = key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "="
    spaceLeft: false
    spaceRight: false
  - name: "open brace"
    description: >-
      Presses the { key.
    alternates:
      - "open breeze"
      - "open brees"
      - "open bruce"
      - "hoping brace"
      - "pope embrace"
      - "open praise"
      - "kopen brace"
      - "hope embrace"
      - "hoping brees"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "{"
    spaceLeft: true
    spaceRight: false
  - name: "close brace"
    description: >-
      Presses the } key.
    alternates:
      - "close breeze"
      - "close brees"
      - "closed priests"
      - "close priests"
      - "close breathe"
      - "close race"
      - "close praise"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "}"
    spaceLeft: false
    spaceRight: true
  - name: "open bracket"
    description: >-
      Presses the [ key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "["
    spaceLeft: true
    spaceRight: false
  - name: "close bracket"
    description: >-
      Presses the ] key.
    alternates:
      - "closed bracket"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "]"
    spaceLeft: false
    spaceRight: true
  - name: "pipe sign"
    description: >-
      Presses the | key.
    alternates:
      - "vertical bar"
      - "piper sign"
      - "paper sign"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "|"
    spaceLeft: false
    spaceRight: false
  - name: "backslash"
    description: >-
      Presses the \\ key.
    alternates:
      - "backsplash"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "\\"
    spaceLeft: false
    spaceRight: false
  - name: "colon"
    description: >-
      Presses the : key.
    alternates:
      - "colin"
      - "colen"
      - "cullen"
      - "cohen"
      - "kolin"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - ":"
    spaceLeft: false
    spaceRight: true
  - name: "semicolon"
    alternates:
      - "semi-colon"
      - "semi colon"
      - "send me colon"
    description: >-
      Presses the ; key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - ";"
    spaceLeft: false
    spaceRight: true
  - name: "open quote"
    description: >-
      Presses the " key, prefers space on the left.
    alternates:
      - "open quot"
      - "open quota"
      - "open quotation-mark"
      - "open kwoat"
      - "hoping quote"
      - "opening quote"
      - "hope and quote"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - '"'
    spaceLeft: true
    spaceRight: false
  - name: "close quote"
    description: >-
      Presses the " key, prefers space on the right.
    alternates:
      - "close quot"
      - "close quota"
      - "close quotation-mark"
      - "close kwoat"
      - "clothes growth"
      - "quill's quote"
      - "glows quote"
      - "well as quote"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - '"'
    spaceLeft: false
    spaceRight: true
  - name: "apostrophe"
    description: >-
      Presses the ' key.
    alternates:
      - "single quote"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "'"
    spaceLeft: false
    spaceRight: false
  - name: "apostrophe s"
    description: >-
      Types 's.
    alternates:
      - "apostrophe us"
      - "apostrophe yes"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "'s"
    spaceLeft: false
    spaceRight: true
  - name: "less than"
    description: >-
      Presses the < key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "<"
    spaceLeft: true
    spaceRight: true
  - name: "greater than"
    description: >-
      Presses the > key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - ">"
    spaceLeft: true
    spaceRight: true
  - name: "comma"
    description: >-
      Presses the , key.
    alternates:
      - "karma"
      - "kana"
      - "come a"
      - "c'mon"
      - "come up"
      - "comer"
      - "kama"
      - "cama"
      - "coma"
      - "come on"
      - "comme"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - ","
    spaceLeft: false
    spaceRight: true
  - name: "period"
    description: >-
      Presses the . key, prefers space on the right.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "."
    spaceLeft: false
    spaceRight: true
  - name: "dot"
    description: >-
      Presses the . key, prefers no space.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "."
    spaceLeft: false
    spaceRight: false
  - name: "question mark"
    description: >-
      Presses the ? key.
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "?"
    spaceLeft: false
    spaceRight: true
  - name: "slash"
    description: >-
      Presses the / key.
    alternates:
      - "slashed"
      - "slas"
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "/"
    spaceLeft: false
    spaceRight: false
  - name: "enter"
    description: >-
      Presses the enter key.
      The key is held for 200 milliseconds,
      which is sometimes useful to get visual feedback
      from a user interface control responding to the keystroke.
    alternates:
      - "new line"
      - "newline"
      - "penta"
      - "pender"
      - "hunter"
      - "cantor"
      - "panther"
      - "pentre"
      - "venter"
    functions:
      - name: "keyHold"
        fixedArguments:
          - "enter"
      - name: "sleep"
        fixedArguments:
          - "200"
      - name: "keyRelease"
        fixedArguments:
          - "enter"
  - name: "space"
    description: >-
      Presses the space key.
      The key is held for 200 milliseconds,
      which is sometimes useful to get visual feedback
      from a user interface control responding to the keystroke.
    alternates:
      - "spaced"
    functions:
      - name: "keyHold"
        fixedArguments:
          - "space"
      - name: "sleep"
        fixedArguments:
          - "200"
      - name: "keyRelease"
        fixedArguments:
          - "space"
  - name: "double space"
    description: >-
      Presses the space key twice.
    alternates:
      - "double spaced"
      - "double-spaced"
    functions:
      - name: "keyPress"
        fixedArguments:
          - "space"
      - name: "keyPress"
        fixedArguments:
          - "space"

  # Interpreter states

  - name: "spacing on"
    description: >-
      Turns auto-spacing on, which is the default.
      This automatically adds space between uttered words.
    functions:
      - name: "autoSpacing"
        fixedArguments:
          - "on"
  - name: "spacing off"
    description: >-
      Turns auto-spacing off.
      This may be useful when entering alphanumeric data or coding.
    functions:
      - name: "autoSpacing"
        fixedArguments:
          - "off"
  - name: "utterance spacing on"
    description: >-
      Turns auto-utterance-spacing on.
      This automatically adds space between utterances.
    functions:
      - name: "autoUtteranceSpacing"
        fixedArguments:
          - "on"
  - name: "utterance spacing off"
    description: >-
      Turns auto-utterance-spacing off, which is the default.
    functions:
      - name: "autoUtteranceSpacing"
        fixedArguments:
          - "off"
  - name: "capitalization on"
    description: >-
      Turns automatic capitalization provided by the recognizer on.
      Command names and arguments to commands are not capitalized.
    functions:
      - name: "autoCapitalization"
        fixedArguments:
          - "on"
  - name: "capitalization off"
    description: >-
      Turns automatic capitalization provided by the recognizer off,
      which is the default.
    alternates:
      - "capitalization of"
    functions:
      - name: "autoCapitalization"
        fixedArguments:
          - "off"
  - name: "commands only on"
    description: >-
      Enables the commands-only interpreter state.
      All normal typing will be ignored.
    alternates:
      - "commands on the on"
    functions:
      - name: "commandsOnly"
        fixedArguments:
          - "on"
  - name: "commands only off"
    description: >-
      Disables the commands-only interpreter state.
      This is the default.
    alternates:
      - "commands on the off"
      - "commands only offer"
    functions:
      - name: "commandsOnly"
        fixedArguments:
          - "off"

  # Text transformations

  - name: "escape"
    description: >-
      Use this command when you want type words without executing
      a command that may match the words.
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
      For example, if you want to type the word "comma", rather than ",",
      say "escape comma".
      To type "escape", say "escape escape".
    alternates:
      - "escaped"
    functions:
      - name: "type"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "number"
    description: >-
      Use this command to type a number with digits rather than words.
      The utterance words are processed as a single number argument.
      If "stop" is encountered in the utterance words,
      the command is completed and "stop" is ignored.
      If some other word is encountered that cannot be interpreted as a number,
      the command is completed and that word remains as an utterance argument
      for further processing.
    alternates:
      - "numbers"
    functions:
      - name: "number"
        utteranceArguments: 1
    spaceLeft: true
    spaceRight: true
  - name: "telephone number"
    description: >-
      Use this command to type a telephone number in the N-N-N format.
      The first utterance argument is the first number.
      The second utterance argument is "stop".
      The third utterance argument is the second number.
      The fourth utterance argument is "stop".
      The fifth utterance argument is the third number.
    functions:
      - name: "number"
        utteranceArguments: 1
      - name: "type"
        fixedArguments:
          - "-"
      - name: "number"
        utteranceArguments: 1
      - name: "type"
        fixedArguments:
          - "-"
      - name: "number"
        utteranceArguments: 1
    spaceLeft: true
    spaceRight: true
  - name: "camel"
    description: >-
      Use this command to type words in camelCase.
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
    alternates:
      - "caml"
    functions:
      - name: "camel"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "bumpy"
    description: >-
      Use this command to type words in BumpyCase.
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
    alternates:
      - "pompey"
      - "pompeii"
    functions:
      - name: "bumpy"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "snake"
    description: >-
      Use this command to type words in snake_case.
      If the first utterance argument is "upper",
      the words will be typed in uppercase: SNAKE_CASE.
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
    alternates:
      - "sneak"
    functions:
      - name: "snake"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "kebab"
    description: >-
      Use this command to type words in kebab-case.
      If the first utterance argument is "upper",
      the words will be typed in uppercase: KEBAB-CASE.
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
    functions:
      - name: "kebab"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "title"
    description: >-
      Use this command to type words in Title Case.
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
    functions:
      - name: "title"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "smash"
    description: >-
      Use this command to smashwordstogether.
      If the first utterance argument is "upper",
      the words will be typed in uppercase: SMASHWORDSTOGETHER.
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
    alternates:
      - "smashed"
    functions:
      - name: "smash"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "all caps"
    description: >-
      Use this command to TYPE IN ALL CAPS.
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
    functions:
      - name: "allCaps"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "upper"
    description: >-
      Use this command to type a sequence of letters.
      The first letter of each utterance argument is typed.
      The letters are typed in uppercase, but you can say
      "lower" or "upper" while providing utterance arguments
      to change the case. For example:
      "upper athens bristol lower cuba dublin" -> "ABcd",
      "upper looks good to me" -> "LGTM".
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
    functions:
      - name: "upper"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "lower"
    description: >-
      Use this command to type a sequence of letters.
      The first letter of each utterance argument is typed.
      The letters are typed in lowercase, but you can say
      "lower" or "upper" while providing utterance arguments
      to change the case. For example:
      "lower athens bristol upper cuba dublin" -> "abCD",
      "lower looks good to me" -> "lgtm".
      By default, the remainder of the utterance words are supplied as arguments,
      but you can say "stop" to complete the command
      and continue speaking without pause.
    alternates:
      - "lowered"
      - "lowers"
      - "nowhere"
    functions:
      - name: "lower"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true
  - name: "capital"
    description: >-
      Use this command to capitalize a word.
      The single utterance argument is capitalized.
    alternates:
      - "cap"
      - "capitol"
    functions:
      - name: "title"
        utteranceArguments: 1
    spaceLeft: true
    spaceRight: true
  - name: "context"
    description: >-
      Use this command to type a single word that is usually not recognized correctly
      unless additional context is provided.  The first argument is a position
      within the remaining utterance arguments.  The remaining arguments contain
      the word you want to type with additional context.
      For example, if you say "write" as a single word utterance,
      this will most often be recognized as "right".
      If you say "context one write a book", "write" will be typed.
      If you say "context two school principal", "principal" will be typed.
    functions:
      - name: "context"
        utteranceArguments: 100
    spaceLeft: true
    spaceRight: true

  # words that should always be capitalized

  - name: "i"
    description: >-
      Used to type "I".
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "I"
    spaceLeft: true
    spaceRight: true
  - name: "i'm"
    description: >-
      Used to type "I'm".
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "I'm"
    spaceLeft: true
    spaceRight: true
  - name: "i'll"
    description: >-
      Used to type "I'll".
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "I'll"
    spaceLeft: true
    spaceRight: true
  - name: "i've"
    description: >-
      Used to type "I've".
    pseudoCommand: true
    functions:
      - name: "type"
        fixedArguments:
          - "I've"
    spaceLeft: true
    spaceRight: true

  # Scrolling

  - name: "scroll up"
    description: >-
      Scrolls the mouse up.
      The single utterance argument is the number of scroll ticks.
    alternates:
      - "scrolled up"
    functions:
      - name: "mouseScroll"
        fixedArguments:
          - "up"
        utteranceArguments: 1
  - name: "scroll down"
    description: >-
      Scrolls the mouse down.
      The single utterance argument is the number of scroll ticks.
    alternates:
      - "scrolled down"
    functions:
      - name: "mouseScroll"
        fixedArguments:
          - "down"
        utteranceArguments: 1
  - name: "scroll left" # hold shift, scroll up, release shift
    description: >-
      Scrolls the mouse left.
      The single utterance argument is the number of scroll ticks.
    functions:
      - name: "keyHold"
        fixedArguments:
          - "shift"
      - name: "mouseScroll"
        fixedArguments:
          - "up"
        utteranceArguments: 1
      - name: "keyRelease"
        fixedArguments:
          - "shift"
  - name: "scroll right" # hold shift, scroll down, release shift
    description: >-
      Scrolls the mouse right.
      The single utterance argument is the number of scroll ticks.
    alternates:
      - "scroll write"
    functions:
      - name: "keyHold"
        fixedArguments:
          - "shift"
      - name: "mouseScroll"
        fixedArguments:
          - "down"
        utteranceArguments: 1
      - name: "keyRelease"
        fixedArguments:
          - "shift"
  - name: "start scrolling"
    description: >-
      Starts automatically scrolling down three ticks every N seconds,
      where N is provided as an optional utterance argument.
      If not provided,
      it will scroll every 5 seconds.
      If automatic scrolling is already active,
      you can use this command to change the seconds value.
      This is useful for casual browsing of long content, like social media.
    alternates:
      - "started scrolling"
    functions:
      - name: "autoScrollStart"
        fixedArguments:
          - "down"
          - "3" # scroll ticks
        utteranceArguments: 1
  - name: "stop scrolling"
    description: >-
      Stops the automatic scrolling.
    functions:
      - name: "autoScrollStop"

  # key hold and release

  - name: "hold shift"
    description: >-
      Holds the shift key down.
      This is useful for selecting text.
    functions:
      - name: "keyHold"
        fixedArguments:
          - "shift"
  - name: "release shift"
    description: >-
      Releases the shift key from being held down.
    functions:
      - name: "keyRelease"
        fixedArguments:
          - "shift"
  - name: "hold control"
    description: >-
      Holds the control key down.
    functions:
      - name: "keyHold"
        fixedArguments:
          - "control"
  - name: "release control"
    description: >-
      Releases the control key from being held down.
    functions:
      - name: "keyRelease"
        fixedArguments:
          - "control"

  # miscellaneous

  - name: "smiley face"
    description: >-
      Types ":-)".
    functions:
      - name: "type"
        fixedArguments:
          - ":-)"
  - name: "sad face"
    description: >-
      Types ":-(".
    functions:
      - name: "type"
        fixedArguments:
          - ":-("
  - name: "winky face"
    description: >-
      Types ";-)".
    functions:
      - name: "type"
        fixedArguments:
          - ";-)"
