[HN Gopher] Terminal.Gui: A Cross Platform Terminal UI Toolkit f... ___________________________________________________________________ Terminal.Gui: A Cross Platform Terminal UI Toolkit for .NET Author : manjana Score : 202 points Date : 2022-10-13 12:47 UTC (10 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | _the_inflator wrote: | In a certain sense, this is so damn cute and pure DOS nostalgia. | My next side project is going to be a Norton Commander I guess. | lostmsu wrote: | Make a TurboPascal-style VSCode clone instead? :) | mu_killnine wrote: | What a wonderful project. Bookmarked for the next time I need | something nice in the terminal :) | | Way to go, team. | gwbas1c wrote: | What? No Blazor support? No mobile support? (Joke) | | I think console UIs are good for a sweet spot where you need a | "just good enough" UI that you can whip up in a few minutes. I | hope this meets the sweet spot. | cek wrote: | I posted this above too, but for completeness... Blazor support | is under development: | | https://github.com/Blazor-Console/HACC/blob/main/README.md | VikingCoder wrote: | I know you're joking, but I wish I had client-server support | with xterm.js or something similar. | | I'd like to write MUDs (Multi-User Dungeon games) in C#... | Cthulhu_ wrote: | iirc most MUDs use telnet, so any user can use whichever | client they prefer - I'm sure there's ways to have xterm.js | use telnet. There's this project that is a MUD using Telnet | written in C#: https://github.com/cmackles/MudSharp | VikingCoder wrote: | Oh, also... | | If I had this thing I want, I could also use it as a debug | console for servers... | airstrike wrote: | What we really need is a MUD that is fed through | StableDiffusion -> NeRF and outputs a 3D map for you to | play in | | https://github.com/ashawkey/stable-dreamfusion | VikingCoder wrote: | Yes, thanks, I'm aware most MUDs use telnet, but in my | opinion, that's a barrier to entry to most users. | | And thanks for the link, but it makes me sad to see a repro | that was last updated 5 years ago. | | > I'm sure there's ways to have xterm.js use telnet. | | You have to have a server in-between to do straight telnet. | (You can't do a vanilla TCP/IP connection from the | browser.) | | So I'd like to have WebSockets + xterm.js taking the place | of telnet + terminal... | | And then I'd like a .Net API that looks like curses, or | like this GUI, or something... and that persists the | console (like tmux or something), so if the user re- | connects, they get their view restored "automagically." | bayesianbot wrote: | Great, there's some terminal programs I'd have preferred to code | in C# but did in Python instead as I didn't know this exists. | | First I thought resizing doesn't work but it seems it's only an | issue with kitty, on alacritty it works as expected, in case | anyone else is wondering the same. | raphinou wrote: | I'm expecting a terminal UI to be primarily keyboard-driven, but | the demo uses the mouse a lot. Anyone having experience with this | library and able to confirm keyboard navigation is good by | default? | colanderman wrote: | Tab navigation and hotkeys are enabled by default. It's easy to | add other keyboard overrides as well. You do not need a mouse | to use it. | BeefWellington wrote: | I may be showing my age here, but I think most people would | expect a TUI to provide arrow key navigation and highlight by | default, which is not demonstrated. | | Simply mapping Gui -> TUI isn't really a good user experience | IME. The terminal should generally be keyboard-first/designed | with keyboard-only in mind. | alkonaut wrote: | Are there any specific examples from the demo that don't | show proper highlights (i.e. that don't look exactly like | e.g. TurboPascal, Norton Commander or Linux menuconfig in | terms of hints/highlight/focus)? | | This isn't an emulation of a mouse gui stuck in a terminal, | this is literally a port of an older curses lib to the | latest .net, so it doesn't feel like it should have any | unnecessary influence from desktop ui systems at all. | cek wrote: | This is NOT "literally a port of an older curses lib to | the latest .net". It is a complete API for building | terminal UI applications using .NET that _leverages_ | curses under the covers when running in a non-Windows | environment (on Windows it uses the native Windows | console APIs). | | For completeness, Terminal.Gui is built on top of a | "Console Abstraction Layer" (CAL; I just invented that | term), via the "ConsoleDriver" base class. There are four | subclasses provided: | | - CursesDriver: Uses curses and is the default on | Linux/Mac. | | - WindowsDriver: Uses the Windows console API and is the | default on Windows (only works on Windows) | | - NetDriver: Uses the .NET console API and works on all | platforms | | - FakeDriver: Used for unit testing. | | NetDriver is the slowest. WindowsDriver is the fastest. | CursesDriver is the biggest bugfarm ;-). | alkonaut wrote: | I only meant port of a curses based lib as in "This is an | updated version of gui.cs that Miguel wrote for mono- | curses in 2007" | | so it would be natural that it's still a normal keyboard- | first terminal ui lib because gui.cs was. Would be pretty | strange if this took a whole different direction or scope | and became a WinForms-in-the-terminal. Can't see anything | in the video, source or history that suggests that it's | anything but a terminal ui only adapted for more targets | other than curses. | cek wrote: | Terminal.Gui really has become "WinForms-in-the- | terminal". A lot of the capabilities borrow from WinForms | and other popular GUI frameworks. We're not afraid of | plagerising. | | Check out the list of built-in View classes: | | https://gui-cs.github.io/Terminal.Gui/articles/views.html | | I'll work on updating the history section of the README | to make this more clear. | lostmsu wrote: | > Simply mapping Gui -> TUI isn't really a good user | experience IME | | Nitpicking: gaming console GUIs are very accessible. I'd | take them as a great starting point. | cek wrote: | Terminal.Gui maintainer here... | | We view the mouse as optional. We want the mouse to work | perfectly, but it should be optional. If any of the library | doesn't work well with just a keyboard, please submit an | issue! | styx31 wrote: | Perhaps you should also have made a demo video with | keyboard only, with key pressed displayed on screen? | | It could have helped showcasing that the UI works | perfectly with keyboard. | | I agree that the demo gif tends to say that this library | is mostly intended for mouse usage. | BeefWellington wrote: | That's good to hear but I have to wonder then why the | demo is seemingly exclusively demonstrating the mouse? | moron4hire wrote: | Maybe it's a lot harder to show flow through the UI with | just keyboard entry. The mouse pointer trailing through | the frame animates how the user's attention is moving | through the UI. | cek wrote: | Because I (apparently incorrectly) assumed a lot of | people would appreciate the fact the mouse works so well. | | Also, because getting the mouse to work well (across | Windows, Mac, Linux, etc...) is freaking hard and the | Terminal.Gui team is proud of their work ;-). | colanderman wrote: | As a user of Terminal.Gui I appreciate that there is also | solid mouse support. It serves my particular application | well. | VikingCoder wrote: | Neat! | | I wish it also worked with something like xterm.js, a terminal in | the browser. | | Either by compiling .Net to WASM... Like Client-Side Blazor does, | right? | | ...or using client-server technology... Like Server-Side Blazor | does, right? | cek wrote: | Terminal.Gui maintainer here... | | We're working on it [1] | | [1] https://github.com/Blazor-Console/HACC/blob/main/README.md | VikingCoder wrote: | Awesome, and yes, +1 to the comment: | | > A possible BBS with door games like ZMachine and a sea- | faring game I'm writing in a private repo, (top secret!) | which used to have the only test harness solution containing | both the source and test repos. | | My hot take would be to implement a lot of LambdaMOO [1]... | in C#... because I like the grammar and parser [1], and I | like reflection and attributes... and... Well, it's a thing | I'd just like to exist. | | [1] : | https://www.hayseed.net/MOO/manuals/ProgrammersManual.html | sceptically wrote: | Correct | amelius wrote: | How is state managed? | cek wrote: | The Terminal.Gui library itself doesn't provide any special | means for dealing with state. However, the full power of .NET | Core is available for devs to do whatever they please. | hazrmard wrote: | Looking at the demo images, I must admit that I have some | traumatic memories associated with that shade of blue on a | console :) Mostly from fiddling with BIOS settings etc. | | My only experience with C# is in using the Unity 3D game engine. | Now with a console apps ecosystem, cross-platform focus, GUI | libraries, machine learning stuff, mobile apps. It's becoming an | attractive prospect by the day. | babypuncher wrote: | C# the language has always felt like "Java, but better". | | Now with .NET Core embracing cross platform and maturing | nicely, it feels like the whole ecosystem can be described as | "Java, but better". On Windows, it's already been there for a | decade or more, but the label never felt right when hosting on | Linux meant using an alternative runtime like Mono. | tecleandor wrote: | Hah! But it also feels a bit Norton Commander to me, and that's | not that bad ;) | DesiLurker wrote: | Also somehow reminded me of the old Borland Turbo-C++ 'IDE'. | would love to have something like that with good tag | navigation for daily driver. | VikingCoder wrote: | Also "XTree" which was probably the best software ever for | DOS. | onemoresoop wrote: | I remember Xtree back in 1990. Oh boy, do I feel old. I | still miss the lightning fast navigation using Xtree and | NC afterwards. I used NC till the long filenames were an | issue and though I know it supported it later on I just | moved on to crappier trends. One recent trend is to | completely disempower users by obscuring the file system | away. | [deleted] | xupybd wrote: | F# is even better. It is an amazing fun and productive language | to work in. At the end of the day a language is just a | language, but much the a keyboard some are more comfortable | than others. I find F# very comfortable. C# is also very nice | to work in. C# is probably a better choice as you spend less | novelty points. | int_19h wrote: | Blue background was a very common convention for DOS TUI. I'm | not sure which app started it, but it was seen in MS-DOS editor | / QBASIC; Norton Commander and its numerous clones; | Turbo/Borland Pascal and C++; Microsoft C, Pascal and VB for | DOS; FoxBASE / FoxPro; and so on. | malkia wrote: | And to me the opposite - Turbo/Borland Pascal/C++, or the E3 | editor. Okay, turns out blue is not great color for you - but | that was the "dark" theme at the time. | sixothree wrote: | Agreed and this library definitely sparks joy; especially | since I was looking for something just like this recently for | a quick project. | malkia wrote: | On the C++ front, I've been using this and love it - | https://github.com/ArthurSonzogni/FTXUI - it also has wasm | target, so may target the web. | | I'm regular Far Commander on Windows, and Midnight Commander, | also known as mc on Linux/OSX. In fact my "Command-Prompt" on | Windows is always FAR (this comes with certain limitations, but | I'm so used to it, I can't do my normal work without it). I could | never get into the Explorer, and only use it in rare cases. | sebastianconcpt wrote: | Oh thanks for sharing! I wanted bad something modern like | this!!! | hdjjhhvvhga wrote: | Looks great, thanks! | | As for Orthodox File Managers, I'm in the same camp and I could | never understand how people can be productive with bare | Explorer window. Most operations of files and directories | require more work (keystrokes/mouse movements) than in OFMs. | Not to mention things like having a quick look into any text | file, for example (F3-Esc) as opposed to double clicking - | running an external viewer - closing it. Practically everything | in OFMs can be done faster. | lostmsu wrote: | The main way I navigate these days is global search through | Everything. File operations apart from saving and opening | files are extremely rare, and I just do them from PowerShell | via command history. | cek wrote: | Do you happen to use "F7 History" [1] which is based on | `Out-ConsoleGridView`, which, in-turn is built on | Terminal.Gui? | | If not, why not? (Because I'd love to make it even better). | | [1] https://github.com/gui-cs/F7History | lostmsu wrote: | I use PowerShell's standard F8, which autocompletes | commands from history. | WorldMaker wrote: | Relatedly, this exact C# library was started by and a lot of | early contributions were from Miquel de Icaza who also started | Midnight Commander. | rod_ochoa wrote: | Amazing! | [deleted] | issung wrote: | How people get the mouse working in the terminal is one of those | things I've always wondered how they do it, but never look into | it because then the magic is gone. As a daily software engineer | it's nice to have some things remain as magic | gulabjamuns wrote: | What are the prerequisites for installing on MacOS ? Thanks. | cek wrote: | Just the latest .NET Core runtime. | jabart wrote: | About four years ago I had a meeting with a distributor who had | terminal app and wanted to move it to a web based app. Everyone | had the keyboard shortcuts memorized and did a quick demo that | the refresh rate of the monitor was not fast (only slightly | joking here) enough to go through all the screens they did for | each task they had to do in this system. Interesting that this | could be a useful replacement for something like that in a modern | language. | VikingCoder wrote: | I don't think you're joking at all. People underestimate how | quickly people can navigate through complex systems when | they're given time to practice: | | https://www.reddit.com/r/nextfuckinglevel/comments/xa50x1/ma... | littlecranky67 wrote: | I remember the early 90s, when the women at the local | groceries store (Aldi Germany) were equally as fast when | typing in the prices of the articles using just a numpad | keyboard on the register - before barcode scanners were a | thing. Today it seems surreal or special, but back then you | were basically considered a trained professional on the | checkout counter. | cheriot wrote: | I'm surprised keyboard shortcuts are not more normal in b2b web | apps for this exact reason. There's no technical limitation. | Bloomberg probably has the most profitable "terminal" UI, | supports the same keyboard shortcuts it had a generation ago, | and the whole thing was built on webkit last I heard. | Mountain_Skies wrote: | A state agency contracted us to replace their old green screen | CSR system with a web based one. The existing CSRs hated the | new system because they could get work done faster using the | keystroke drive system they were accustomed to using. The | client however was fine with this outcome because that job had | very high turnover and it took too long for new employees to | get to the point where they were highly productive. The handful | of long term employees asked if they could have both systems | running side by side but the client didn't want to have to | support both. At least as state employees, this resetting of | their productivity to that of new employees didn't impact their | salary level that was based mostly on seniority. | myth2018 wrote: | In my country (Brazil) I sporadically meet people using TUI- | based systems. Mostly COBOL but also a good amount of Clipper | (or Harbour, maybe?). | | I'm also aware of a couple of companies maintaining systems in | Harbour and my parents use a web app written in Pascal -- I | could tell by the error messages, which are extremely rare btw; | the system is very stable, despite the frequent changes it goes | through thanks to the tax-legislation mess we have here. | | I started asking people about which type of system they prefer: | those old dinosaurs or the good-looking, modern ones? 100% | voted for the former. Why? "It's fast", they answer. | | Some say it's because "they learned to work on those older | systems and now are resisting to change". But this is simply | false: even younger professionals, who grew using GUIs and web | apps, prefer TUIs when it comes to get stuff done. | | Such interfaces are also easier to develop. Then, I believe it | would be a win-win if TUIs were widely readopted: happier | users, systems cheaper to design, build and test. | | But trends are so hard to change... | int_19h wrote: | It would be more interesting to dive down and figure out | _what_ exactly the users like more about TUI. Just speed | alone can 't be it, because e.g. WinXP-era UI is blazing fast | on modern hardware (and was plenty fast even back then). And | if we know what it is, we can build GUIs that are just as | efficient, but that also offer e.g. better text rendering etc | compared to TUI. | | I once had an interesting experience migrating users from a | TUI to a GUI app, ~20 years ago. In that case, after watching | them work for a while and asking some questions, the takeaway | was that they really wanted the flow to be 100% keyboard- | based. Which the GUI apps nominally provided (back then; less | so these days), but all too often the correct tab order etc | is ignored in practice, making it very difficult to use. | | I made sure design the GUI with keyboard in mind, and that | common patterns they've learned from TUI would still work. | For example, the TUI had a textbox above a listbox, and it | was common for users to press arrow-down to navigate from the | textbox to the first item in the list, and arrow-up to | navigate from the list back into the textbox. This isn't | normal behavior for GUI, but I coded it in anyway. | malkia wrote: | I've heard the same about some day-trading companies, or anyone | dealing with customers/clients and has to lots to | input/navigate - they still keep old terminals to good use. | bongobingo1 wrote: | How fast does it stream a 10gb file though? | hulitu wrote: | Why would a terminal stream a file ? RCE ? | julianz wrote: | Pretty sure this is a Casey Muratori reference. Doesn't | really apply to the current project as it's a UI on top of | the existing terminal rather than a whole new terminal. | | More details: https://www.youtube.com/watch?v=hxM8QmyZXtg | ape4 wrote: | Is there a Terminal.somethingElse too ? | mavu wrote: | "Cross platform" and .NET | | Very funny. | daigoba66 wrote: | Maybe funny 4-5 years ago, but these days it's incredibly well | supported across Windows/Linux/MacOS. | benbristow wrote: | https://dotnet.microsoft.com/en-us/ | | If you haven't looked at .NET in a few years, you'd be | surprised. ___________________________________________________________________ (page generated 2022-10-13 23:00 UTC)