Dropstone Docs

Горячие клавиши

Настройте ваши сочетания клавиш.

Настройте сочетания клавиш Dropstone с помощью keymap в tui.json.

keymap объединяется со встроенными значениями по умолчанию, поэтому вам нужно настроить только те сочетания, которые вы хотите изменить.

Старое поле keybinds по-прежнему принимается как резервный вариант миграции, но является устаревшим. Если присутствует keymap, Dropstone игнорирует keybinds.


Клавиша-лидер

Dropstone использует клавишу leader для многих сочетаний. Это избегает конфликтов в вашем терминале.

По умолчанию ctrl+x — это клавиша-лидер, и сочетания с лидером требуют, чтобы вы сначала нажали клавишу-лидер, а затем нажали сочетание. Например, чтобы начать новый сеанс, вы сначала нажимаете ctrl+x, а затем нажимаете n.

Вам не нужно использовать клавишу-лидер, но мы рекомендуем это делать.


Минимальный пример

{
  "$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"]
      }
    }
  }
}

Структура keymap

keymap.sections сгруппирована по семантическим областям. Каждый раздел содержит имена команд и последовательность клавиш, которая их запускает.

ПолеОписание
leaderКлавиша, используемая последовательностями <leader>. По умолчанию ctrl+x.
leader_timeoutКак долго Dropstone ждет следующей клавиши после клавиши-лидера, в миллисекундах. По умолчанию 2000.
sectionsКарта областей пользовательского интерфейса для привязок команд.

Значения привязок

Строка может содержать одно сочетание или несколько сочетаний, разделённых запятыми. Вы также можете использовать массив для нескольких сочетаний или "none"/false для отключения команды.

{
  "$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"]
      }
    }
  }
}

Для продвинутых случаев используйте объект с key, event, preventDefault или fallthrough.

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

Справочник keymap

Это команды, доступные пользователю, которые вы можете привязать. Команды, установленные на "none", доступны для привязки, но отключены по умолчанию.

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

keybinds является устаревшим. Он сохранён, чтобы существующие конфигурации продолжали работать, пока пользователи переходят на keymap.

Используйте keybinds только когда keymap отсутствует. Если оба поля установлены, keymap имеет приоритет и keybinds игнорируются при разрешении сочетаний.

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

Значения по умолчанию в Windows:

На нативной Windows значения по умолчанию для отмены и приостановки терминала отличаются как для keymap, так и для устаревшего keybinds:

  • input.undo по умолчанию ctrl+z,ctrl+-,super+z при отсутствии явной конфигурации (привязка ctrl+z добавляется, потому что терминалы Windows не поддерживают приостановку POSIX).
  • terminal.suspend отключена, потому что нативные терминалы Windows не поддерживают приостановку POSIX.

Встроенные сочетания ввода

Ввод подсказки поддерживает общие сочетания в стиле Readline/Emacs для редактирования текста. Это встроенные значения по умолчанию: вы можете переопределить их в разделе input в tui.json выше.

СочетаниеДействие
ctrl+aПереместиться в начало текущей строки
ctrl+eПереместиться в конец текущей строки
ctrl+bПереместить курсор на один символ назад
ctrl+fПереместить курсор на один символ вперёд
alt+bПереместить курсор на одно слово назад
alt+fПереместить курсор на одно слово вперёд
ctrl+dУдалить символ под курсором
ctrl+kУдалить до конца строки
ctrl+uУдалить до начала строки
ctrl+wУдалить предыдущее слово
alt+dУдалить следующее слово
ctrl+tПоменять символы местами
ctrl+gОтменить всплывающие окна / прервать ответ

Shift+Enter

Некоторые терминалы не отправляют клавиши-модификаторы с Enter по умолчанию. Вам может потребоваться настроить ваш терминал для отправки Shift+Enter как escape-последовательности.

Windows Terminal

Откройте ваш settings.json по адресу:

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

Добавьте это в массив actions корневого уровня:

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

Добавьте это в массив keybindings корневого уровня:

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

Сохраните файл и перезагрузите Windows Terminal или откройте новую вкладку.

Ctrl+I