Atalhos de teclado
Personalize seus atalhos de teclado.
Personalize os atalhos de teclado do Dropstone com keymap em tui.json.
keymap é mesclado com os padrões integrados, então você só precisa configurar os atalhos que deseja alterar.
O campo keybinds mais antigo ainda é aceito como fallback de migração, mas está descontinuado. Se keymap estiver presente, Dropstone ignora keybinds.
Tecla líder
Dropstone usa uma tecla leader para muitos atalhos. Isso evita conflitos em seu terminal.
Por padrão, ctrl+x é a tecla líder e os atalhos de líder exigem que você primeiro pressione a tecla líder e depois o atalho. Por exemplo, para iniciar uma nova sessão, você primeiro pressiona ctrl+x e depois pressiona n.
Você não precisa usar uma tecla líder, mas recomendamos fazer isso.
Exemplo mínimo
{
"$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"]
}
}
}
}
Estrutura do keymap
keymap.sections é agrupado por área semântica. Cada seção contém nomes de comandos e a sequência de teclas que os ativa.
| Campo | Descrição |
|---|---|
leader | A tecla usada por sequências <leader>. Padrão é ctrl+x. |
leader_timeout | Quanto tempo Dropstone aguarda a próxima tecla após a tecla líder, em milissegundos. Padrão é 2000. |
sections | Um mapa de áreas de UI para vinculações de comando. |
Valores de vinculação
Uma string pode conter um atalho ou vários atalhos separados por vírgula. Você também pode usar um array para vários atalhos, ou "none"/false para desabilitar um 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"]
}
}
}
}
Para casos avançados, use um objeto com key, event, preventDefault ou fallthrough.
{
"$schema": "https://dropstone.io/schema/tui.json",
"keymap": {
"sections": {
"prompt": {
"prompt.paste": {
"key": "ctrl+v",
"preventDefault": false
}
}
}
}
}
Referência de keymap
Estes são os comandos visíveis ao usuário que você pode vincular. Comandos definidos como "none" estão disponíveis para vincular, mas desabilitados por padrão.
{
"$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 legados
keybinds está descontinuado. É mantido para que as configurações existentes continuem funcionando enquanto os usuários migram para keymap.
Use keybinds apenas quando keymap não estiver presente. Se ambos os campos forem definidos, keymap vence e keybinds são ignorados para resolução de atalhos.
{
"$schema": "https://dropstone.io/schema/tui.json",
"keybinds": {
"command_list": "ctrl+p",
"session_new": "<leader>n",
"session_compact": "<leader>c"
}
}
Padrões do Windows:
No Windows nativo, os padrões para desfazer e suspender terminal são diferentes tanto para keymap quanto para keybinds legados:
input.undopadrão éctrl+z,ctrl+-,super+zquando não explicitamente configurado (a vinculaçãoctrl+zé adicionada porque terminais Windows não suportam suspensão POSIX).terminal.suspendestá desabilitado porque terminais Windows nativos não suportam suspensão POSIX.
Atalhos de entrada integrados
A entrada do prompt suporta atalhos comuns de estilo Readline/Emacs para edição de texto. Estes são padrões integrados: você pode substituí-los na seção input de tui.json acima.
| Atalho | Ação |
|---|---|
ctrl+a | Mover para o início da linha atual |
ctrl+e | Mover para o fim da linha atual |
ctrl+b | Mover cursor um caractere para trás |
ctrl+f | Mover cursor um caractere para frente |
alt+b | Mover cursor uma palavra para trás |
alt+f | Mover cursor uma palavra para frente |
ctrl+d | Deletar caractere sob o cursor |
ctrl+k | Matar até o fim da linha |
ctrl+u | Matar até o início da linha |
ctrl+w | Matar palavra anterior |
alt+d | Matar próxima palavra |
ctrl+t | Transpor caracteres |
ctrl+g | Cancelar popovers / abortar resposta |
Shift+Enter
Alguns terminais não enviam teclas modificadoras com Enter por padrão. Você pode precisar configurar seu terminal para enviar Shift+Enter como uma sequência de escape.
Windows Terminal
Abra seu settings.json em:
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
Adicione isto ao array actions no nível raiz:
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u"
},
"id": "User.sendInput.ShiftEnterCustom"
}
]
Adicione isto ao array keybindings no nível raiz:
"keybindings": [
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]
Salve o arquivo e reinicie Windows Terminal ou abra uma nova aba.