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.
| Campo | Descripción |
|---|---|
leader | La tecla utilizada por las secuencias <leader>. El valor predeterminado es ctrl+x. |
leader_timeout | Cuánto tiempo espera Dropstone por la siguiente tecla después de la tecla líder, en milisegundos. El valor predeterminado es 2000. |
sections | Un 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.undotiene como valor predeterminadoctrl+z,ctrl+-,super+zcuando no se configura explícitamente (el enlacectrl+zse agrega porque las terminales de Windows no admiten suspensión POSIX).terminal.suspendestá 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.
| Atajo | Acción |
|---|---|
ctrl+a | Moverse al inicio de la línea actual |
ctrl+e | Moverse al final de la línea actual |
ctrl+b | Mover el cursor un carácter hacia atrás |
ctrl+f | Mover el cursor un carácter hacia adelante |
alt+b | Mover el cursor una palabra hacia atrás |
alt+f | Mover el cursor una palabra hacia adelante |
ctrl+d | Eliminar el carácter bajo el cursor |
ctrl+k | Eliminar hasta el final de la línea |
ctrl+u | Eliminar hasta el inicio de la línea |
ctrl+w | Eliminar la palabra anterior |
alt+d | Eliminar la siguiente palabra |
ctrl+t | Transponer caracteres |
ctrl+g | Cancelar 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.