Atalhos de Teclado
Personalize seus atalhos de teclado.
Personalize os atalhos de teclado do Dropstone com keymap em tui.json.
O keymap é mesclado com os padrões integrados, então você só precisa configurar os atalhos que deseja alterar.
O campo antigo keybinds ainda é aceito como fallback de migração, mas está obsoleto. Se keymap estiver presente, o Dropstone ignora keybinds.
Tecla líder
O Dropstone usa uma tecla leader para muitos atalhos. Isso evita conflitos no seu terminal.
Por padrão, ctrl+x é a tecla líder e os atalhos com líder exigem que você pressione primeiro a tecla líder e depois o atalho. Por exemplo, para iniciar uma nova sessão, você pressiona ctrl+x e depois n.
Você não precisa usar uma tecla líder, mas recomendamos fazê-lo.
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 aciona.
| Campo | Descrição |
|---|---|
leader | A tecla usada pelas sequências <leader>. O padrão é ctrl+x. |
leader_timeout | Quanto tempo o Dropstone espera pela próxima tecla após a tecla líder, em milissegundos. O padrão é 2000. |
sections | Um mapa de áreas da interface para vinculações de comandos. |
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 do keymap
Estes são os comandos voltados ao usuário que você pode vincular. Comandos definidos como "none" estão disponíveis para vinculação, 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",
"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 legados
keybinds está obsoleto. Ele é 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 estiverem definidos, keymap tem precedência e keybinds é ignorado para a 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 no Windows:
No Windows nativo, os padrões para desfazer e suspender terminal são diferentes tanto para keymap quanto para keybinds legados:
input.undotem como padrãoctrl+z,ctrl+-,super+zquando não configurado explicitamente (a vinculaçãoctrl+zé adicionada porque os terminais do Windows não suportam suspensão POSIX).terminal.suspendestá desabilitado porque os terminais nativos do Windows não suportam suspensão POSIX.
Atalhos de entrada integrados
A entrada do prompt suporta atalhos comuns no estilo Readline/Emacs para edição de texto. Estes são padrões integrados: você pode substituí-los na seção input do 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 o cursor um caractere para trás |
ctrl+f | Mover o cursor um caractere para frente |
alt+b | Mover o cursor uma palavra para trás |
alt+f | Mover o cursor uma palavra para frente |
ctrl+d | Excluir o caractere sob o cursor |
ctrl+k | Excluir até o fim da linha |
ctrl+u | Excluir até o início da linha |
ctrl+w | Excluir a palavra anterior |
alt+d | Excluir a próxima palavra |
ctrl+t | Transpor caracteres |
ctrl+g | Cancelar popovers / abortar resposta em execução |
Shift+Enter
Alguns terminais não enviam teclas modificadoras com Enter por padrão. Talvez seja necessário 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 o Windows Terminal ou abra uma nova aba.