如何在Emacs中绘制基于像素或矢量的UI元素?


11

我的意思是说UI元素(例如文本字段和动画按钮)不限于终端仿真器的等宽字符网格,而可以是屏幕上任意像素位置的任意形状。我很好奇,这是否可能以及如何实现,如果不可能,是否计划了将来。


2
好吧,是的-闪屏很明显。我想将您的问题改写为如何完成的。就目前而言,一个简单的是/否答案将“回答”这个问题。
肖恩·阿雷德

3
如果您只想绘制,那么可以。有关svg-clock“简单”的示例,请参见GNU ELPA中的软件包。但是,如果你想画在上面的其他元素,那么答案是可悲的是“没有”,虽然很多人会很高兴,如果有人写了一个补丁,做到这一点。
Stefan

1
@SeanAllred任意形状,是的;任意像素位置,否。
马拉巴巴2014年

@Malabarba糟糕-是的,您是对的。不过,您可以使用显示边距和文字显示来作弊-可以非常精确。但是您说对了,您不能说Draw image.png(400x600+16+30)要在相对于某个角的特定坐标处绘制缩放图像。
肖恩·艾瑞德

Answers:


8

文本字段和按钮(例如,在Customize缓冲区中)实际上受制于Emacs对齐字符的网格。

可以做的就是告诉Emacs显示SVG(矢量)或XPM(位图)类型的图像。由于这些不限于从文件中读取,因此您可以生成一个字符串并将其转换为图像。我已经看到了这样的例子:在画布上使用时,图像占据了窗口的大部分并且可以自由绘制(请参阅svg-thingslime-volleysvg-clock,我自己的svg-2048)和不太令人讨厌的用法,类似于UI元素(请参阅AUCTEX中的图标,gnus的modeline图标M-x tetrissvg-modeline的图形版本)。考虑到Emacs没有类似画布的图像类型,仍然有很多工作要做,但是可以替换这些图像并将它们用作其他UI元素(如modeline或margin)的显示属性,并绑定包括鼠标在内的键一个给他们。


1

对于绘制栅格图形,您可以尝试EPaint。它似乎支持徒手画和基本的几何形状。

EPaint存储库中的演示

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.