Associazioni di tasti
Personalizza i tuoi scorciatoie da tastiera.
Personalizza gli scorciatoie da tastiera di Dropstone con keymap in tui.json.
keymap viene unito con i valori predefiniti incorporati, quindi devi configurare solo gli scorciatoie che desideri modificare.
Il campo keybinds più vecchio è ancora accettato come fallback di migrazione ma è deprecato. Se keymap è presente, Dropstone ignora keybinds.
Tasto leader
Dropstone utilizza un tasto leader per molti scorciatoie. Questo evita conflitti nel tuo terminale.
Per impostazione predefinita, ctrl+x è il tasto leader e gli scorciatoie leader richiedono di premere prima il tasto leader e poi lo scorciatoio. Ad esempio, per avviare una nuova sessione premi prima ctrl+x e poi premi n.
Non è necessario utilizzare un tasto leader, ma ti consigliamo di farlo.
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 della keymap
keymap.sections è raggruppato per area semantica. Ogni sezione contiene nomi di comandi e la sequenza di tasti che li attiva.
| Campo | Descrizione |
|---|---|
leader | Il tasto utilizzato dalle sequenze <leader>. Predefinito a ctrl+x. |
leader_timeout | Quanto tempo Dropstone attende il tasto successivo dopo il tasto leader, in millisecondi. Predefinito a 2000. |
sections | Una mappa di aree dell'interfaccia utente ai binding dei comandi. |
Valori di binding
Una stringa può contenere uno scorciatoio o più scorciatoie separate da virgole. Puoi anche utilizzare un array per più scorciatoie, o "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, utilizza 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 della keymap
Questi sono i comandi rivolti all'utente che puoi associare. I comandi impostati a "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",
"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. Viene mantenuto affinché le configurazioni esistenti continuino a funzionare mentre gli utenti migrano a keymap.
Utilizza keybinds solo quando keymap non è presente. Se entrambi i campi sono impostati, keymap vince e keybinds vengono ignorati per la risoluzione degli 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, i valori predefiniti per annulla e sospensione del terminale sono diversi sia per keymap che per il legacy keybinds:
input.undopredefinito actrl+z,ctrl+-,super+zquando non esplicitamente configurato (il bindingctrl+zviene 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 incorporate
L'input del prompt supporta comuni scorciatoie in stile Readline/Emacs per la modifica del testo. Questi sono i valori predefiniti incorporati: puoi sovrascriverli nella sezione input di tui.json sopra.
| Scorciatoio | Azione |
|---|---|
ctrl+a | Sposta all'inizio della riga corrente |
ctrl+e | Sposta alla fine della riga corrente |
ctrl+b | Sposta il cursore indietro di un carattere |
ctrl+f | Sposta il cursore avanti di un carattere |
alt+b | Sposta il cursore indietro di una parola |
alt+f | Sposta il cursore avanti di una parola |
ctrl+d | Elimina il carattere sotto il cursore |
ctrl+k | Elimina fino alla fine della riga |
ctrl+u | Elimina fino all'inizio della riga |
ctrl+w | Elimina la parola precedente |
alt+d | Elimina la parola successiva |
ctrl+t | Trasponi caratteri |
ctrl+g | Annulla i popover / interrompi la risposta in esecuzione |
Shift+Enter
Alcuni terminali non inviano tasti modificatori con Enter per impostazione predefinita. Potrebbe essere necessario 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 o apri una nuova scheda.