Wie kann ich in Emacs pixel- oder vektorbasierte UI-Elemente zeichnen?

11

Damit meine ich UI-Elemente (zum Beispiel Textfelder und animierte Schaltflächen), die nicht auf das monospaced Zeichenraster von Terminalemulatoren beschränkt sind, sondern beliebige Formen an beliebigen Pixelpositionen auf dem Bildschirm sein können. Ich bin einfach neugierig, ob und wie das möglich ist und wenn es nicht möglich ist, ob es für die Zukunft geplant ist.

Lenar Hoyt
quelle
2
Nun ja - der Begrüßungsbildschirm ist für diese Tatsache offensichtlich. Ich würde Ihre Frage dahingehend umformulieren, wie dies getan werden kann. So wie es aussieht, würde eine einfache Ja / Nein-Antwort diese Frage „beantworten“.
Sean Allred
3
Wenn Sie nur zeichnen möchten, dann können Sie ja sehen. svg-clockEin "einfaches" Beispiel finden Sie im Paket in GNU ELPA. Aber wenn Sie auf andere Elemente zurückgreifen möchten, lautet die Antwort leider "Nein", obwohl sich viele Menschen freuen würden, wenn jemand einen Patch schreiben würde, der dies tut.
Stefan
1
@ SeanAllred beliebige Form, ja; beliebige Pixelposition, nein.
Malabarba
@ Malabarba Whoops - ja, du hast recht. Sie können jedoch mit Anzeigerändern und Textflächen betrügen - Sie können ziemlich präzise werden. Aber Sie haben Recht, wenn Sie sagen, dass Sie nicht sagen können, dass Sie Draw image.png(400x600+16+30)ein skaliertes Bild an dieser bestimmten Koordinate relativ zu einer Ecke zeichnen sollen.
Sean Allred

Antworten:

8

Textfelder und Schaltflächen (wie in den Puffern anpassen) unterliegen tatsächlich dem Raster, auf dem Emacs Zeichen ausrichtet.

Sie können Emacs anweisen, ein Bild vom Typ SVG (Vektor) oder XPM (Bitmap) anzuzeigen. Da diese nicht nur aus einer Datei eingelesen werden können, können Sie eine Zeichenfolge generieren und in ein Bild verwandeln. Ich habe Beispiele sowohl für eine leinwandähnliche Verwendung gesehen, bei der das Bild den größten Teil des Fensters einnimmt und frei gezeichnet ist (siehe SVG-Ding , Schleim-Volley , SVG-Uhr , meine eigene SVG-2048 ), als auch für eine weniger unangenehme Verwendung, die eher ähnelt UI - Elemente (siehe die Symbole in AUCTEX , Gnu 'mode~~POS=TRUNC- Symbol, die grafische Version M-x tetris, sVG-mode~~POS=TRUNC). Es ist noch einiges an Fußarbeit zu tun, wenn man bedenkt, dass Emacs keinen Canvas-ähnlichen Bildtyp hat, aber es ist möglich, diese Bilder zu verschieben und sie als Anzeigeeigenschaft für andere UI-Elemente wie Modeline oder Rand zu verwenden und Tasten einschließlich der Maus zu binden diejenigen zu ihnen.

Wasamasa
quelle
1

Zum Zeichnen von Rastergrafiken können Sie EPaint ausprobieren . Es scheint Freihandzeichnen und geometrische Grundformen zu unterstützen.

Demo aus dem EPaint-Repository

ebpa
quelle