Appendix C: Controller Button Reference

Complete reference of The Vault's Universal Button Mapping system with 70+ supported aliases.

Universal Button Mapping

The Vault normalizes button names across DualSense, Xbox, and Nintendo Pro controllers. All aliases below map to the same physical button, so you can use whichever naming convention you prefer in your controller profiles and running scripts.

Face Buttons (Bottom/Right/Left/Top)

PositionPlayStationXboxNintendoGenericSymbols
Bottomcrossabbuttona
Rightcirclebabuttonbo
Leftsquarexybuttonx
Toptriangleyxbuttony

Shoulder Buttons

PositionPlayStationXboxNintendoGeneric
Left Shoulderl1lblleftshoulder, leftbumper
Right Shoulderr1rbrrightshoulder, rightbumper

Trigger Buttons

PositionPlayStationXboxNintendoGeneric
Left Triggerl2, lefttriggerlt, lefttriggerzl, lefttriggerl2, lt
Right Triggerr2, righttriggerrt, righttriggerzr, righttriggerr2, rt

Thumbstick Clicks

PositionPlayStationXboxNintendoGeneric
Left Stickl3lslstickleftthumbstick, leftthumbstickbutton
Right Stickr3rsrstickrightthumbstick, rightthumbstickbutton

Center Buttons

PositionPlayStationXboxNintendoGeneric
Left Centershare, createviewminus, captureselect, buttonoptions
Right Centeroptionsmenuplusstart, buttonmenu
Homepsxbox, guidehomehome, buttonhome

D-Pad

DirectionAliases (All Platforms)
Upup, dpadup, dup
Downdown, dpaddown, ddown
Leftleft, dpadleft, dleft
Rightright, dpadright, dright

Special Buttons (DualSense Only)

ButtonAliases
Touchpadtouchpad, clickpad

Usage Examples

Controller Profile Mapping

{
  "showcase": {
    "navigationActions": {
      "confirm": ["cross", "a", "b"],      // PlayStation, Xbox, Nintendo
      "cancel": ["circle", "b", "a"],
      "menu": ["options", "menu", "plus"]
    }
  }
}

Running Script with Multiple Aliases

::controller+share+options {
    -- Works with share+options (PS), view+menu (Xbox), minus+plus (Nintendo)
    do shell script "kill -INT {{{PID}}}"
}

::controller+l1+triangle {
    -- Works with l1+triangle (PS), lb+y (Xbox), l+x (Nintendo)
    do shell script "screencapture ~/Desktop/{{{GAME}}}.png"
}

Implementation Notes

  • Case Insensitive: Button names are normalized to lowercase (e.g., CROSS = cross)
  • Space Stripped: Spaces are removed (e.g., left shoulder = leftshoulder)
  • Symbol Support: A few symbol aliases resolve (e.g., o = circle, + = start, - = select)
  • Priority Order: If multiple aliases match, the first valid one is used
  • Extensible: New aliases can be added to normalizeButtonName() in UnifiedControllerService.swift

Source Code Reference

The Universal Button Mapping system is implemented in:

  • UnifiedControllerService.swift:1099-1181 - normalizeButtonName() function
  • GlobalHotkeyService.swift - Running script trigger matching
  • ProfileLoader.swift - Controller profile loading

💡 Pro Tip

When writing scripts or configuring profiles, use the naming convention you're most comfortable with. The Universal Button Mapping system will automatically translate it to the correct physical button regardless of which controller is actually connected.