VS Code
editor, исходные строки для синхронной прокрутки,
обзор и режим докладчика). Устанавливается из go-slides-0.5.0.vsix,
приложенного к его релизу на GitHub: публикация в VS Code Marketplace и Open VSX
подготовлена, но пока не выполнена.Расширение — аналог Marp for VS Code для go-slides: презентация показывается в Markdown-превью VS Code в виде слайдов, её ошибки — в панели «Проблемы», а директивы, kinds (типы слайдов) и функции шаблонов дополняются по мере набора.
Установка
Скачайте go-slides-<version>.vsix со страницы
релизов, затем выполните
Extensions: Install from VSIX… или:
code --install-extension go-slides-0.5.0.vsixДля предпросмотра больше ничего не нужно. Для экспорта нужна команда slides:
go install github.com/go-slides/slides/cmd/slides@latestПредпросмотр
Откройте презентацию и выполните Markdown: Open Preview to the Side.
Презентация — это файл Markdown, в front matter которого указано slides: true:
---
slides: true
paginate: true
data:
who: World
---
# Hello {{ .who }}
---
<!-- _kind: title -->
# Page {{ page }} of {{ total }}Файлы с marp: true тоже показываются в предпросмотре, если не установлен Marp
for VS Code: оба расширения отрисовывали бы один и тот же документ. Решает
настройка goSlides.preview.marpDocuments: auto (по умолчанию), always или
never.
Предпросмотр — это сам go-slides, скомпилированный в WebAssembly и загружаемый
расширением: без бинарного файла, и он работает на vscode.dev.
Он читает из рабочей области то, что использует презентация, — slides.yaml или
slides.hcl рядом с презентацией, файлы kinds, которые
они называют, файлы, подключаемые шаблоном, CSS
тем, — и только из папки рабочей области презентации.
Синхронная прокрутка
Начиная с v0.2.0 расширения (go-slides v0.7.0) редактор и предпросмотр
прокручиваются вместе, в обе стороны, как для обычного Markdown: предпросмотр
следует за слайдом и блоком под курсором редактора, а прокрутка предпросмотра
двигает редактор. Настройки — собственные настройки VS Code,
markdown.preview.scrollPreviewWithEditor и
markdown.preview.scrollEditorWithPreview.
Строки прослеживаются сквозь шаблоны. Слайд, порождённый {{ range }},
следует за строкой своего шаблона, а то, что приносит {{ include }}, — за
строкой включения. Презентация, разделённая headingDivider, синхронизируется
по заголовкам.
Показ
Начиная с v0.4.0 расширения (go-slides v0.9.0) презентацию можно показывать, не
выходя из VS Code. Когда презентация открыта в редакторе, из палитры команд или
меню … редактора:
| Команда | Открывает |
|---|---|
| go-slides: Open Overview | панель со всеми слайдами в сетке. Выбранный слайд показывает свой исходник в редакторе; Esc закрывает панель |
| go-slides: Start Presenter View | слайды и рядом с ними режим докладчика: следующий шаг, заметки докладчика и таймер |
Панели располагаются рядом с редактором и следуют друг за другом: смените слайд
в одной, и остальные сменятся вместе с ней. Они также следуют за вашими
правками презентации. Клавиша p в слайдах открывает режим докладчика.
Чтобы показывать на другом экране, переместите панель со слайдами туда командой View: Move Editor into New Window.
Каждая панель запускает презентацию в изолированном фрейме (без
allow-same-origin) с политикой default-src 'none': фрейм загружает
изображения, медиа, стили и шрифты и ничего больше, и запускает только те
скрипты, которые go-slides встроил в страницу, названные по хешу. Скрипт,
написанный в презентации, не запускается.
Проблемы, автодополнение, подсказки
- Проблемы: ошибки шаблонов, YAML и HCL — на той строке, где они находятся, в презентации или в файле kinds, откуда они происходят.
- Автодополнение: ключи директив в front matter и в комментариях
<!-- -->(с_для точечной директивы), значенияkindи_kind(с тем, что задаёт каждый kind),theme,size,paginate,math,headingDivider; внутри{{ }}— функции шаблонов и поля данных. - Подсказки при наведении: что делает директива, что задаёт kind, аргументы функции шаблона. Начиная с v0.16.0 справка по директивам следует языку интерфейса редактора (языку отображения VS Code) и доступна на 11 языках.
Экспорт
go-slides: Export Slide Deck… (также в заголовке редактора) пишет HTML,
векторный PDF, редактируемые PPTX и ODP, PNG или JPEG командой slides, как
это сделал бы slides -o deck.pdf deck.md; см. Командная строка.
Нужна доверенная рабочая область. Если slides не найден, расширение
предлагает выполнить go install выше в терминале.
Начиная с v0.5.0 расширения (go-slides v0.14.0) записываемый им PDF
доступен: при slides v0.12.0 или новее векторный PDF размечен тегами для
скринридеров и объявляет PDF/UA-1, с title и lang презентации и разделом на
каждый слайд. slides --pdf-tags=false записывает файл без тегов. Обновите
команду через go install выше, чтобы получить это.
Настройки
| Настройка | По умолчанию | |
|---|---|---|
goSlides.cliPath | "" | команда slides; пусто: slides из PATH. Настройка машины: рабочая область не может её задать |
goSlides.exportType | pdf | формат, который диалог экспорта предлагает первым |
goSlides.exportAutoOpen | true | открыть экспортированный файл |
goSlides.html | false | разрешить весь сырой HTML вместо списка разрешённого Marp; учитывается только в доверенной рабочей области |
goSlides.preview.marpDocuments | auto | показывать презентации marp: true: auto, always, never |
Безопасность
Презентация и рабочая область не считаются доверенными. Сырой HTML следует
списку разрешённого Marp, если только goSlides.html не включён в доверенной
рабочей области (slides.yaml с html: true не включает его в предпросмотре),
а предпросмотр VS Code не запускает ни одного скрипта из презентации.
Предпросмотр читает файлы только из папки рабочей области презентации, не
следует символическим ссылкам, а шаблоны не видят переменных окружения.
Экспорт запускает программу, поэтому ждёт доверия к рабочей области, а программу
рабочая область никогда не называет.
Производительность
На презентации из 100 слайдов из теста производительности go-slides, в VS Code 1.142 на Apple M4 Max, с Marp for VS Code 3.6.1, измеренным в том же сеансе:
| go-slides | Marp for VS Code | |
|---|---|---|
| активация (загрузка модуля WebAssembly) | 189 мс | — |
| первый предпросмотр | 52 мс | 78 мс |
| предпросмотр после правки (медиана) | 19 мс | 23–24 мс |
.vsix | 7,5 МБ | 36,3 МБ |
Данные относятся к расширению v0.3.0 (go-slides v0.8.0) на презентации из 100 слайдов, при наборе одного символа в слайде 50, по чередующимся раундам при средней загрузке за минуту ниже 8. Первый предпросмотр быстрее, чем у Marp, а предпросмотр после правки теперь тоже быстрее, чем у Marp.
В v0.8.0 и расширении v0.3.0
go-slides v0.8.0 хранит отрисованные слайды каждой открытой презентации и после
правки заново отрисовывает только те, чей исходник или унаследованное состояние
изменились (директивы, номер страницы, общее число, id заголовков, ссылки,
исходные строки); результат совпадает с полной отрисовкой байт в байт. Набор
символа в слайде 50 из 100 заново отрисовывает один слайд: 2,5 мс нативно,
11,5 мс в WebAssembly. Предпросмотр VS Code затем преобразует только DOM
изменившегося слайда, а дымовой тест расширения набирает один символ в слайде 50
между замеряемыми отрисовками, для обоих расширений. Режим докладчика
расширения синхронизируется через родительское окно (postMessage).
В v0.7.1 и расширении v0.2.2
go-slides v0.7.1 кэширует разобранные темы, собранные таблицы стилей и
подсвеченный код между отрисовками, отмечает строки синхронной прокрутки, не
двигаясь побайтно, и повторно использует свои writer’ы: отрисовка презентации
из 100 слайдов выделяет 5,7 МБ против 52,7 МБ у расширения v0.2.0. Благодаря
этому расширение v0.2.2 отказывается от переопределения GOGC=400. Для
сравнения: расширению v0.2.1 требовалось 72 мс на первый предпросмотр и 44 мс
после правки при GOGC по умолчанию (36 мс при GOGC=400), а v0.2.0 — 47–51 мс.
Расширение v0.2.2 показало 52 мс на первый предпросмотр и 24 мс после правки, вровень с 23 мс у Marp.
Created on by tannevaled
Modified on by tannevaled