Como posso desenhar elementos de interface do usuário baseados em pixel ou vetor no Emacs?

11

Com isso, quero dizer elementos da interface do usuário (por exemplo, campos de texto e botões animados) que não são restritos à grade de caracteres monoespaçados dos emuladores de terminal, mas podem ser formas arbitrárias em posições arbitrárias de pixels na tela. Estou simplesmente curioso para saber se e como isso é possível, e se não é possível, se está planejado para o futuro.

Lenar Hoyt
fonte
2
Bem, sim - a tela inicial é evidente para esse fato. Gostaria de reformular sua pergunta sobre como isso pode ser feito. Tal como está, uma resposta simples de sim / não 'responderia' a essa pergunta.
Sean Allred
3
Se você só quer desenhar, então sim, você pode ver. Veja o svg-clockpacote no GNU ELPA para um exemplo "simples". Mas se você quiser desenhar sobre outros elementos, a resposta é infelizmente "não", embora muitas pessoas ficariam felizes se alguém escrevesse um patch que faça isso.
23413 Stefan
1
Forma arbitrária @SeanAllred, sim; posição arbitrária do pixel, não.
Malabarba
@ Malabarba Opa - sim, você está correto. No entanto, você pode trapacear com as margens da tela e as faces do texto - você pode ser bem preciso. Mas você está certo ao dizer que não pode Draw image.png(400x600+16+30)desenhar uma imagem em escala nessa coordenada específica em relação a algum canto.
Sean Allred

Respostas:

8

Campos de texto e botões (como, nos buffers Personalizar) estão realmente sujeitos à grade na qual o Emacs alinha os caracteres.

O que você pode fazer é dizer ao Emacs para exibir uma imagem do tipo SVG (vetor) ou XPM (bitmap). Como esses arquivos não são limitados para serem lidos em um arquivo, você pode gerar uma string e transformá-la em uma imagem. Eu já vi exemplos de uso semelhante a tela, onde a imagem ocupa a maior parte da janela e é desenhada livremente (consulte svg-thing , slime-volley , svg-clock , meu próprio svg-2048 ) e menos desagradável que se assemelham aos elementos da interface do usuário (veja os ícones no AUCTEX , ícone da modelagem do gnus , a versão gráfica da M-x tetris, svg-modeline) Ainda há muito trabalho a ser feito, considerando que o Emacs não tem um tipo de imagem semelhante a uma tela, mas é possível deslocar essas imagens e usá-las como propriedade de exibição de outros elementos da interface do usuário, como a modeline ou margin e bind bind keys, incluindo o mouse uns para eles.

wasamasa
fonte
1

Para desenhar gráficos raster, você pode experimentar o EPaint . Parece suportar desenho à mão livre e formas geométricas básicas.

demo do repositório EPaint

ebpa
fonte