[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)