Dropstone Docs

Atajos de teclado

Personaliza tus atajos de teclado.

Personaliza los atajos de teclado de Dropstone con keymap en tui.json.

keymap se fusiona con los valores predeterminados integrados, por lo que solo necesitas configurar los atajos que deseas cambiar.

El campo keybinds más antiguo sigue siendo aceptado como alternativa de migración pero está deprecado. Si keymap está presente, Dropstone ignora keybinds.


Tecla líder

Dropstone utiliza una tecla leader para muchos atajos. Esto evita conflictos en tu terminal.

Por defecto, ctrl+x es la tecla líder y los atajos de líder requieren que primero presiones la tecla líder y luego el atajo. Por ejemplo, para iniciar una nueva sesión primero presionas ctrl+x y luego presionas n.

No necesitas usar una tecla líder, pero te recomendamos que lo hagas.


Ejemplo 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"]
      }
    }
  }
}

Estructura del mapa de teclas

keymap.sections se agrupa por área semántica. Cada sección contiene nombres de comandos y la secuencia de teclas que los activa.

CampoDescripción
leaderLa tecla utilizada por secuencias <leader>. Por defecto es ctrl+x.
leader_timeoutCuánto tiempo espera Dropstone por la siguiente tecla después de la tecla líder, en milisegundos. Por defecto es 2000.
sectionsUn mapa de áreas de interfaz a enlaces de comandos.

Valores de enlace

Una cadena puede contener un atajo o múltiples atajos separados por comas. También puedes usar un array para múltiples atajos, o "none"/false para deshabilitar 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"]
      }
    }
  }
}

Para casos avanzados, usa un objeto con key, event, preventDefault, o fallthrough.

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

Referencia del mapa de teclas

Estos son los comandos visibles para el usuario que puedes enlazar. Los comandos establecidos en "none" están disponibles para enlazar pero deshabilitados por defecto.

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

keybinds está deprecado. Se mantiene para que las configuraciones existentes continúen funcionando mientras los usuarios migran a keymap.

Solo usa keybinds cuando keymap no esté presente. Si ambos campos están configurados, keymap gana e keybinds se ignoran para la resolución de atajos.

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

Valores predeterminados de Windows:

En Windows nativo, los valores predeterminados para deshacer y suspender terminal son diferentes tanto para keymap como para keybinds heredado:

  • input.undo por defecto es ctrl+z,ctrl+-,super+z cuando no está explícitamente configurado (el enlace ctrl+z se agrega porque los terminales de Windows no admiten suspensión POSIX).
  • terminal.suspend está deshabilitado porque los terminales nativos de Windows no admiten suspensión POSIX.

Atajos de entrada integrados

La entrada del prompt admite atajos comunes de estilo Readline/Emacs para editar texto. Estos son valores predeterminados integrados: puedes anularlos en la sección input de tui.json anterior.

AtajoAcción
ctrl+aMover al inicio de la línea actual
ctrl+eMover al final de la línea actual
ctrl+bMover cursor un carácter hacia atrás
ctrl+fMover cursor un carácter hacia adelante
alt+bMover cursor una palabra hacia atrás
alt+fMover cursor una palabra hacia adelante
ctrl+dEliminar carácter bajo el cursor
ctrl+kEliminar hasta el final de la línea
ctrl+uEliminar hasta el inicio de la línea
ctrl+wEliminar palabra anterior
alt+dEliminar siguiente palabra
ctrl+tTransponer caracteres
ctrl+gCancelar popovers / abortar respuesta

Shift+Enter

Algunos terminales no envían teclas modificadoras con Enter por defecto. Es posible que necesites configurar tu terminal para enviar Shift+Enter como una secuencia de escape.

Windows Terminal

Abre tu settings.json en:

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

Agrega esto al array actions de nivel raíz:

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

Agrega esto al array keybindings de nivel raíz:

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

Guarda el archivo y reinicia Windows Terminal o abre una nueva pestaña.

Ctrl+I