    -- | The default game key-command mapping to be used for UI. Can be overridden
    -- via macros in the config file.
    module Client.UI.Content.Input
      ( standardKeysAndMouse
    #ifdef EXPOSE_INTERNAL
        -- * Internal operations
      , applyTs
    #endif
      ) where

    import Prelude ()

    import Game.LambdaHack.Core.Prelude

    import Game.LambdaHack.Client.UI.Content.Input
    import Game.LambdaHack.Client.UI.HumanCmd
    import Game.LambdaHack.Definition.Defs

    -- | Description of default key-command bindings.
    --
    -- In addition to these commands, mouse and keys have a standard meaning
    -- when navigating various menus.
    standardKeysAndMouse :: InputContentRaw
    standardKeysAndMouse :: InputContentRaw
    standardKeysAndMouse = [(KM, CmdTriple)] -> InputContentRaw
    InputContentRaw ([(KM, CmdTriple)] -> InputContentRaw)
    -> [(KM, CmdTriple)] -> InputContentRaw
    forall a b. (a -> b) -> a -> b
    $ (([Char], CmdTriple) -> (KM, CmdTriple))
    -> [([Char], CmdTriple)] -> [(KM, CmdTriple)]
    forall a b. (a -> b) -> [a] -> [b]
    map ([Char], CmdTriple) -> (KM, CmdTriple)
    evalKeyDef ([([Char], CmdTriple)] -> [(KM, CmdTriple)])
    -> [([Char], CmdTriple)] -> [(KM, CmdTriple)]
    forall a b. (a -> b) -> a -> b
    $
      -- All commands are defined here, except some movement and leader picking
      -- commands. All commands are shown on help screens except debug commands
      -- and macros with empty descriptions.
      -- The order below determines the order on the help screens.
      -- Remember to put commands that show information (e.g., enter aiming
      -- mode) first.

      -- Minimal command set, in the desired presentation order.
      -- A lot of these are not necessary, but may be familiar to new players.
      -- Also a few non-minimal item commands to keep proper order.
      [ ([Char]
    "I", ( [CmdCategory
    CmdMinimal, CmdCategory
    CmdItem, CmdCategory
    CmdDashboard]
              , Text
    "manage the shared inventory stash"
              , ItemDialogMode -> HumanCmd
    ChooseItemMenu (CStore -> ItemDialogMode
    MStore CStore
    CStash) ))
      , ([Char]
    "O", ( [CmdCategory
    CmdItem, CmdCategory
    CmdDashboard]
              , Text
    "manage the equipment outfit of the pointman"
              , ItemDialogMode -> HumanCmd
    ChooseItemMenu (CStore -> ItemDialogMode
    MStore CStore
    CEqp) ))
      , ([Char]
    "g", CmdCategory -> CmdTriple -> CmdTriple
    addCmdCategory CmdCategory
    CmdMinimal (CmdTriple -> CmdTriple) -> CmdTriple -> CmdTriple
    forall a b. (a -> b) -> a -> b
    $ Text -> CmdTriple
    grabItems Text
    "grab item(s)")
      , ([Char]
    "Escape", ( [CmdCategory
    CmdMinimal, CmdCategory
    CmdAim]
                   , Text
    "clear messages/open main menu/finish aiming"
                   , AimModeCmd -> HumanCmd
    ByAimMode AimModeCmd
                                 { exploration :: HumanCmd
    exploration = HumanCmd -> HumanCmd
    ExecuteIfClear HumanCmd
    MainMenuAutoOff
                                 , aiming :: HumanCmd
    aiming = HumanCmd
    Cancel } ))
      , ([Char]
    "C-Escape", ([], Text
    "", HumanCmd
    MainMenuAutoOn))
          -- required by frontends; not shown
      , ([Char]
    "Return", ( [CmdCategory
    CmdMinimal, CmdCategory
    CmdAim]
                   , Text
    "open dashboard/accept target"
                   , AimModeCmd -> HumanCmd
    ByAimMode AimModeCmd { exploration :: HumanCmd
    exploration = HumanCmd
    Dashboard
                                          , aiming :: HumanCmd
    aiming = HumanCmd
    Accept } ))
      , ([Char]
    "space", ( [CmdCategory
    CmdMinimal, CmdCategory
    CmdAim]
                  , Text
    "clear messages/show history/cycle detail level"
                  , AimModeCmd -> HumanCmd
    ByAimMode AimModeCmd { exploration :: HumanCmd
    exploration = HumanCmd -> HumanCmd
    ExecuteIfClear HumanCmd
    AllHistory
                                         , aiming :: HumanCmd
    aiming = HumanCmd
    DetailCycle } ))
      , ([Char]
    "Tab", Direction -> [CmdCategory] -> CmdTriple
    memberCycle Direction
    Forward [CmdCategory
    CmdMinimal, CmdCategory
    CmdMove])
          -- listed here to keep proper order of the minimal cheat sheet
      , ([Char]
    "BackTab", Direction -> [CmdCategory] -> CmdTriple
    memberCycle Direction
    Backward [CmdCategory
    CmdMove])
      , ([Char]
    "A-Tab", Direction -> [CmdCategory] -> CmdTriple
    memberCycleLevel Direction
    Forward [])
      , ([Char]
    "A-BackTab", Direction -> [CmdCategory] -> CmdTriple
    memberCycleLevel Direction
    Backward [])
      , ([Char]
    "C-Tab", Direction -> [CmdCategory] -> CmdTriple
    memberCycleLevel Direction
    Forward [CmdCategory
    CmdMove])
      , ([Char]
    "C-BackTab", Direction -> [CmdCategory] -> CmdTriple
    memberCycleLevel Direction
    Backward [CmdCategory
    CmdMove])
      , ([Char]
    "*", ( [CmdCategory
    CmdMinimal, CmdCategory
    CmdAim]
              , Text
    "cycle crosshair among enemies"
              , HumanCmd
    AimEnemy ))
      , ([Char]
    "/", ([CmdCategory
    CmdMinimal, CmdCategory
    CmdAim], Text
    "cycle crosshair among items", HumanCmd
    AimItem))
      , ([Char]
    "m", ([CmdCategory
    CmdMove], Text
    "modify door by closing it", HumanCmd
    CloseDir))
      , ([Char]
    "M", ([CmdCategory
    CmdMinimal, CmdCategory
    CmdMove], Text
    "modify any admissible terrain", HumanCmd
    AlterDir))
      , ([Char]
    "%", ([CmdCategory
    CmdMinimal, CmdCategory
    CmdMeta], Text
    "yell or yawn and stop sleeping", HumanCmd
    Yell))

      -- Item menu, first part of item use commands
      , ([Char]
    "comma", Text -> CmdTriple
    grabItems Text
    "")  -- only show extra key, not extra entry
      , ([Char]
    "r", Text -> CmdTriple
    dropItems Text
    "remove item(s)")
      , ([Char]
    "f", CmdCategory -> CmdTriple -> CmdTriple
    addCmdCategory CmdCategory
    CmdItemMenu (CmdTriple -> CmdTriple) -> CmdTriple -> CmdTriple
    forall a b. (a -> b) -> a -> b
    $ [TriggerItem] -> CmdTriple
    projectA [TriggerItem]
    flingTs)
      , ([Char]
    "C-f", CmdCategory -> CmdTriple -> CmdTriple
    addCmdCategory CmdCategory
    CmdItemMenu
                (CmdTriple -> CmdTriple) -> CmdTriple -> CmdTriple
    forall a b. (a -> b) -> a -> b
    $ Text -> CmdTriple -> CmdTriple
    replaceDesc Text
    "auto-fling and keep choice"
                (CmdTriple -> CmdTriple) -> CmdTriple -> CmdTriple
    forall a b. (a -> b) -> a -> b
    $ [TriggerItem] -> CmdTriple
    projectI [TriggerItem]
    flingTs)
      , ([Char]
    "t", CmdCategory -> CmdTriple -> CmdTriple
    addCmdCategory CmdCategory
    CmdItemMenu (CmdTriple -> CmdTriple) -> CmdTriple -> CmdTriple
    forall a b. (a -> b) -> a -> b
    $ [TriggerItem] -> CmdTriple
    applyI [TriggerItem]
    applyTs)
      , ([Char]
    "C-t", CmdCategory -> CmdTriple -> CmdTriple
    addCmdCategory CmdCategory
    CmdItemMenu
                (CmdTriple -> CmdTriple) -> CmdTriple -> CmdTriple
    forall a b. (a -> b) -> a -> b
    $ Text -> CmdTriple -> CmdTriple
    replaceDesc Text
    "trigger item and keep choice" (CmdTriple -> CmdTriple) -> CmdTriple -> CmdTriple
    forall a b. (a -> b) -> a -> b
    $ [TriggerItem] -> CmdTriple
    applyIK [TriggerItem]
    applyTs)
      , ([Char]
    "i", Text -> CmdTriple -> CmdTriple
    replaceDesc Text
    "stash item into shared inventory"
              (CmdTriple -> CmdTriple) -> CmdTriple -> CmdTriple
    forall a b. (a -> b) -> a -> b
    $ [CStore] -> CStore -> Part -> Bool -> CmdTriple
    moveItemTriple [CStore
    CGround, CStore
    CEqp] CStore
    CStash Part
    "item" Bool
    False)
      , ([Char]
    "o", Text -> CmdTriple -> CmdTriple
    replaceDesc Text
    "equip item into outfit of the pointman"
              (CmdTriple -> CmdTriple) -> CmdTriple -> CmdTriple
    forall a b. (a -> b) -> a -> b
    $ [CStore] -> CStore -> Part -> Bool -> CmdTriple
    moveItemTriple [CStore
    CGround, CStore
    CStash] CStore
    CEqp Part
    "item" Bool
    False)

      -- Remaining @ChooseItemMenu@ instances
      , ([Char]
    "G", ( [CmdCategory
    CmdItem, CmdCategory
    CmdDashboard]
              , Text
    "manage items on the ground"
              , ItemDialogMode -> HumanCmd
    ChooseItemMenu (CStore -> ItemDialogMode
    MStore CStore
    CGround) ))
      , ([Char]
    "T", ( [CmdCategory
    CmdItem, CmdCategory
    CmdDashboard]
              , Text
    "manage our total team belongings"
              , ItemDialogMode -> HumanCmd
    ChooseItemMenu ItemDialogMode
    MOwned ))
      , ([Char]
    "@", ( [CmdCategory
    CmdMeta, CmdCategory
    CmdDashboard]
              , Text
    "describe organs of the pointman"
              , ItemDialogMode -> HumanCmd
    ChooseItemMenu (SLore -> ItemDialogMode
    MLore SLore
    SBody) ))
      , ([Char]
    "#", ( [CmdCategory
    CmdMeta, CmdCategory
    CmdDashboard]
              , Text
    "show skill summary of the pointman"
              , ItemDialogMode -> HumanCmd
    ChooseItemMenu ItemDialogMode
    MSkills ))
      , ([Char]
    "~", ( [CmdCategory
    CmdMeta]
              , Text
    "display relevant lore"
              , ItemDialogMode -> HumanCmd
    ChooseItemMenu (SLore -> ItemDialogMode
    MLore SLore
    SItem) ))

      -- Dashboard, in addition to commands marked above
      , ([Char]
    "safeD0", ([CmdCategory
    CmdInternal, CmdCategory
    CmdDashboard], Text
    "", HumanCmd
    Cancel))  -- blank line
      ]
      [([Char], CmdTriple)]
    -> [([Char], CmdTriple)] -> [([Char], CmdTriple)]
    forall a. [a] -> [a] -> [a]
    ++
      (Int -> SLore -> ([Char], CmdTriple))
    -> [Int] -> [SLore] -> [([Char], CmdTriple)]
    forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
    zipWith (\Int
    k SLore
    slore -> ([Char]
    "safeD" [Char] -> [Char] -> [Char]
    forall a. [a] -> [a] -> [a]
    ++ Int -> [Char]
    forall a. Show a => a -> [Char]
    show (Int
    k :: Int)
                           , ( [CmdCategory
    CmdInternal, CmdCategory
    CmdDashboard]
                             , Text
    "display" Text -> Text -> Text
    <+> SLore -> Text
    ppSLore SLore
    slore Text -> Text -> Text
    <+> Text
    "lore"
                             , ItemDialogMode -> HumanCmd
    ChooseItemMenu (SLore -> ItemDialogMode
    MLore SLore
    slore) )))
              [Int
    1..] [SLore
    forall a. Bounded a => a
    minBound..SLore
    SEmbed]
      [([Char], CmdTriple)]
    -> [([Char], CmdTriple)] -> [([Char], CmdTriple)]
    forall a. [a] -> [a] -> [a]
    ++
      [ ([Char]
    "safeD96", ( [CmdCategory
    CmdInternal, CmdCategory
    CmdDashboard]
                    , Text
    "display place lore"
                    , ItemDialogMode -> HumanCmd
    ChooseItemMenu ItemDialogMode
    MPlaces) )
      , ([Char]
    "safeD97", ( [CmdCategory
    CmdInternal, CmdCategory
    CmdDashboard]
                    , Text
    "display faction lore"
                    , ItemDialogMode -> HumanCmd
    ChooseItemMenu ItemDialogMode
    MFactions) )
      , ([Char]
    "safeD98", ( [CmdCategory
    CmdInternal, CmdCategory
    CmdDashboard]
                    , Text
    "display adventure lore"
                    , ItemDialogMode -> HumanCmd
    ChooseItemMenu ItemDialogMode
    MModes) )
      , ([Char]
    "safeD99", ([CmdCategory
    CmdInternal, CmdCategory
    CmdDashboard], Text
    "", HumanCmd
    Cancel))  -- blank line

      -- Terrain exploration and modification
      , ([Char]
    "=", ( [CmdCategory
    CmdMove], Text
    "select (or deselect) party member", HumanCmd
    SelectActor) )
      , ([Char]
    "_", ([CmdCategory
    CmdMove], Text
    "deselect (or select) all on the level", HumanCmd
    SelectNone))
      , ([Char]
    "semicolon", ( [CmdCategory
    CmdMove]
                      , Text
    "go to crosshair for 25 steps"
                      , [[Char]] -> HumanCmd
    Macro [[Char]
    "C-semicolon", [Char]
    "C-quotedbl", [Char]
    "C-v"] ))
      , ([Char]
    "colon", ( [CmdCategory
    CmdMove]
                  , Text
    "run to crosshair collectively for 25 steps"
                  , [[Char]] -> HumanCmd
    Macro [[Char]
    "C-colon", [Char]
    "C-quotedbl", [Char]
    "C-v"] ))
      , ([Char]
    "[", ( [CmdCategory
    CmdMove]
              , Text
    "explore nearest unknown spot"
              , HumanCmd
    autoexploreCmd ))
      , ([Char]
    "]", ( [CmdCategory
    CmdMove]
              , Text
    "autoexplore 25 times"
              , HumanCmd
    autoexplore25Cmd ))
      , ([Char]
    "R", ([CmdCategory
    CmdMove], Text
    "rest (wait 25 times)", [[Char]] -> HumanCmd
    Macro [[Char]
    "KP_Begin", [Char]
    "C-v"]))
      , ([Char]
    "C-R", ( [CmdCategory
    CmdMove], Text
    "heed (lurk 0.1 turns 100 times)"
                , [[Char]] -> HumanCmd
    Macro [[Char]
    "C-KP_Begin", [Char]
    "A-v"] ))

      -- Aiming
      , ([Char]
    "+", ([CmdCategory
    CmdAim], Text
    "swerve the aiming line", Direction -> HumanCmd
    EpsIncr Direction
    Forward))
      , ([Char]
    "-", ([CmdCategory
    CmdAim], Text
    "unswerve the aiming line", Direction -> HumanCmd
    EpsIncr Direction
    Backward))
      , ([Char]
    "\\", ([CmdCategory
    CmdAim], Text
    "cycle aiming modes", HumanCmd
    AimFloor))
      , ([Char]
    "C-?", ( [CmdCategory
    CmdAim]
                , Text
    "set crosshair to nearest unknown spot"
                , HumanCmd
    XhairUnknown ))
      , ([Char]
    "C-/", ( [CmdCategory
    CmdAim]
                , Text
    "set crosshair to nearest item"
                , HumanCmd
    XhairItem ))
      , ([Char]
    "C-{", ( [CmdCategory
    CmdAim]
                , Text
    "aim at nearest upstairs"
                , Bool -> HumanCmd
    XhairStair Bool
    True ))
      , ([Char]
    "C-}", ( [CmdCategory
    CmdAim]
                , Text
    "aim at nearest downstairs"
                , Bool -> HumanCmd
    XhairStair Bool
    False ))
      , ([Char]
    "<", ([CmdCategory
    CmdAim], Text
    "move aiming one level up" , Int -> HumanCmd
    AimAscend Int
    1))
      , ([Char]
    "C-<", ([], Text
    "move aiming 10 levels up", Int -> HumanCmd
    AimAscend Int
    10))
      , ([Char]
    ">", ([CmdCategory
    CmdAim], Text
    "move aiming one level down", Int -> HumanCmd
    AimAscend (-Int
    1)))
          -- 'lower' would be misleading in some games, just as 'deeper'
      , ([Char]
    "C->", ([], Text
    "move aiming 10 levels down", Int -> HumanCmd
    AimAscend (-Int
    10)))
      , ([Char]
    "BackSpace" , ( [CmdCategory
    CmdAim]
                       , Text
    "clear chosen item and crosshair"
                       , HumanCmd -> HumanCmd -> HumanCmd
    ComposeUnlessError HumanCmd
    ClearTargetIfItemClear HumanCmd
    ItemClear))

      -- Assorted (first few cloned from main menu)
      , ([Char]
    "C-g", ([CmdCategory
    CmdMeta], Text
    "start new game", HumanCmd
    GameRestart))
      , ([Char]
    "C-x", ([CmdCategory
    CmdMeta], Text
    "save and exit to desktop", HumanCmd
    GameExit))
      , ([Char]
    "C-q", ([CmdCategory
    CmdMeta], Text
    "quit game and start autoplay", HumanCmd
    GameQuit))
      , ([Char]
    "C-c", ([CmdCategory
    CmdMeta], Text
    "exit to desktop without saving", HumanCmd
    GameDrop))
      , ([Char]
    "?", ([CmdCategory
    CmdMeta], Text
    "display help", HumanCmd
    Hint))
      , ([Char]
    "F1", ([CmdCategory
    CmdMeta, CmdCategory
    CmdDashboard], Text
    "display help immediately", HumanCmd
    Help))
      , ([Char]
    "F12", ([CmdCategory
    CmdMeta, CmdCategory
    CmdDashboard], Text
    "show history", HumanCmd
    AllHistory))
      , ([Char]
    "v", Int -> [CmdCategory] -> CmdTriple
    repeatLastTriple Int
    1 [CmdCategory
    CmdMeta])
      , ([Char]
    "C-v", Int -> [CmdCategory] -> CmdTriple
    repeatLastTriple Int
    25 [])
      , ([Char]
    "A-v", Int -> [CmdCategory] -> CmdTriple
    repeatLastTriple Int
    100 [])
      , ([Char]
    "V", Int -> [CmdCategory] -> CmdTriple
    repeatTriple Int
    1 [CmdCategory
    CmdMeta])
      , ([Char]
    "C-V", Int -> [CmdCategory] -> CmdTriple
    repeatTriple Int
    25 [])
      , ([Char]
    "A-V", Int -> [CmdCategory] -> CmdTriple
    repeatTriple Int
    100 [])
      , ([Char]
    "'", ([CmdCategory
    CmdMeta], Text
    "start recording commands", HumanCmd
    Record))
      , ([Char]
    "C-S", ([CmdCategory
    CmdMeta], Text
    "save game backup", HumanCmd
    GameSave))
      , ([Char]
    "C-P", ([CmdCategory
    CmdMeta], Text
    "print screen", HumanCmd
    PrintScreen))

      -- Mouse
      , ( [Char]
    "LeftButtonRelease"
        , HumanCmd -> Text -> CmdTriple
    mouseLMB HumanCmd
    goToCmd
                   Text
    "go to pointer for 25 steps/fling at enemy" )
      , ( [Char]
    "S-LeftButtonRelease"
        , HumanCmd -> Text -> CmdTriple
    mouseLMB HumanCmd
    runToAllCmd
                   Text
    "run to pointer collectively for 25 steps/fling at enemy" )
      , ([Char]
    "RightButtonRelease", CmdTriple
    mouseRMB)
      , ([Char]
    "C-LeftButtonRelease", Text -> CmdTriple -> CmdTriple
    replaceDesc Text
    "" CmdTriple
    mouseRMB)  -- Mac convention
      , ( [Char]
    "S-RightButtonRelease"
        , ([CmdCategory
    CmdMouse], Text
    "modify terrain at pointer", HumanCmd
    AlterWithPointer) )
      , ([Char]
    "MiddleButtonRelease", CmdTriple
    mouseMMB)
      , ([Char]
    "C-RightButtonRelease", Text -> CmdTriple -> CmdTriple
    replaceDesc Text
    "" CmdTriple
    mouseMMB)
      , ( [Char]
    "C-S-LeftButtonRelease", let ([CmdCategory]
    _, Text
    _, HumanCmd
    cmd) = CmdTriple
    mouseMMB
                                   in ([], Text
    "", HumanCmd
    cmd) )
      , ([Char]
    "A-MiddleButtonRelease", CmdTriple
    mouseMMBMute)
      , ([Char]
    "WheelNorth", ([CmdCategory
    CmdMouse], Text
    "swerve the aiming line", [[Char]] -> HumanCmd
    Macro [[Char]
    "+"]))
      , ([Char]
    "WheelSouth", ([CmdCategory
    CmdMouse], Text
    "unswerve the aiming line", [[Char]] -> HumanCmd
    Macro [[Char]
    "-"]))

      -- Debug and others not to display in help screens
      , ([Char]
    "Escape", ([CmdCategory
    CmdMeta], Text
    "", HumanCmd
    AutomateBack))
      , ([Char]
    "Escape", ([CmdCategory
    CmdMeta], Text
    "", HumanCmd
    MainMenu))
      , ([Char]
    "C-semicolon", ( []
                        , Text
    "move one step towards the crosshair"
                        , HumanCmd
    MoveOnceToXhair ))
      , ([Char]
    "C-colon", ( []
                    , Text
    "run collectively one step towards the crosshair"
                    , HumanCmd
    RunOnceToXhair ))
      , ([Char]
    "C-quotedbl", ( []
                       , Text
    "continue towards the crosshair"
                       , HumanCmd
    ContinueToXhair ))
      , ([Char]
    "C-comma", ([], Text
    "run once ahead", HumanCmd
    RunOnceAhead))
      , ([Char]
    "safe1", ( [CmdCategory
    CmdInternal]
                  , Text
    "go to pointer for 25 steps"
                  , HumanCmd
    goToCmd ))
      , ([Char]
    "safe2", ( [CmdCategory
    CmdInternal]
                  , Text
    "run to pointer collectively"
                  , HumanCmd
    runToAllCmd ))
      , ([Char]
    "safe3", ( [CmdCategory
    CmdInternal]
                  , Text
    "pick new pointman on screen"
                  , HumanCmd
    PickLeaderWithPointer ))
      , ([Char]
    "safe4", ( [CmdCategory
    CmdInternal]
                  , Text
    "select party member on screen"
                  , HumanCmd
    SelectWithPointer ))
      , ([Char]
    "safe5", ( [CmdCategory
    CmdInternal]
                  , Text
    "set crosshair to enemy"
                  , HumanCmd
    AimPointerEnemy ))
      , ([Char]
    "safe6", ( [CmdCategory
    CmdInternal]
                  , Text
    "fling at enemy under pointer"
                  , HumanCmd
    aimFlingCmd ))
      , ([Char]
    "safe7", ( [CmdCategory
    CmdInternal, CmdCategory
    CmdDashboard]
                  , Text
    "open main menu"
                  , HumanCmd
    MainMenuAutoOff ))
      , ([Char]
    "safe8", ( [CmdCategory
    CmdInternal]
                  , Text
    "clear msgs and open main menu"
                  , HumanCmd -> HumanCmd
    ExecuteIfClear HumanCmd
    MainMenuAutoOff ))
      , ([Char]
    "safe9", ( [CmdCategory
    CmdInternal]
                  , Text
    "cancel aiming"
                  , HumanCmd
    Cancel ))
      , ([Char]
    "safe10", ( [CmdCategory
    CmdInternal]
                   , Text
    "accept target"
                   , HumanCmd
    Accept ))
      , ([Char]
    "safe11", ( [CmdCategory
    CmdInternal]
                   , Text
    "wait a turn, bracing for impact"
                   , HumanCmd
    Wait ))
      , ([Char]
    "safe12", ( [CmdCategory
    CmdInternal]
                   , Text
    "lurk 0.1 of a turn"
                   , HumanCmd
    Wait10 ))
      , ([Char]
    "safe13", ( [CmdCategory
    CmdInternal]
                   , Text
    "snap crosshair to enemy"
                   , HumanCmd
    XhairPointerEnemy ))
      , ([Char]
    "safe14", ( [CmdCategory
    CmdInternal]
                   , Text
    "open dashboard"
                   , HumanCmd
    Dashboard ))
      ]
      [([Char], CmdTriple)]
    -> [([Char], CmdTriple)] -> [([Char], CmdTriple)]
    forall a. [a] -> [a] -> [a]
    ++ (Int -> ([Char], CmdTriple)) -> [Int] -> [([Char], CmdTriple)]
    forall a b. (a -> b) -> [a] -> [b]
    map Int -> ([Char], CmdTriple)
    defaultHeroSelect [Int
    0..Int
    9]

    applyTs :: [TriggerItem]
    applyTs :: [TriggerItem]
    applyTs = [TriggerItem { tiverb :: Part
    tiverb = Part
    "trigger"
                           , tiobject :: Part
    tiobject = Part
    "consumable item"
                           , tisymbols :: [Char]
    tisymbols = [Char]
    "!,?/" }]