04 ‐ Zones - FunkybotsEvilTwin/CSIUserGuide GitHub Wiki

Introduction

Zones are easily modifiable text files where the control surface behavior within Reaper is defined. They perform two primary tasks:

  • Mapping widgets defined in surface.txt files to specific Reaper actions
  • Grouping multiple action/widget mappings into related groups for easier organization.

One Zone Per File

Each .zon file must contain only one zone. This approach simplifies management and allows for easier sharing or modification of individual zones without impacting others.

Example of the CSI folder structure for an X-Touch including the .zon files:

├── CSI/
│   ├── csi.ini
│   ├── Surfaces/
│       ├── XTouch/
│           ├── surface.txt
│           ├── FXZones/
│           │   └── AutoGeneratedFXZones/
│           ├── Zones/
│           │   ├── HomeZones/
│           │   │   ├── Home.zon
│           │   │   ├── MasterTrack.zon
│           │   │   └── Track.zon
│           │   ├── GoZones/
│           │   │   ├── GoZones.zon
│           │   │   ├── Folder.zon
│           │   │   ├── MasterTrackFXMenu.zon
│           │   │   ├── SelectedTrackFX.zon
│           │   │   ├── SelectedTrackFXMenu.zon
│           │   │   ├── SelectedTrackReceive.zon
│           │   │   ├── SelectedTracks.zon
│           │   │   ├── SelectedTrackSend.zon
│           │   │   ├── SelectedTrackTCPFX.zon
│           │   │   ├── TrackFXMenu.zon
│           │   │   ├── TrackReceive.zon
│           │   │   ├── TrackSend.zon
│           │   │   └── VCA.zon
│           │   └── LearnZones/
│           │       ├── FXEpilogue.zon
│           │       ├── FXPrologue.zon
│           │       ├── FXRowLayout.zon
│           │       └── FXWidgetLayout.zon

Each zone must have a header row with the word Zone followed by the zone name (no spaces allowed). And a footer row that reads ZoneEnd.

Zone Home

ZoneEnd

Mapping an Action to a Control (Widget)

Widgets and their associated actions are defined within zones. A zone serves as a container for related widget-action mappings, allowing a structured approach to assigning functions to your control surface.

Here I'm assigning a widget named "PlayButton" to the CSI "Play" action.

    PlayButton     Play

However, we can't just have that anywhere. We need to put that mapping in a zone. Example: the Home zone.

Zone Home
    PlayButton     Play
ZoneEnd

Zone Types

  • Home- This zone is required and is the 'starting state' for CSI. It's also recommended that surface buttons get mapped in the home.zon.
  • Track- Used when you want to control multiple channels across multiple widgets (e.g. 8 faders assigned to 8 channels).
  • SelectedTrack- Used for controlling the selected track in Reaper (commonly used for 1 fader surfaces).
  • SelectedTracks- Used to control the selected tracks (plural) in Reaper. Updates dynamically as the track selection changes. Track control (volume, pan, mute, solo, etc.) behavior will be grouped for selected tracks.
  • MasterTrack- This is for assigning the master track fader to your surface.
  • MasterTrackFXMenu- This is for assigning FX on the master track. Note: there is no Reaper API which would allow CSI to access Monitor FX so these cannot currently be mapped.
  • SelectedTrackFXMenu- Used for activating FX.zon files - shows the FX slots of the selected channel.
  • SelectedTrackSend- Used for controlling the various sends on the selected channel.
  • SelectedTrackReceive- Used for controlling the various Receives (if any) on the selected channel.
  • TrackFXMenu- Used for activating FX.zon files - shows the same FX Slot across multiple channels.
  • TrackSend- Used for controlling the same Send slot across multiple channels.
  • TrackReceive- Used for controlling the same Receive slot across multiple channels.
  • SelectedTrackFX- This works to enable any FX on the selected track you have a mapping for and relies on the FX Zone. You can have multiple plugins on the selected track mapped simultaneously with careful planning of your FX zones.
  • Folder- Used to map folder tracks to the surface. Hides non-folder tracks.
  • VCA- Used to map VCA tracks to the surface. Hides non-VCA tracks.
  • Custom - Users can create custom zones.

Home Zone, IncludedZones

Every surface requires a Home zone as the default state. This zone initializes the surface by defining buttons and IncludedZones. Place all of the .zon files that will be included in your Home zone within the CSI\HomeZones\ folder.

Below is an example of a typical MCU-style home.zon. IncludedZones, like "Track" and "MasterTrack" in the below example, will be active within the home zone.

Zone Home
    IncludedZones
       Track
       MasterTrack
    IncludedZonesEnd
ZoneEnd

On the other hand, here's an example of a home.zon where the Track zone, SelectedTrackFXMenu, and SelectedTrackSend zones are all active in the home.zon itself. This can be useful in a multi-row, multi-channel surface like the C4. For this particular device/use-case, RowA of the surface covers the Track zone, RowB covers the SelectedTrackFXMenu, and RowC covers SelectedTrackSend, and we want all 3 active simultaneously, which is why we have all 3 listed as IncludedZones in the Home.zon.

Zone Home
    IncludedZones
        Track
        SelectedTrackFXMenu
        SelectedTrackSend
    IncludedZonesEnd
ZoneEnd

The Home.zon is also a great place to define actions assigned to Virtual Widgets to set the starting state of your surface. Example: you can use it to disable FocusedFXMapping on initialization.

Zone Home
    OnInitialization     DisableFocusedFXMapping

    IncludedZones
       Track
       MasterTrack
    IncludedZonesEnd

Lastly, the Home zone is where button assignments are encouraged as you'd typically want a standard set of button assignments active within the Home zone.

Zone Home
    OnInitialization     ToggleRestrictTextLength 7
    OnInitialization     ToggleEnableFocusedFXMapping
    OnInitialization     SetLatchTime 100
    IncludedZones
       Track
       MasterTrack
    IncludedZonesEnd

   
//  Encoder Assign Buttons

    Track                       GoZone SelectedTracks 
    Global+Track                GoZone MasterTrackFXMenu
    Pan                         GoZone Folder
    Global+Pan                  GoZone VCA
    EQ                          GoZone SelectedTrackReceive
    Global+EQ                   GoZone TrackReceive
    Send                        GoZone SelectedTrackSend
    Global+Send                 GoZone TrackSend
    Plugin                      GoZone SelectedTrackFXMenu
    Global+Plugin               GoZone TrackFXMenu
    Instrument                  LearnFocusedFX
 
//  Display Section

    nameValue                   GoHome
    nameValue                   Reaper _S&M_WNCLS4          // Closes all FX chain windows
    nameValue                   Reaper _S&M_WNCLS3          // Closes all floating FX windows  
    AssignmentDisplay           GlobalModeDisplay 
    TimeDisplay                 MCUTimeDisplay
    smpteBeats                  CycleTimeDisplayModes

 
//  View Buttons
 
    GlobalView                  Global
    MidiTracks                  ToggleEnableLastTouchedFXParamMapping
    Inputs                      ToggleEnableFocusedFXMapping
    AudioTracks                 ToggleScrollLink
    AudioInstrument             GoZone SelectedTrackFX
    Aux                         ClearSelectedTrackFX
    Busses                      GoZone SelectedTrackTCPFX
    Outputs                     Reaper 41827          // Show crossfade editor window
    User                        Reaper 42678          // View: Show envelope manager window
           
// Function Buttons
    F1                          Reaper 40605          // Show Actions List
    F2                          Reaper 40271          // Show FX Browser window
    F3                          Reaper 40078          // Toggle Mixer visible
    F4                          Reaper 41157          // Show project bay window
    F5                          Reaper 50124          // Media explorer: Show/hide media explorer
    F6                          Reaper 40906          // Show track manager window
    F7                          Reaper 40268          // Show navigator window
    F8                          Reaper 41050          // Toggle show master track and tempo envelope

  
//  Modifiers

    Flip                        Flip
    Shift                       Shift
    Option                      Option
    Control                     Control
    Alt                         Alt     

// Automation Buttonsg

    Read                        TrackAutoMode 1
    Write                       TrackAutoMode 3
    Trim                        TrackAutoMode 0
    Touch                       TrackAutoMode 2
    Latch                       TrackAutoMode 4
    Group                       TrackAutoMode 5
    
    Global+Read                 GlobalAutoMode 1
    Global+Write                GlobalAutoMode 3
    Global+Trim                 GlobalAutoMode 0
    Global+Touch                GlobalAutoMode 2
    Global+Latch                GlobalAutoMode 4  
    Global+Group                GlobalAutoMode 5   

//  Utility Buttons

    Save                        SaveProject Feedback=No
    Undo                        Undo Feedback=No
    Shift+Undo                  Redo Feedback=No
    Option+Undo                 Reaper 40072                // View: Show undo history window
    Cancel                      ClearModifiers         
    Enter                       Reaper 40021                // File: Project settings...
    
//  Transport Section

    Marker                      Marker
    Nudge                       Nudge
    Cycle                       CycleTimeline
    Drop                        Reaper 1157                 // Toggle snapping
    Replace                     Reaper 1155                 // Cycle ripple editing mode
    Click                       Reaper 40364                // Toggle metronome
    Shift+Click                 Reaper _SWS_AWCOUNTRECTOG   // Toggle count-in before recording
    Option+Click                Reaper 40363                // Show metronome settings
    Rewind                      Rewind   
    FastForward                 FastForward
    Stop                        Stop
    Hold+Stop                   Reaper 40042 Feedback=No    // Go to start of project
    Play                        Play
    Record                      Record    
    Solo                        ClearAllSolo
    Option+Solo                 Reaper 40745                // Solo in front (dim solo)  

//  Banking 

    BankLeft                    Bank Track -8
    BankLeft                    Bank SelectedTrack -8
    BankRight                   Bank Track 8
    BankRight                   Bank SelectedTrack 8

    ChannelLeft                 Bank Track -1
    ChannelLeft                 Bank SelectedTrack -1
    ChannelRight                Bank Track 1
    ChannelRight                Bank SelectedTrack 1

    Shift+ChannelLeft           Bank Track -999
    Shift+ChannelLeft           Bank SelectedTrack -999
    Shift+ChannelRight          Bank Track 999
    Shift+ChannelRight          Bank SelectedTrack 999
    
    
//  Navigation and Zoom
    
    Zoom                        Zoom
    
    Up                          Reaper _XENAKIOS_TVPAGEUP   // Xenakios/SWS: Scroll track view up (page)
    Down                        Reaper _XENAKIOS_TVPAGEDOWN // Xenakios-SWS: Scroll track view down 
    Left                        Reaper 40842                // Move edit cursor back one beat (no seek)
    Right                       Reaper 40841                // Move edit cursor forward one beat (no seek)
    
    Zoom+Up                     Reaper 40111                // Zoom in vertical                                            
    Zoom+Down                   Reaper 40112                // Zoom out vertical                                                       
    Zoom+Right                  Reaper 1012                 // Zoom in horizontal                                      
    Zoom+Left                   Reaper 1011                 // Zoom out horizontal                                     

    Marker+Up                   Reaper 40613                // Delete marker near cursor                                    
    Marker+Down                 Reaper 40157                // Insert marker at current or edit position                                      
    Marker+Right                Reaper 40173                // Go to next marker or project end                                      
    Marker+Left                 Reaper 40172                // Go to previous marker or project start           

    Nudge+Up                    Reaper 41925                // Item: Nudge items volume +1dB
    Nudge+Down                  Reaper 41924                // Item: Nudge items volume -1dB
    Nudge+Left                  Reaper 41279                // Item edit: Nudge left by saved nudge dialog settings 1
    Nudge+Right                 Reaper 41275                // Item edit: Nudge right by saved nudge dialog settings 1

    Scrub                       Scrub

//  JogWheel

    Decrease+JogWheel                MoveEditCursor Bar          
    Increase+JogWheel                MoveEditCustor Bar                                                 
    Shift+Decrease+JogWheel          Reaper 40286                // Track: Go to previous track       
    Shift+Increase+JogWheel          Reaper 40285                // Track: Go to next track                     
    
    Zoom+Decrease+JogWheel           Reaper 40112           // Zoom out vertical 
    Zoom+Increase+JogWheel           Reaper 40111           // Zoom in vertical          
    Zoom+Shift+Decrease+JogWheel     Reaper 1011            // Zoom out horizontal
    Zoom+Shift+Increase+JogWheel     Reaper 1012            // Zoom in horizontal   
  
    Marker+Decrease+JogWheel         MoveEditCursor Marker       
    Marker+Increase+JogWheel         MoveEditCusror Marker       
                                     
    Scrub+Decrease+Jogwheel          Reaper 40084                // Transport: Rewind a little bit
    Scrub+Increase+Jogwheel          Reaper 40085                // Transport: Fast forward a little bit

// Footswitches

    Footswitch1                 Reaper 40003                // Transport: Start/stop recording at next measure
    Footswitch2                 Reaper 40328                // Transport: Play/stop (move edit cursor on stop)

ZoneEnd

GoZones

GoZones are predefined zones with specific purposes, such as controlling track sends, receives, or FX menus. Place all of your GoZones that are not part of your HomeZones within the CSI\GoZone folder.

Any GoZones must be defined within a GoZones.zon file, that exists in your GoZones folder.

Zone GoZones
    SelectedTracks
    SelectedTrackSend
    SelectedTrackReceive
    SelectedTrackFXMenu
    MasterTrackFXMen
    TrackSend
    TrackReceive
    TrackFXMenu
    VCA
    Folder
    SelectedTrackTCPFX
ZoneEnd

Activating Zones

To activate zones, use the appropriate CSI actions. Predefined zones have dedicated actions for quick activation. Custom zones can be activated using similar actions defined within your configuration.

Zone you want to activiate...   ActionName...
Home                            GoHome
SelectedTrackFXMenu             GoZone SelectedTrackFXMenu
SelectedTrackSend               GoZone SelectedTrackSend
SelectedTrackReceive            GoZone SelectedTrackReceive
TrackFXMenu                     GoZone TrackFXMenu
TrackReceive                    GoZone TrackReceive
TrackSend                       GoZone TrackSend
MasterTrackFXMenu               GoZone MasterTrackFXMenu
SelectedTrackTCPFX              GoZone SelectedTrackTCPFX
SelectedTrackFX                 GoZone SelectedTrackFX
LearnFocusedFX                  LearnFocusedFX

Custom Zones

You can create custom zones in CSI for whatever purposes you'd like. Custom zones can have any name, and must be defined in your GoZones.zon. Note: the Zone name can contain spaces, however, if it does, the name must be wrapped in quotes.

Zone GoZones
    SelectedTracks
    SelectedTrackSend
    SelectedTrackReceive
    SelectedTrackFXMenu
    MasterTrackFXMenu
    TrackSend
    TrackReceive
    TrackFXMenu
    VCA
    Folder
    SelectedTrackTCPFX
    "Custom Zoom" SelectedTrackNavigator
    Trackzone_alternate TrackNavigator
ZoneEnd

In addition, Custom zones allow you to choose the "Navigator Type" you'd like to use for that zone. A Navigator defines the context (Track, SelectedTrack, SelectedTrackSends, etc.) that the Custom zone will operate in the context of. For instance, you could have an alternate Track zone that operates in the same "Track" context but has completely different assignments.

Don't forget to create GoZone assignments to activate these zones.

    F7    GoZone "Custom Zoom"
    F8    GoZone Trackzone_Alternate

The available Navigator types for custom zones are:

TrackNavigator
MasterTrackNavigator
SelectedTrackNavigator
FocusedFXNavigator

FX Zones

FX Zones are covered extensively in the FX Zones portion of the documentation.


SubZones

SubZones are custom zones that can be called up from their parent zone. If your SubZone name includes a space, wrapping the name in quotes is required (e.g. if your zone name is "Mix Zone"), however, it's a common CSI practice to include quotes in all zone names, though technically not required.

First, the SubZones need to be defined and within the parent zone (lines 2-4 below). You also need a way to activate the SubZone using the GoSubZone action (in this case, the Zoom button). Here is one example where a "Zoom" subzone is being called from the Home.zon:

Zone Home
    IncludedZones
        Track
       	MasterTrack
    IncludedZonesEnd
    SubZones
        Zoom
    SubZonesEnd

    Zoom        GoSubZone Zoom
ZoneEnd

The SubZone itself would look like any other standalone .zon file. Below is our Zoom.zon example. Also note that once we are in one of those custom SubZones, we need a way to exit the SubZone. You may want to use the same button you used to activate the SubZone and assign that to the LeaveSubZone action in order for it to behave like a toggle.

Zone Zoom
     Up                      Reaper 40111     // Zoom in vertical
     Down                    Reaper 40112     // Zoom out vertical
     Left                    Reaper 1011      // Zoom out horizontal
     Right                   Reaper 1012      // Zoom in horizontal
     
     Shift+Up                Reaper 40113     // View: Toggle track zoom to maximum height
     Shift+Down              Reaper 40110     // View: Toggle track zoom to minimum height
     Shift+Left              Reaper 40295     // View: Zoom out project
     Shift+Right             Reaper 41190     // View: Set horizontal zoom to default project setting

     Zoom LeaveSubZone
ZoneEnd

If you have multiple SubZones, you can go directly from SubZone to SubZone, as long as each SubZone is contained within the same enclosing Zone. Example: you can have "Zoom", "Marker", and "Scroll" SubZones, and navigate directly from SubZone to SubZone without needing to return home.

SubZones are also commonly used in FX, for example, where a mastering suite plugin may have lots of different sections and more automation than you have on your surface. In those instances, you could create a "compressor" SubZone, and a "limiter" SubZone, etc. See FX SubZones for more information.


Home and Track Zone Examples

Putting some of these concepts together, a common surface setup might include a Home.zon that has various CSI and Reaper actions that can be called up from the surface. Some of these buttons may even call other zones. Here's what a typical home.zon might look like for reference:

Zone Home
    OnInitialization     ToggleRestrictTextLength 7
    OnInitialization     ToggleEnableFocusedFXMapping
    OnInitialization     SetLatchTime 100

    IncludedZones
       Track
       MasterTrack
    IncludedZonesEnd

   
//  Encoder Assign Buttons

    Track                       ClearModifiers 
    Track                       GoHome
    Track                       DisableLastTouchedFXParamMapping Feedback=No
    Global+Track                GoZone SelectedTracks                             
    Pan                         GoZone Folder
    Global+Pan                  GoZone VCA                    
    EQ                          GoZone SelectedTrackReceive
    Global+EQ                   GoZone TrackReceive
    Send                        GoZone SelectedTrackSend
    Global+Send                 GoZone TrackSend  
    Plugin                      GoZone SelectedTrackFXMenu
    Global+Plugin               GoZone TracGoSelectedTrackFXkFXMenu                              
    Instrument                  LearnFocusedFX

//  Display Section

    nameValue                   Reaper 40696                // Track: Rename last touched track
    AssignmentDisplay           GlobalModeDisplay 
    TimeDisplay                 MCUTimeDisplay
    smpteBeats                  CycleTimeDisplayModes

 
//  View Buttons
 
    GlobalView                  Global
                                
    MidiTracks                  ClearModifiers
    MidiTracks                  AllSurfacesGoHome
    MidiTracks                  Reaper _S&M_WNCLS4          // Closes all(!) FX chain windows
    MidiTracks                  Reaper _S&M_WNCLS3          // Closes all(!) floating FX windows  
    Inputs                      GoZone SelectedTrackTCPFX
    AudioTracks                 GoZone MasterTrackFXMenu
    AudioInstrument             ToggleEnableFocusedFXMapping
    Aux                         ToggleEnableLastTouchedFXParamMapping
    Busses                      ToggleScrollLink
    Outputs                     GoSelectedTrackFX
    User                        ClearSelectedTrackFX
           
// Function Buttons

    F1                          Reaper 40454                // Screenset 1
    F2                          Reaper 40455                // Screenset 2
    F3                          Reaper 40456                // Screenset 3
    F4                          Reaper 40457                // Screenset 4 
    F5                          Reaper 40021                // File: Project settings..
    F6                          Reaper 43466                // Item Edit: Phase alignment
    F7                          Reaper 40293                // Track: View routing and I/O for current/last touched track
    F8                          Reaper 40327                // View: Show track group manager window

//  Modifiers

    Flip                        Flip
    Shift                       Shift
    Option                      Option
    Control                     Control
    Alt                         Alt     

// Automation Buttons

    Read                        TrackAutoMode 1
    Write                       TrackAutoMode 3
    Trim                        TrackAutoMode 0
    Touch                       TrackAutoMode 2
    Latch                       TrackAutoMode 4
    Group                       TrackAutoMode 5
    Global+Read                 GlobalAutoMode 1
    Global+Write                GlobalAutoMode 3
    Global+Trim                 GlobalAutoMode 0
    Global+Touch                GlobalAutoMode 2
    Global+Latch                GlobalAutoMode 4  
    Global+Group                GlobalAutoMode 5   

//  Utility Buttons

    Save                        SaveProject
    Undo                        Undo
    Hold+Undo                   Reaper 40072  NoFeedback              // View: Show undo history window
    Shift+Undo                  Redo
    Cancel                      NoAction
    Enter                       NoAction
    
//  Transport Section

    Marker                      Marker
    Nudge                       Nudge
    Cycle                       CycleTimeline
    Drop                        Reaper 1157                 // Toggle snapping
    Replace                     Reaper 1155                 // Cycle ripple editing mode
    Click                       Reaper 40364                // Toggle metronome
    Shift+Click                 Reaper _SWS_AWCOUNTRECTOG NoFeedback  // Toggle count-in before recording
    Hold+Click                  Reaper 40363 NoFeedback     // Show metronome settings
    Rewind                      Rewind   
    FastForward                 FastForward
    Stop                        Stop
    Hold+Stop                   Reaper 40042  NoFeedback    // Go to start of project
    Play                        Play
    Record                      Record    
    Solo                        ClearAllSolo
    Option+Solo                 Reaper 40745                // Solo in front (dim solo)  

//  Banking 

    BankLeft                    Bank Track -8
    BankRight                   Bank Track 8
    ChannelLeft                 Bank Track -1
    ChannelRight                Bank Track 1

//  Navigation and Zoom
    
    Zoom                        Zoom
    
    Up                          Reaper _XENAKIOS_TVPAGEUP   // Xenakios/SWS: Scroll track view up (page)
    Down                        Reaper _XENAKIOS_TVPAGEDOWN	// Xenakios-SWS: Scroll track view down 
    Left                        Reaper _SWS_SCROLL_L10      // SWS: Scroll left 10%
    Right                       Reaper _SWS_SCROLL_R10      // SWS: Scroll right 10%
    
    Zoom+Up                     Reaper 40111                // Zoom in vertical                                            
    Zoom+Down                   Reaper 40112                // Zoom out vertical                                                       
    Zoom+Right                  Reaper 1012                 // Zoom in horizontal                                      
    Zoom+Left                   Reaper 1011                 // Zoom out horizontal                                     

    Marker+Up                   Reaper 40613                // Delete marker near cursor                                    
    Marker+Down                 Reaper 40157                // Insert marker at current or edit position                                      
    Marker+Right                Reaper 40173                // Go to next marker or project end                                      
    Marker+Left                 Reaper 40172                // Go to previous marker or project start           

    Nudge+Up                    Reaper 41925                // Item: Nudge items volume +1dB
    Nudge+Down                  Reaper 41924                // Item: Nudge items volume -1dB
    Nudge+Left                  Reaper 41279                // Item edit: Nudge left by saved nudge dialog settings 1
    Nudge+Right                 Reaper 41275                // Item edit: Nudge right by saved nudge dialog settings 1

//  JogWheel

    Decrease+JogWheel           Reaper 40840                // Move edit cursor back one measure (no seek)  
    Increase+JogWheel           Reaper 40839                // Move edit cursor forward one measure (no seek)                                          
    Shift+Decrease+JogWheel     Reaper 40286                // Track: Go to previous track       
    Shift+Increase+JogWheel     Reaper 40285                // Track: Go to next track                     
    Option+Decrease+JogWheel    Reaper 40172                // Go to previous marker or project start
    Option+Increase+JogWheel    Reaper 40173                // Go to next marker or project end      
    
ZoneEnd

As another example, this is what a typical track.zon may look like

Zone Track
    VUMeter|                 TrackOutputMeterMaxPeakLR
    DisplayUpper|            TrackNameDisplay
    Fader|                   TrackVolume
    Touch+DisplayLower|      TrackVolumeDisplay
    Flip+Fader|              TrackPan 

    Rotary|                  TrackPanAutoLeft  RingStyle=Dot   // Pan
    Toggle+Rotary|           TrackPanAutoRight RingStyle=Dot  // Width
    DisplayLower|            TrackPanAutoLeftDisplay
    Toggle+DisplayLower|     TrackPanAutoRightDisplay

    RotaryPush|              ToggleChannel
    Control+RotaryPush|      TrackPan [ 0.5 ]
    Option+RotaryPush|       TrackPanWidth [ 1.0 ]
    
    RecordArm|               TrackRecordArm
    Option+RecordArm|        CycleTrackAutoMode
    Option+DisplayLower|     TrackAutoModeDisplay
    Alt+RecordArm|           TrackInvertPolarity
    Alt+DisplayLower|        TrackInvertPolarityDisplay
    
    // For recording -- latch Alt modifier
    Alt+Option+RotaryPush|      CycleTrackInputMonitor
    Alt+Option+DisplayLower|    TrackInputMonitorDisplay
    Alt+Control+DisplayLower| 	TrackRecordInputDisplay

    Solo|                    TrackSolo
    Mute|                    TrackMute
    Select|                  TrackUniqueSelect
    Shift+Select|            TrackRangeSelect
    Control+Select|          TrackSelect    
ZoneEnd

Using the Pipe "|" Character

The pipe (|) character is a shorthand notation used in CSI to automatically expand assignments across multiple channels. This is particularly useful for multi-channel control surfaces where a single definition should apply to multiple widgets.

How the Pipe Works

For example, the following definition in a .zon file:

Fader|  TrackVolume

CSI will internally expand that to multiple zones for...

Fader1  TrackVolume
Fader2  TrackVolume
Fader3  TrackVolume
Fader4  TrackVolume
Fader5  TrackVolume
Fader6  TrackVolume
Fader7  TrackVolume
Fader8  TrackVolume

This ensures that each fader on an 8-channel surface automatically maps to its corresponding track volume.

When to Use the Pipe Character

The pipe character should only be used in contexts where CSI dynamically generates multiple Zones. Some examples include:

  • Track (expands to Track1, Track2, etc.)
  • SelectedTracks
  • TrackFXMenu/SelectedTrackFXMenu
  • TrackSend/SelectedTrackSend
  • TrackReceive/SelectedTrackReceive
  • Folder/VCA

These contexts create multiple instances of a Zone, so using | allows a single definition to apply across all of them.

When NOT to Use the Pipe Character

For Zones that are not automatically expanded into multiple instances (e.g., SelectedTrack, FX zones), the pipe should not be used. In these cases, each widget should be explicitly defined.


Adding Comments to Zones

When triggering custom actions or using actions whose meanings may otherwise not be obvious, it's a good idea to add comments to your in your .zon files. CSI allows for two types of comments:

  1. / Lines that begin with a forward slash are completely ignored by CSI and are good for commenting sections of code. Hint: these also work in surface.txt files.
  2. // Trailing comments are preceeded by two forward slashes and can be used after an action in a .zon file

Here is an example from a .zon file that uses both types of comments.

Zone Home

/ Using the GlobalView button to activate the Home zone and then run the actions to close the floating FX windows.
    GlobalView                  GoHome
    GlobalView                  Reaper _S&M_WNCLS3          // Close all floating FX windows
    GlobalView                  Reaper _S&M_WNCLS4          // Close all FX chain windows
    GlobalView                  Reaper _S&M_TOGLFXCHAIN     // Toggle FX Chain for selected tracks