Могу ли я сделать векторные (SVG) скриншоты Emacs?

15

gtk-vector-screenshotПрограмма может использоваться , чтобы взять векторные скриншоты приложений Gtk-3. Кажется, он работает, когда просит приложение перерисовать себя на холсте SVG.

Emacs в GNU / Linux может быть собран с помощью Gtk +, но попытка использовать вышеупомянутое приложение в окне Emacs приводит к скриншоту, который содержит только элементы GUI, такие как строка меню; буферы не отображаются (я пробовал с и без Каира). Это не слишком удивительно, учитывая, что рендеринг буфера в Emacs происходит на довольно низком уровне.

Тем не менее, есть ли способ сделать масштабируемые векторные скриншоты Emacs ?

Клеман
источник

Ответы:

2

Согласно документации Gtk + виджеты в Emacs:

  • меню,
  • диалоги,
  • панели инструментов и
  • полосы прокрутки

Буферы отображаются самим Emacs. Ни буфер, ни строки в буфере не являются виджетами Gtk +. Это означает, что они ничего не знают о функциональности экспорта виджетов Gtk +.

Лучшее, что вы можете сделать, это использовать htmlfontify-bufferдля того, чтобы встроить сгенерированный HTML в ваш SVG, содержащий виджеты. Но для этого потребуется дополнительная работа по объединению HTML и SVG. Но имейте в виду, что htmlfontify-bufferон также имеет некоторые ограничения и не работает с каждым буфером.

ceving
источник
Я не уверен, что это отвечает на вопрос. Я упомянул take-vector-screenshotв качестве примера, но я также упомянул, что неудивительно, что это не сработало. htmlfontify-bufferимеет слишком много ограничений для настоящей квалификации (он не будет отображать оверлеи, отображаемые строки, переносы строк, откат шрифтов и т. д.)
Clément
1
@ Clément Краткий ответ: ни в коем случае.
ceving
Это личное мнение, или у вас есть доказательства, подтверждающие это утверждение? Принимая во внимание количество рендеров (Cairo, непосредственно через X, Gtk и т. Д.), Которые есть в Emacs, можно предположить, что небольшого изменения в одном из них может быть достаточно.
Климент
2
@ Clément Gtk + может выполнять рендеринг в SVG, потому что Gtk + использует Cairo, который имеет бэкэнд для SVG. Emacs не использует Cairo для визуализации буфера. Но есть экспериментальная ветка для Каира. Может быть, в ближайшее время это может быть возможно.
выступление
1

Это возможно в Каирских сборках!

(x-export-frames FRAMES TYPE)

Return image data of FRAMES in TYPE format.
FRAMES should be nil (the selected frame), a frame, or a list of
frames (each of which corresponds to one page).  Each frame should be
visible.  Optional arg TYPE should be either `pdf' (default), `png',
`postscript', or `svg'.  Supported types are determined by the
compile-time configuration of cairo.
Клеман
источник