Как я могу рисовать пиксельные или векторные элементы пользовательского интерфейса в Emacs?

11

Под этим я подразумеваю элементы пользовательского интерфейса (например, текстовые поля и анимированные кнопки), которые не ограничены одноразмерной символьной сеткой эмуляторов терминала, но могут иметь произвольную форму в произвольных положениях пикселей на экране. Мне просто любопытно, возможно ли и как это возможно, и если это невозможно, запланировано ли это на будущее.

Ленар Хойт
источник
2
Ну да - заставка очевидна для этого факта. Я бы перефразировал ваш вопрос, как это можно сделать. В нынешнем виде простой ответ «да / нет» «ответит» на этот вопрос.
Шон Оллред
3
Если вы хотите только рисовать, то да, вы можете видеть. Посмотрите svg-clockпакет в GNU ELPA для «простого» примера. Но если вы хотите рисовать поверх других элементов, то, к сожалению, ответ «нет», хотя многие были бы рады, если бы кто-то написал патч, который делает это.
Стефан
1
@SeanAllred произвольная форма, да; произвольная позиция пикселя, нет.
Малабарба
@ Malabarba Ой - да, вы правы. Вы можете обманывать, хотя с полями дисплея и текстовыми лицами, но вы можете получить довольно точные данные. Но вы правы, говоря, что вы не можете сказать, Draw image.png(400x600+16+30)чтобы нарисовать масштабированное изображение по определенной координате относительно некоторого угла.
Шон Оллред

Ответы:

8

Текстовые поля и кнопки (например, в буферах Customize) фактически подчиняются сетке, на которой Emacs выравнивает символы.

То, что вы можете сделать, это сказать Emacs отобразить изображение типа SVG (вектор) или XPM (растровое изображение). Так как они не ограничиваются чтением из файла, вы можете сгенерировать строку и превратить ее в изображение. Я видел примеры как холстоподобного использования, когда изображение занимает большую часть окна и свободно рисуется (см. Svg-thing , slime-volley , svg-clock , мой собственный svg-2048 ), так и менее неприятного использования, которое довольно напоминают элементы пользовательского интерфейса (см иконки в AucTeX , гну 'режимной значок, графическая версия M-x tetris, SVG-режимный). Еще предстоит немало потрудиться, учитывая, что в Emacs нет типа изображения, похожего на холст, но можно сместить эти изображения и использовать их в качестве свойства отображения других элементов пользовательского интерфейса, таких как modeline или margin и bind, включая мышь. для них.

wasamasa
источник
1

Для рисования растровой графики вы можете попробовать EPaint . Кажется, он поддерживает рисование от руки и основные геометрические фигуры.

демо из репозитория EPaint

ebpa
источник