---
title: Bindings
description: Triggers, the moments a key can act at, and their timing.
---

A binding is one trigger and what it does. Unlike a plain shortcut map, one key can
act at several moments: on press, on a quick tap, after a hold, on release, after a
pause, or when another key goes down while it's held.

## Triggers

The binding editor's **Trigger** row records a key with its modifiers. From there:

| To make | Do |
| --- | --- |
| A chord (keys together) | **+ with**, then record the next key. **Pressed together within** sets the window. |
| A sequence (keys in order) | **+ then**, then record the next key. **Each key within** sets the timeout. |
| A side-specific modifier | **Left / right…** |
| A double-tap | Turn on **Double-tap** in the Binding row |

Mouse buttons and media keys can be triggers too, but only through import; the
recorder can't capture them. **Chord rules…** sets a chord's key order, when it
releases, and an action for the release.

## Moments

Under **Actions**, each moment is a point on a line. **+ Moment** adds one.

| Moment | Fires | Karabiner |
| --- | --- | --- |
| Press | On key down | `to` |
| Tap | On a quick press and release | `to_if_alone` |
| Hold | Once held past the hold time | `to_if_held_down` |
| Release | On key up | `to_after_key_up` |
| Delayed | After a pause with no other key | `to_delayed_action.to_if_invoked` |
| Canceled | When another key interrupts the pause | `to_delayed_action.to_if_canceled` |
| Other key | When another key goes down while this one is held | `to_if_other_key_pressed` |

In this Leader layer, <kbd>w</kbd> sends ⌘W on tap and ⌘⇧W on hold:

![The Leader layer, with separate Tap and Hold actions on W](/blume-assets/content/assets/screenshots/layer-leader.png)

## Timing

Each threshold sits on the moment it decides, and an open moment shows a slider.

| Moment | Default | Karabiner |
| --- | --- | --- |
| Hold | 500 ms | `to_if_held_down_threshold_milliseconds` |
| Tap | 1000 ms, shown beside Hold or Press | `to_if_alone_timeout_milliseconds` |
| Delayed and Canceled | 500 ms, shared | `to_delayed_action_delay_milliseconds` |

A threshold you never touch isn't written, so Karabiner's default applies.

## Only when

**Only when** limits the whole binding with [conditions](/docs/authoring/conditions).
Its layer's conditions apply on top.

## Saving

Edits in the binding editor are a draft until **Save**. Generating skips unsaved
drafts. Everything else in Vimputer, such as layers and variables, saves as you go.
