Dropstone Docs

Raccourcis clavier

Personnalisez vos raccourcis clavier.

Personnalisez les raccourcis clavier de Dropstone avec keymap dans tui.json.

keymap est fusionné avec les valeurs par défaut intégrées, vous n'avez donc besoin de configurer que les raccourcis que vous souhaitez modifier.

L'ancien champ keybinds est toujours accepté comme solution de repli pour la migration, mais il est obsolète. Si keymap est présent, Dropstone ignore keybinds.


Touche leader

Dropstone utilise une touche leader pour de nombreux raccourcis. Cela évite les conflits dans votre terminal.

Par défaut, ctrl+x est la touche leader et les raccourcis leader nécessitent d'appuyer d'abord sur la touche leader, puis sur le raccourci. Par exemple, pour démarrer une nouvelle session, appuyez d'abord sur ctrl+x, puis sur n.

Vous n'êtes pas obligé d'utiliser une touche leader, mais nous le recommandons.


Exemple minimal

{
  "$schema": "https://dropstone.io/schema/tui.json",
  "keymap": {
    "leader": "ctrl+x",
    "leader_timeout": 2000,
    "sections": {
      "global": {
        "command.palette.show": "ctrl+p",
        "session.new": "<leader>n",
        "session.list": "<leader>l"
      },
      "session": {
        "session.compact": "<leader>c",
        "session.undo": "<leader>u",
        "session.redo": "<leader>r"
      },
      "input": {
        "input.submit": "return",
        "input.newline": ["shift+return", "ctrl+return", "alt+return", "ctrl+j"]
      }
    }
  }
}

Structure de keymap

keymap.sections est regroupé par zone sémantique. Chaque section contient des noms de commandes et la séquence de touches qui les déclenche.

ChampDescription
leaderLa touche utilisée pour les séquences <leader>. Par défaut ctrl+x.
leader_timeoutDurée pendant laquelle Dropstone attend la touche suivante après la touche leader, en millisecondes. Par défaut 2000.
sectionsUne correspondance des zones d'interface utilisateur avec les liaisons de commandes.

Valeurs de liaison

Une chaîne peut contenir un raccourci ou plusieurs raccourcis séparés par des virgules. Vous pouvez également utiliser un tableau pour plusieurs raccourcis, ou "none"/false pour désactiver une commande.

{
  "$schema": "https://dropstone.io/schema/tui.json",
  "keymap": {
    "sections": {
      "session": {
        "session.compact": "none",
        "session.export": "<leader>x,ctrl+shift+x",
        "session.copy": ["<leader>y", "ctrl+shift+c"]
      }
    }
  }
}

Pour les cas avancés, utilisez un objet avec key, event, preventDefault ou fallthrough.

{
  "$schema": "https://dropstone.io/schema/tui.json",
  "keymap": {
    "sections": {
      "prompt": {
        "prompt.paste": {
          "key": "ctrl+v",
          "preventDefault": false
        }
      }
    }
  }
}

Référence de keymap

Voici les commandes destinées à l'utilisateur que vous pouvez lier. Les commandes définies sur "none" sont disponibles pour la liaison mais désactivées par défaut.

{
  "$schema": "https://dropstone.io/schema/tui.json",
  "keymap": {
    "leader": "ctrl+x",
    "leader_timeout": 2000,
    "sections": {
      "global": {
        "command.palette.show": "ctrl+p",
        "session.list": "<leader>l",
        "session.new": "<leader>n",
        "model.list": "<leader>m",
        "model.cycle_recent": "f2",
        "model.cycle_recent_reverse": "shift+f2",
        "agent.list": "<leader>a",
        "agent.cycle": "tab",
        "agent.cycle.reverse": "shift+tab",
        "variant.cycle": "ctrl+t",
        "variant.list": "none",
        "help.show": "none",
        "workspace.open": "ctrl+o,<leader>o",
        "app.exit": "ctrl+c,ctrl+d,<leader>q",
        "terminal.suspend": "ctrl+z"
      },
      "session": {
        "session.rename": "ctrl+r",
        "session.timeline": "<leader>g",
        "session.fork": "none",
        "session.compact": "<leader>c",
        "session.undo": "<leader>u",
        "session.redo": "<leader>r",
        "session.sidebar.toggle": "<leader>b",
        "session.toggle.conceal": "<leader>h",
        "session.page.up": "pageup,ctrl+alt+b",
        "session.page.down": "pagedown,ctrl+alt+f",
        "session.line.up": "ctrl+alt+y",
        "session.line.down": "ctrl+alt+e",
        "session.half.page.up": "ctrl+alt+u",
        "session.half.page.down": "ctrl+alt+d",
        "session.first": "ctrl+g,home",
        "session.last": "ctrl+alt+g,end",
        "messages.copy": "<leader>y",
        "session.copy": "none",
        "session.export": "<leader>x",
        "session.child.first": "<leader>down",
        "session.parent": "up",
        "session.child.next": "right",
        "session.child.previous": "left"
      },
      "prompt": {
        "prompt.submit": "none",
        "prompt.editor": "<leader>e",
        "session.interrupt": "escape",
        "prompt.clear": "ctrl+c",
        "prompt.paste": {
          "key": "ctrl+v",
          "preventDefault": false
        },
        "prompt.history.previous": "up",
        "prompt.history.next": "down"
      },
      "autocomplete": {
        "prompt.autocomplete.prev": "up,ctrl+p",
        "prompt.autocomplete.next": "down,ctrl+n",
        "prompt.autocomplete.hide": "escape",
        "prompt.autocomplete.select": "return",
        "prompt.autocomplete.complete": "tab"
      },
      "input": {
        "input.submit": "return",
        "input.newline": "shift+return,ctrl+return,alt+return,ctrl+j",
        "input.move.left": "left,ctrl+b",
        "input.move.right": "right,ctrl+f",
        "input.move.up": "up",
        "input.move.down": "down",
        "input.select.left": "shift+left",
        "input.select.right": "shift+right",
        "input.select.up": "shift+up",
        "input.select.down": "shift+down",
        "input.line.home": "ctrl+a",
        "input.line.end": "ctrl+e",
        "input.select.line.home": "ctrl+shift+a",
        "input.select.line.end": "ctrl+shift+e",
        "input.visual.line.home": "alt+a",
        "input.visual.line.end": "alt+e",
        "input.select.visual.line.home": "alt+shift+a",
        "input.select.visual.line.end": "alt+shift+e",
        "input.buffer.home": "home",
        "input.buffer.end": "end",
        "input.select.buffer.home": "shift+home",
        "input.select.buffer.end": "shift+end",
        "input.delete.line": "ctrl+shift+d",
        "input.delete.to.line.end": "ctrl+k",
        "input.delete.to.line.start": "ctrl+u",
        "input.backspace": "backspace,shift+backspace",
        "input.delete": "ctrl+d,delete,shift+delete",
        "input.undo": "ctrl+-,super+z",
        "input.redo": "ctrl+.,super+shift+z",
        "input.word.forward": "alt+f,alt+right,ctrl+right",
        "input.word.backward": "alt+b,alt+left,ctrl+left",
        "input.select.word.forward": "alt+shift+f,alt+shift+right",
        "input.select.word.backward": "alt+shift+b,alt+shift+left",
        "input.delete.word.forward": "alt+d,alt+delete,ctrl+delete",
        "input.delete.word.backward": "ctrl+w,ctrl+backspace,alt+backspace",
        "input.select.all": "super+a"
      },
      "dialog_select": {
        "dialog.select.prev": "up,ctrl+p",
        "dialog.select.next": "down,ctrl+n",
        "dialog.select.page_up": "pageup",
        "dialog.select.page_down": "pagedown",
        "dialog.select.home": "home",
        "dialog.select.end": "end",
        "dialog.select.submit": "return"
      },
      "dialog_actions": {
        "dialog.action.toggle": "space",
        "dialog.action.delete": "ctrl+d",
        "dialog.action.rename": "ctrl+r"
      },
      "permission": {
        "permission.reject.cancel": "ctrl+c,ctrl+d,<leader>q",
        "permission.prompt.escape": "ctrl+c,ctrl+d,<leader>q",
        "permission.prompt.fullscreen": "ctrl+f"
      },
      "question": {
        "question.reject": "ctrl+c,ctrl+d,<leader>q",
        "question.edit.clear": "ctrl+c"
      },
      "home_tips": {
        "tips.toggle": "<leader>h"
      }
    }
  }
}

Anciens keybinds

keybinds est obsolète. Il est conservé pour que les configurations existantes continuent de fonctionner pendant que les utilisateurs migrent vers keymap.

N'utilisez keybinds que lorsque keymap n'est pas présent. Si les deux champs sont définis, keymap a priorité et keybinds sont ignorés pour la résolution des raccourcis.

{
  "$schema": "https://dropstone.io/schema/tui.json",
  "keybinds": {
    "command_list": "ctrl+p",
    "session_new": "<leader>n",
    "session_compact": "<leader>c"
  }
}

Valeurs par défaut Windows:

Sur Windows natif, les valeurs par défaut pour annuler et suspendre le terminal sont différentes pour keymap et les anciens keybinds :

  • input.undo est défini par défaut sur ctrl+z,ctrl+-,super+z lorsqu'il n'est pas explicitement configuré (la liaison ctrl+z est ajoutée car les terminaux Windows ne prennent pas en charge la suspension POSIX).
  • terminal.suspend est désactivé car les terminaux Windows natifs ne prennent pas en charge la suspension POSIX.

Raccourcis de saisie intégrés

L'entrée de l'invite prend en charge les raccourcis courants de style Readline/Emacs pour l'édition de texte. Ce sont les valeurs par défaut intégrées : vous pouvez les remplacer dans la section input de tui.json ci-dessus.

RaccourciAction
ctrl+aAller au début de la ligne courante
ctrl+eAller à la fin de la ligne courante
ctrl+bReculer le curseur d'un caractère
ctrl+fAvancer le curseur d'un caractère
alt+bReculer le curseur d'un mot
alt+fAvancer le curseur d'un mot
ctrl+dSupprimer le caractère sous le curseur
ctrl+kSupprimer jusqu'à la fin de la ligne
ctrl+uSupprimer jusqu'au début de la ligne
ctrl+wSupprimer le mot précédent
alt+dSupprimer le mot suivant
ctrl+tTransposer les caractères
ctrl+gAnnuler les popovers / interrompre la réponse en cours

Shift+Entrée

Certains terminaux n'envoient pas les touches modificatrices avec Entrée par défaut. Vous devrez peut-être configurer votre terminal pour envoyer Shift+Entrée comme séquence d'échappement.

Windows Terminal

Ouvrez votre settings.json à l'emplacement :

%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json

Ajoutez ceci au tableau actions au niveau racine :

"actions": [
  {
    "command": {
      "action": "sendInput",
      "input": "\u001b[13;2u"
    },
    "id": "User.sendInput.ShiftEnterCustom"
  }
]

Ajoutez ceci au tableau keybindings au niveau racine :

"keybindings": [
  {
    "keys": "shift+enter",
    "id": "User.sendInput.ShiftEnterCustom"
  }
]

Enregistrez le fichier et redémarrez Windows Terminal ou ouvrez un nouvel onglet.

Ctrl+I