Jak narysować elementy interfejsu użytkownika oparte na pikselach lub wektorach w Emacsie?

11

Rozumiem przez to elementy interfejsu użytkownika (na przykład pola tekstowe i animowane przyciski), które nie są ograniczone do siatki znaków o stałej szerokości emulatorów terminali, ale mogą mieć dowolne kształty w dowolnych pozycjach pikseli na ekranie. Jestem po prostu ciekawy, czy i jak to jest możliwe, a jeśli nie jest to możliwe, czy jest to planowane na przyszłość.

Lenar Hoyt
źródło
2
Cóż, tak - ekran powitalny jest tego oczywisty. Chciałbym przeredagować twoje pytanie, w jaki sposób można to zrobić. W obecnej formie prosta odpowiedź „tak / nie” „odpowiedziałaby” na to pytanie.
Sean Allred
3
Jeśli chcesz tylko rysować, to tak, możesz zobaczyć. Zobacz svg-clockpakiet w GNU ELPA dla „prostego” przykładu. Ale jeśli chcesz rysować na innych elementach, odpowiedź brzmi niestety „nie”, chociaż wiele osób byłoby zadowolonych, gdyby ktoś napisał łatkę, która to robi.
Stefan
1
@SeanAllred dowolny kształt, tak; dowolna pozycja w pikselach, nr
Malabarba
@Malabarba Whoops - tak, masz rację. Możesz jednak oszukiwać za pomocą marginesów wyświetlania i twarzy tekstowych - możesz być dość precyzyjny. Ale masz rację mówiąc, że nie możesz Draw image.png(400x600+16+30)narysować skalowanego obrazu na tej konkretnej współrzędnej względem jakiegoś rogu.
Sean Allred

Odpowiedzi:

8

Pola tekstowe i przyciski (jak w buforach Dostosuj) są w rzeczywistości zależne od siatki, na której Emacs wyrównuje znaki.

Co można zrobić, to mówi Emacs do wyświetlania obrazu z formatu SVG (wektor) lub XPM (bitmapy) typu. Ponieważ nie są one ograniczone do odczytu z pliku, możesz wygenerować ciąg i przekształcić go w obraz. Widziałem przykłady zarówno zastosowania na płótnie, gdzie obraz zajmuje większość okna i jest swobodnie rysowany (patrz svg-thing , slime-volley , svg-clock , mój własny svg-2048 ) i mniej nieznośne użycie, które raczej przypominają elementy interfejsu (patrz ikony w AUCTeX , gnus 'modeline ikona graficzna wersja M-x tetris, SVG-modeline). Wciąż jest sporo do zrobienia, biorąc pod uwagę, że Emacs nie ma typu płótna, ale możliwe jest przesunięcie tych obrazów i użycie ich jako właściwości wyświetlania innych elementów interfejsu, takich jak modeline lub margin i powiązania klawiszy, w tym myszy dla nich.

wasamasa
źródło
1

Do rysowania grafiki rastrowej możesz wypróbować EPaint . Wygląda na to, że obsługuje rysowanie odręczne i podstawowe kształty geometryczne.

demo z repozytorium EPaint

ebpa
źródło