Интерфейс: тема, раскладка, хоткеи¶
Секция [ui] настраивает окно отладчика. Она лежит вне профилей, потому что к
запуску отношения не имеет: профилей у проекта много, а окно одно.
version = 1
[ui]
theme = "dark"
width = 1200
height = 800
[profiles.api]
adapter = "dlv"
program = "cmd/api"
| Поле | Обязательное | Что это |
|---|---|---|
theme |
нет | dark (по умолчанию), light или system |
width |
нет | начальная ширина окна в логических пикселях; по умолчанию 800 |
height |
нет | начальная высота окна в логических пикселях; по умолчанию 600 |
layout |
нет | раскладка панелей, ниже |
keymaps |
нет | хоткеи окна, ниже |
Размер окна¶
width и height задают начальный внутренний размер нативного окна
отладчика. Они независимы: если одно измерение не указано, оно берётся из
настройки редактора или из умолчания. Значения должны быть положительными
целыми числами. Последующее изменение окна мышью не переписывает конфиг
проекта.
Приоритет каждого измерения:
widthилиheightв[ui]проекта;gui_widthилиgui_heightв конфиге плагина Neovim;- умолчание —
800 × 600логических пикселей.
Значение проекта выигрывает, потому что оно общее для всех, кто открывает этот проект.
Тема¶
Умолчание — тёмная тема, а не системная. Окно отладчика открывается рядом с
редактором, а не вместо него, и следовать настройке системы обязано только по
явной просьбе. Для этого есть system, с ним тема переключается на живой сессии.
Неизвестное значение — ошибка разбора конфига с перечислением допустимых, а не молчаливый откат к умолчанию.
Молчание — не то же самое, что theme = "dark"¶
Названная в [ui] тема выигрывает у всех: она общая для всех, кто открывает этот
проект. Не названная — оставляет выбор тому, кто открывает окно.
Приоритет:
[ui] themeиз конфига проекта;--themeот редактора (gui_themeплагина превращается вbugsaur gui --theme dark|light|system);- умолчание отладчика — тёмная.
Запуск без проекта (--adapter / --program) конфига не читает, и остаются
только пункты 2 и 3.
Раскладка¶
Окно делится на левую колонку и правую область, каждая — на две зоны:
+----------------+-----------------------------+
| | |
| top_left | main |
| | |
+----------------+-----------------------------+ ← main_split
| | |
| bottom_left | bottom |
| | |
+----------------+-----------------------------+
↑ left_split ↑ left
| Поле | Что это | Умолчание |
|---|---|---|
left |
доля ширины окна под левую колонку | 0.25 |
left_split |
доля высоты колонки под top_left |
0.35 |
main_split |
доля высоты правой области под main |
0.35 |
top_left |
панели верхней зоны левой колонки | ["Threads"] |
bottom_left |
панели нижней зоны левой колонки | [] |
main |
панели основной зоны | все остальные |
bottom |
панели зоны под основной | ["Call Stack"] |
Имена панелей пишутся ровно так, как они подписаны на вкладках: Threads,
Call Stack, Variables, Watches, Evaluate, Logs, Inspector,
Breakpoints. Панели одной зоны становятся стопкой вкладок в порядке
перечисления.
[ui.layout]
left = 0.3
left_split = 0.5
top_left = ["Threads"]
bottom_left = ["Call Stack"]
main = ["Variables", "Watches", "Inspector"]
bottom = ["Evaluate", "Logs"]
Панель, не названная ни в одной зоне, не показывается — этим панели и
убираются. Пустая зона не занимает места вовсе; пустой main отдаёт всю площадь
левой колонке.
Не названная зона сохраняет свой состав по умолчанию
Поэтому перенос панели требует и очистки прежней зоны:
main = [..., "Call Stack"] без bottom = [] — это ошибка «панель названа
дважды», а не молчаливый выбор одной из зон.
Ошибка запуска — также неизвестное имя панели, доля вне интервала от 0 до 1 и раскладка, не оставившая ни одной панели.
Приоритет тот же, что и у темы, но секция берётся целиком. Есть
[ui.layout] — берётся она, gui_layout из Neovim не смотрим вовсе; нет —
целиком берётся раскладка редактора (bugsaur gui --layout <json>, те же ключи);
нет нигде — умолчания из таблицы выше. Смешивать зоны из двух источников значит
собирать окно, которого не задумывал никто.
Перетащенные мышью панели не сохраняются: раскладка строится из конфига на каждый запуск.
Хоткеи¶
Словарь действие → аккорд:
[ui.keymaps]
continue = "Alt+R"
step_into = "F3"
step_over = "F2"
step_out = "F5"
terminate = "Alt+S"
pause = "" # снять привязку
Действия:
- выполнение —
continue,step_into,step_over,step_out,pause,terminate,restart; - панели —
next_panel,previous_panelи переход в конкретную:focus_threads,focus_call_stack,focus_variables,focus_watches,focus_evaluate,focus_logs,focus_inspector,focus_breakpoints; - навигация —
next_row,previous_row,top,bottom,collapse,expand,activate,delete_row,cancel; - поиск по Variables —
search,search_next,search_previous,search_continue; - прочее —
help.
Пустой аккорд снимает привязку. В TOML нет null, и другого способа убрать
умолчание у конфига не было бы. У действия остаётся ровно один аккорд:
focus_variables = "Alt+V" снимает и Ctrl+V.
Аккорд — модификаторы Cmd, Ctrl, Alt, Shift через + и имя клавиши
(F1…F20, буква, Enter, Space, ArrowDown, …). Порядок модификаторов не
важен. Неизвестное действие, клавиша или модификатор останавливают запуск: хоткей
с опечаткой иначе просто никогда не срабатывал бы, ничем себя не выдавая.
Приоритет — по действиям, а не блоком. Названное в [ui.keymaps] перебивает
gui_keymaps из Neovim; не названное остаётся тем, что настроено в редакторе; не
названное нигде — умолчанием. Блоком здесь было бы неудобно: привязки друг от
друга не зависят, и проект, переопределивший один continue, не должен гасить
всю личную настройку.
Полная стопка слоёв, снизу вверх:
- умолчания (F7, F8, Shift+F8, F9, Cmd+F2 / Ctrl+F2, H J K L, стрелки);
<корень>/.bugsaur-keys.json— личный файл проекта, аккорд → действие, гдеnullснимает привязку;gui_keymapsизsetup()плагина Neovim;[ui.keymaps]из этого конфига.
F1 или ? в окне показывает, что получилось после всех четырёх слоёв.