Ratty: Terminal-Emulator mit Unterstützung für Inline-3D-Grafik
(ratty-term.org)- Ratty ist ein GPU-gerenderter Terminal-Emulator mit Unterstützung für Inline-3D-Grafik
- Enthält einen rotierenden Maus-Cursor
- Auf der Website kann man den Blogbeitrag lesen
- Auf der Website gelangt man zu Ratty herunterladen
- Auf der Website gelangt man zu Quellcode ansehen
2 Kommentare
Hacker-News-Kommentare
Einige sprachen hier von VR-Anwendungen, und ich habe früher ein wenig mit einer flachen 3D-UI für Softwareentwicklung herumgespielt.
Die Tiefe war nur wenige Zentimeter hinter dem Laptop-Bildschirm, damit man sie den ganzen Tag nutzen konnte, ohne viel VAC-Augenermüdung zu bekommen, und es fühlte sich eher so an, als würde man in 3D mit Farben und Ebenen zeichnen, statt im Raum mit den Armen herumzufuchteln.
3D ist möglich über Wackel-3D, per Webcam erzeugte Perspektive durch Kopf-/Blickverfolgung, Shutter-Brillen-Stereo, XR-HMDs usw. Die Wackel-Variante ist am einfachsten, aber niedlich und ablenkend; die Perspektiv-Variante ist subtiler und weniger störend.
Das Stereo-Paar einer App kann entweder „zwei Fenster für linkes/rechtes Auge bereitstellen“ oder „links/rechts abwechselnd anzeigen und labeln/synchronisieren/pollen“, und vieles davon braucht Unterstützung vom Fenstersystem/Fenstermanager/Desktop. Mit einem Stack aus Electron und X ließ sich dabei ziemlich viel Hebelwirkung erzielen.
Text in 3D nach vorne zu drücken macht mehr Spaß als bloße Einfärbung, und wenn man ein unruhigeres Erscheinungsbild in Kauf nimmt, kann man auch zusätzliche Informationsebenen nach Tiefe getrennt unterbringen. Wenn Emacs eine Tiefe pro Zeichen bekäme, wäre das etwas, das selbst LispM nicht hatte.
Wenn man allerdings Möglichkeiten für Dinge erkundet, die ihrem Wesen nach nicht 3D sind, etwa Code-Text, ist es deutlich einfacher, UX mit Vorder-/Hintergrundfarben, Schriftarten, Unicode und Animationen zu prototypen; im Browser reichen dafür überlagerte divs und transparente 2D-/3D-Canvasse.
Jedes Zeichen ist ein in 3D platzierter Quad und wird per Instanced Rendering gezeichnet, sodass sich zig Millionen oder mehr verarbeiten lassen. Jedes Zeichen ist einzeln adressier- und veränderbar wie ein eigenes Polygon.
Ich nutze es, um komplette GitHub-Repositories auf einmal zu rendern, und es gibt sowohl eine native Apple-Version als auch eine Web-Version. Die Web-Version enthält die Grundbausteine einer IDE-Konfiguration, und ich würde gern Eindrücke oder Gedanken dazu hören.
https://ivanlugo.dev/ide
UNIX scheint beim REPL-Erlebnis immer noch zu versuchen, Xerox-Workstations oder typische Lisp-Maschinen einzuholen.
Inline-Grafik gab es schon 1981.
https://youtu.be/o4-YnLpLgtk?t=376
Für alle, die sie noch nicht gesehen haben: https://www.youtube.com/watch?v=yJDv-zdhzMY
Das gefällt mir. Es gibt keinen Grund, warum ein Terminal nur Text unterstützen sollte.
Data-Science-Notebooks zeigen eine mögliche Richtung, in die sich Terminals entwickeln können, und in diesem Bereich passiert viel Spannendes. Kitty ist hier wahrscheinlich der aggressivste Innovator [1].
Ich bin mir nur nicht sicher, ob es eine übergreifende Vision gibt.
[1]: https://sw.kovidgoyal.net/kitty/protocol-extensions/
[1] https://github.com/joouha/euporie
pyvistakonnte mit Kitty-Grafik tatsächlich beliebige 3D-Formen direkt im Terminal rendern.Das ist ein riesiger Hack, und für brauchbare Performance führte kein Weg an shm vorbei.
https://git.theresno.cloud/panki/kglobe
Vielleicht würde es sogar meine ideal vorgestellte Rechenzukunft übertreffen, diesen „haiku+macOS-Mashup“.
Normalerweise durchstöbere ich Dateisysteme lieber im Terminal, statt einen Dateimanager anzuklicken; ein rasterförmiges
ls, das 3D-Modelle in Verzeichnissen (STL/STEP, 3D-Druck) per terminalbasiertem Rendering zeigt, wäre wirklich nützlich.Bonuspunkte, wenn man die Modelle vorab ansehen und drehen könnte.
Ich weiß nicht genau, wofür ich das verwenden würde, aber die visuellen Effekte haben Spaß gemacht, und mir gefiel auch das brutalistische Design der Website. Hat gute alte Erinnerungen geweckt.
Das sieht ziemlich gut aus, oder?
Ich habe eine Frage. Von den Rendering-Fähigkeiten her müsste es 2D eigentlich auch gut beherrschen, oder übersehe ich etwas? Die bestehenden Lösungen für hochwertige 2D-Bilder oder Rasterisierung im Terminal waren meist eher mäßig. Ich frage mich, ob das besser sein könnte als andere Ansätze oder ob man irgendwo auf fundamentale Grenzen stößt.
Und falls es GPU-beschleunigt ist, frage ich mich auch, wie das über ssh funktionieren würde.
Das Terminal wird langsam zu einem vollwertigen Webbrowser.
Ehrlich gesagt weiß ich es noch nicht, aber ich will es bald selbst ausprobieren :D
https://github.com/fathyb/carbonyl
https://hyper.is/
Ruhe in Frieden, Terry. Hoffentlich wird er nie vergessen.
Und wenn man dieses Projekt sieht, scheint sein Geist tatsächlich weiterzuleben :D
Das erinnert mich an die Zeit, als compiz herauskam und alle sagten: „Meine Fenster sind auf einem Würfel“ oder „Ich brauche wackelnde Fenster“.
Deshalb habe ich es natürlich sofort installiert.
Zwischen Windows und Ubuntu mit all den compiz-Animationseffekten zu wechseln, fühlte sich wie Magie an.
Durch den verlinkten Blogpost habe ich das neu vorgeschlagene Glyph Protocol [1] kennengelernt, und das fand ich sehr spannend.
Ich hatte erst vor etwa sechs Monaten bedauert, dass genau so etwas fehlt [2].
[1] https://rapha.land/introducing-glyph-protocol-for-terminals/
[2] https://news.ycombinator.com/item?id=45805072
https://github.com/tikimcfee/glyph3d-js
Mit dem Kitty Graphics Protocol ist das teilweise schon möglich. Ich habe eine Demo gebaut, die 3D-Grafik in Kitty rendert [1].
Der wichtige fehlende Teil ist eigentlich vsync, und ratty scheint das auch nicht zu haben.
Wenn das Rendering nicht synchronisiert ist, kann der Terminal-Emulator den Framebuffer lesen, während die Anwendung hineinschreibt, was zu visuellen Artefakten führen kann.
[1] https://x.com/zack_overflow/status/2035921425341763756?s=20
Lobste.rs-Meinungen
Auf der Landingpage lag ein LLM-Geruch in der Luft, also habe ich in den Blogpost geschaut — und tatsächlich
Wenn man schon die Nutzung selbst taggen wollte, müsste das bei 90 % aller Projekte passieren, und die Diskussion würde sich vom eigentlichen Ergebnis wegbewegen. Ich möchte nicht, dass ein Thread über einen Terminal-Emulator, den eine Einzelperson zusammengehackt hat, um eine 3D-Maus anzuzeigen, in eine Ethikdebatte abdriftet
Ich habe zwar ein bisschen 3D für einen schnellen Wow-Effekt eingebaut, aber das Ziel sollte meiner Meinung nach sein, die Grundlagen sorgfältig neu zu durchdenken. Selbst wenn mein Experiment scheitert, bin ich stolz darauf, ein Produkt mit einer menschlichen Perspektive für Menschen gebaut zu haben
Wenn sie das natürlich einfach nur aus Spaß machen, ist daran für sich genommen nichts auszusetzen
Egal wie oft ich es lese, ich bin immer noch extrem verwirrt
Einerseits denke ich ständig „Warum?“, so wie bei sixel oder kitty. Grafiken auf eine grundsätzlich textorientierte Oberfläche zu setzen, ist cool, wirkt aber nicht besonders praktisch. Natürlich könnte man denselben Einwand auch gegen curses oder slang vorbringen
Andererseits frage ich mich, ob sich so ein 3D-Rendering-Protokoll/-Display irgendwie in Emacs unterbringen ließe. Ich habe überhaupt keine Ahnung, was ich damit machen würde, aber es wäre wahrscheinlich genauso cool wie dieses Projekt
Früher hat man Programme aus Spaß geschrieben. Erinnerst du dich nicht?
Ich habe einen Abend damit verbracht, mein Haskell-CAD-Framework dazu zu bringen, Objekte in einem Format auszugeben, das Ratty lesen kann
Gemessen am Zeitaufwand wirkte das ziemlich vielversprechend, aber ich hätte mir gewünscht, dass der Befehl zur „Objektplatzierung“ etwas besser konfigurierbar wäre. Ich hätte gerne gesehen, dass er das Freimachen von Platz innerhalb der REPL-Ausgabe und auch die Größenanpassung der Objekte selbst übernimmt
Außerdem ist es etwas unerquicklich, dass Ratty keine Dateien außerhalb des assets-Ordners laden kann. Das Scrollen schien auch etwas kaputt zu sein; ich habe oft gesehen, dass Objekte verschwanden, obwohl es dafür eigentlich noch zu früh war. Es kann aber auch sein, dass ich dabei etwas falsch gemacht habe