Перейти до вмісту

VS Code

Розширення go-slides для VS Code: попередній перегляд, показ, проблеми, автодоповнення та експорт, так само як Marp for VS Code робить для Marp.

Розширення — це go-slides/vscode, зі своїм власним версіюванням (v0.5.0). Воно рендерить за допомогою go-slides v0.14.0 (пакет editor, рядки джерела для синхронної прокрутки, а також огляд і вигляд доповідача). Воно встановлюється з go-slides-0.5.0.vsix, доданого до його випуску на GitHub: публікацію на VS Code Marketplace та Open VSX підготовлено, але її там ще немає.

Розширення — це аналог Marp for VS Code для go-slides: презентація показується в попередньому перегляді Markdown VS Code як слайди, її помилки — на панелі Problems, а директиви, 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 і в коментарях <!-- --> (з _ для spot-директиви), значення 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.exportTypepdfформат, який діалог експорту пропонує першим
goSlides.exportAutoOpentrueвідкрити експортований файл
goSlides.htmlfalseдозволити весь сирий HTML замість білого списку Marp; враховується лише в довіреному робочому просторі
goSlides.preview.marpDocumentsautoпереглядати презентації marp: true: auto, always, never

Безпека

Презентація та робочий простір не є довіреними. Сирий HTML дотримується білого списку Marp, якщо goSlides.html не ввімкнено в довіреному робочому просторі (slides.yaml з html: true не вмикає його в попередньому перегляді), а попередній перегляд VS Code не запускає жодного скрипта з презентації. Попередній перегляд читає лише файли теки робочого простору презентації, не йде за символічними посиланнями, а шаблони не бачать жодної змінної середовища. Експорт запускає програму, тож чекає на довіру до робочого простору, а програму ніколи не називає робочий простір.

Продуктивність

На еталонній презентації go-slides зі 100 слайдів, у VS Code 1.142 на Apple M4 Max, з Marp for VS Code 3.6.1, виміряним у тому самому сеансі:

go-slidesMarp for VS Code
активація (завантаження модуля WebAssembly)189 мс—
перший попередній перегляд52 мс78 мс
попередній перегляд після правки (медіана)19 мс23–24 мс
.vsix7,5 МБ36,3 МБ

Показники — для розширення v0.3.0 (go-slides v0.8.0) на презентації зі 100 слайдів, з набором одного символу в слайді 50, з чергованих раундів при навантаженні за 1 хвилину нижче 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 кешує розібрані теми, запаковані таблиці стилів і підсвічений код між рендерами, позначає рядки синхронної прокрутки без проходу байт за байтом і повторно використовує свої writers: рендер презентації зі 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