Dropstone Docs

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.

CampoDescrição
leaderA tecla usada por sequências <leader>. Padrão é ctrl+x.
leader_timeoutQuanto tempo Dropstone aguarda a próxima tecla após a tecla líder, em milissegundos. Padrão é 2000.
sectionsUm 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.undo padrão é ctrl+z,ctrl+-,super+z quando não explicitamente configurado (a vinculação ctrl+z é adicionada porque terminais Windows não suportam suspensão POSIX).
  • terminal.suspend está 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.

AtalhoAção
ctrl+aMover para o início da linha atual
ctrl+eMover para o fim da linha atual
ctrl+bMover cursor um caractere para trás
ctrl+fMover cursor um caractere para frente
alt+bMover cursor uma palavra para trás
alt+fMover cursor uma palavra para frente
ctrl+dDeletar caractere sob o cursor
ctrl+kMatar até o fim da linha
ctrl+uMatar até o início da linha
ctrl+wMatar palavra anterior
alt+dMatar próxima palavra
ctrl+tTranspor caracteres
ctrl+gCancelar 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.

Ctrl+I