Dropstone CLI

Keybinds

Personalizza le scorciatoie da tastiera.

Personalizza le scorciatoie da tastiera di Dropstone con keymap in tui.json.

keymap viene unito alle impostazioni predefinite integrate, quindi devi configurare solo le scorciatoie che vuoi cambiare.

Il vecchio campo keybinds è ancora accettato come fallback di migrazione, ma è deprecato. Se keymap è presente, Dropstone ignora keybinds.


Tasto leader

Dropstone usa un tasto leader per molte scorciatoie. Questo evita conflitti nel tuo terminale.

Per impostazione predefinita, ctrl+x è il tasto leader e le scorciatoie leader richiedono di premere prima il tasto leader e poi la scorciatoia. Ad esempio, per avviare una nuova sessione premi prima ctrl+x e poi n.

Non sei obbligato a usare un tasto leader, ma lo consigliamo.


Esempio minimo

{
  "$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"]
      }
    }
  }
}

Struttura di keymap

keymap.sections è raggruppato per area semantica. Ogni sezione contiene nomi di comandi e la sequenza di tasti che li attiva.

CampoDescrizione
leaderIl tasto usato dalle sequenze <leader>. Predefinito: ctrl+x.
leader_timeoutPer quanto tempo Dropstone attende il tasto successivo dopo il tasto leader, in millisecondi. Predefinito: 2000.
sectionsUna mappa delle aree dell'interfaccia ai binding dei comandi.

Valori di binding

Una stringa può contenere una scorciatoia o più scorciatoie separate da virgole. Puoi anche usare un array per più scorciatoie, oppure "none"/false per disabilitare un comando.

{
  "$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"]
      }
    }
  }
}

Per casi avanzati, usa un oggetto con key, event, preventDefault o fallthrough.

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

Riferimento keymap

Questi sono i comandi rivolti all'utente che puoi associare. I comandi impostati su "none" sono disponibili per l'associazione ma disabilitati per impostazione predefinita.

{
  "$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"
      }
    }
  }
}

Keybinds legacy

keybinds è deprecato. È mantenuto per consentire alle configurazioni esistenti di continuare a funzionare mentre gli utenti migrano a keymap.

Usa keybinds solo quando keymap non è presente. Se entrambi i campi sono impostati, keymap ha la precedenza e keybinds vengono ignorati per la risoluzione delle scorciatoie.

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

Impostazioni predefinite di Windows

Su Windows nativo, le impostazioni predefinite per annulla e sospensione del terminale sono diverse sia per keymap che per keybinds legacy:

  • input.undo è predefinito a ctrl+z,ctrl+-,super+z quando non è configurato esplicitamente (il binding ctrl+z viene aggiunto perché i terminali Windows non supportano la sospensione POSIX).
  • terminal.suspend è disabilitato perché i terminali Windows nativi non supportano la sospensione POSIX.

Scorciatoie di input integrate

L'input del prompt supporta le comuni scorciatoie in stile Readline/Emacs per modificare il testo. Queste sono le impostazioni predefinite integrate: puoi sovrascriverle nella sezione input di tui.json qui sopra.

ScorciatoiaAzione
ctrl+aVai all'inizio della riga corrente
ctrl+eVai alla fine della riga corrente
ctrl+bSposta il cursore indietro di un carattere
ctrl+fSposta il cursore avanti di un carattere
alt+bSposta il cursore indietro di una parola
alt+fSposta il cursore avanti di una parola
ctrl+dElimina il carattere sotto il cursore
ctrl+kElimina fino alla fine della riga
ctrl+uElimina fino all'inizio della riga
ctrl+wElimina la parola precedente
alt+dElimina la parola successiva
ctrl+tTrasponi i caratteri
ctrl+gAnnulla i popover / interrompi la risposta in corso

Shift+Enter

Alcuni terminali non inviano i tasti modificatori con Invio per impostazione predefinita. Potresti dover configurare il tuo terminale per inviare Shift+Enter come sequenza di escape.

Windows Terminal

Apri il tuo settings.json in:

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

Aggiungi questo all'array actions a livello di root:

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

Aggiungi questo all'array keybindings a livello di root:

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

Salva il file e riavvia Windows Terminal oppure apri una nuova scheda.

Ctrl+I