Dropstone Docs

Atajos de teclado

Personaliza tus atajos de teclado.

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

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

El campo anterior keybinds todavía se acepta como respaldo de migración, pero está obsoleto. 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 con 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 es necesario usar una tecla líder, pero lo recomendamos.


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 de keymap

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 las secuencias <leader>. El valor predeterminado es ctrl+x.
leader_timeoutCuánto tiempo espera Dropstone por la siguiente tecla después de la tecla líder, en milisegundos. El valor predeterminado es 2000.
sectionsUn mapa de áreas de interfaz a enlaces de comandos.

Valores de enlace

Una cadena puede contener un atajo o varios atajos separados por comas. También puedes usar un arreglo 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 de keymap

Estos son los comandos orientados al usuario que puedes enlazar. Los comandos configurados como "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",
        "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 heredados

keybinds está obsoleto. Se mantiene para que las configuraciones existentes sigan funcionando mientras los usuarios migran a keymap.

Solo usa keybinds cuando keymap no esté presente. Si ambos campos están configurados, keymap tiene prioridad y 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 en Windows:

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

  • input.undo tiene como valor predeterminado ctrl+z,ctrl+-,super+z cuando no se configura explícitamente (el enlace ctrl+z se agrega porque las terminales de Windows no admiten suspensión POSIX).
  • terminal.suspend está deshabilitado porque las terminales nativas de Windows no admiten suspensión POSIX.

Atajos de entrada integrados

La entrada del prompt admite atajos comunes 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+aMoverse al inicio de la línea actual
ctrl+eMoverse al final de la línea actual
ctrl+bMover el cursor un carácter hacia atrás
ctrl+fMover el cursor un carácter hacia adelante
alt+bMover el cursor una palabra hacia atrás
alt+fMover el cursor una palabra hacia adelante
ctrl+dEliminar el 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 la palabra anterior
alt+dEliminar la siguiente palabra
ctrl+tTransponer caracteres
ctrl+gCancelar popovers / abortar respuesta en curso

Shift+Enter

Algunas 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 arreglo actions de nivel raíz:

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

Agrega esto al arreglo 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