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 secours pour la migration mais est déprécié. 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 vous obligent à d'abord appuyer sur la touche leader, puis sur le raccourci. Par exemple, pour démarrer une nouvelle session, vous appuyez d'abord sur ctrl+x, puis sur n.

Vous n'avez pas besoin d'utiliser une touche leader, mais nous vous 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 groupé 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 par 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 carte des zones d'interface utilisateur aux 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 keymap

Ce sont les commandes accessibles à l'utilisateur que vous pouvez lier. Les commandes définies sur "none" sont disponibles à 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",
        "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"
      }
    }
  }
}

Keybinds hérités

keybinds est déprécié. Il est conservé pour que les configurations existantes continuent de fonctionner pendant que les utilisateurs migrent vers keymap.

Utilisez uniquement keybinds quand keymap n'est pas présent. Si les deux champs sont définis, keymap gagne 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 keybinds hérité :

  • input.undo par défaut ctrl+z,ctrl+-,super+z quand non explicitement configuré (la liaison ctrl+z est ajoutée car les terminaux Windows ne supportent pas la suspension POSIX).
  • terminal.suspend est désactivé car les terminaux Windows natifs ne supportent pas la suspension POSIX.

Raccourcis d'entrée intégrés

L'entrée de l'invite supporte les raccourcis courants de style Readline/Emacs pour éditer du texte. Ce sont des 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 actuelle
ctrl+eAller à la fin de la ligne actuelle
ctrl+bDéplacer le curseur d'un caractère en arrière
ctrl+fDéplacer le curseur d'un caractère en avant
alt+bDéplacer le curseur d'un mot en arrière
alt+fDéplacer le curseur d'un mot en avant
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 / abandonner la réponse en cours

Shift+Enter

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

Windows Terminal

Ouvrez votre settings.json à :

%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