Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Is it still possible to live in a terminal?
264 points by ilovecaching on Oct 14, 2022 | hide | past | favorite | 253 comments
In college I did a month long experiment where I only used my computer's terminal emulator to do all my work. I wrote my code/notes in Vim, browsed the web with elinks, and wrote my emails using mutt. It was a great learning experience.

Recently I looked into doing this again and ran into a bunch of issues:

- My company uses Slack's enterprise auth, and all the CLI slack clients I could find haven't been updated in years and no longer work.

- The web is using more javascript than in the past.

- Mutt doesn't handle multiple email accounts natively for work/personal. The solutions are hacks at best. Email servers are starting to use more complete auth mechanisms that don't work well with mutt.

It seems like the terminal world is slowly getting abandoned in favor of proprietary GUI apps. Anyone still living inside the terminal? Links to tools for Slack are appreciated.




The Vim/Neovim ecosystem has gotten unbelievably better over the last 5-10 years. "Living in the terminal" for core development work is IMO better than pretty much anything else out there; my Neovim setup has a modern plugin manager; an IDE-like experience with fast autocompletion as I type, goto definition, and automated refactor support; and a side-drawer file browser navigable with Vim motions. It feels like an IDE, except that it launches in ~100ms and has ultra-low typing latency. Using it with tmux panes means I can have various drawers and panes with a series of full, incredibly fast terminals wherever I want, with long-running tasks like automated test watching/running while I edit code placed wherever I want around the editor panel. Not to mention the Cambrian explosion of "modern" terminal tooling getting built, like xplr [1], hyperfine [2], httpie [3], etc.

That being said, I think "living in the terminal" for general purpose computing, like browsing the web or talking to your coworkers, has been in a kind of frozen standstill while the rest of the world has moved on. I think it isn't worth trying to push non-dev work into the terminal currently.

1: https://github.com/sayanarijit/xplr

2: https://github.com/sharkdp/hyperfine

3: https://github.com/httpie/httpie


You sound like a sales pitch but my NeoVIM based off of AstroNvim breaks in very random ways across a dozen of servers even under same configuration, I'm about to try Helix instead of the ecosystem with pile of random quality plugins.

It looks promising at first with LSP and all that but I don't know when I had any stable moments.


Are you using different OS? This sounds like the programs your NeoVim is calling is failing you - not nvim itself.

_cough cough_ NixOS can help you out here


It's not neovim, but the surrounding plugin architecture I need. I'm using coc.nvim to get autocompletions and documentation and I find that to be increasingly brittle. Also the python3 provider stuff randomly breaks in a venv sometime.


Huh, sorry to hear that. Personally the only annoyance I've had with coc.nvim was when they changed how autocomplete worked and I had to update my keybindings, but that wasn't particularly bad.


Ubuntu 22.04.

I'm guessing the few dozens of plugins are probably messed up in a way or another after each updates.

Apparently, there's no unified QA testing among community supported ecosystem with 20 different authors.


In packer, at least, you can pin plug-in versions. I’ve never had the issue you describe - I suspect precisely because I keep my plugin count lean and pin each dependency so it’s always deterministic.


What setup/plugins do you recommend for using Neovim as an IDE replacement? I use vi for minor text editing but have never used it for development.


I use a lot of them, many specific to my work, but here are some of the ones that I think will most improve the quality of life for most developers.

- For a plug-in manager I user packer

- For file/text search I recommend telescope (https://github.com/nvim-telescope/telescope.nvim)

- Copilot (https://github.com/github/copilot.vim)

- Nerd tree for file browsing (https://github.com/preservim/nerdtree)

- commentary for commenting (https://github.com/tpope/vim-commentary)

- ALE for linting (https://github.com/dense-analysis/ale)

- Mason for installing LSP servers (https://github.com/williamboman/mason.nvim)

Once you have the proper tooling in place you can do pretty much everything in vim that you are doing in vs code or intelliJ. I've just started using it for most of my dev work recently and I have found ThePrimeagen's youtube videos on vim to be a great resource.

Series on using vim as you editor (https://www.youtube.com/playlist?list=PLm323Lc7iSW_wuxqmKx_x...)

Introduction to setting up your vim configuration (https://www.youtube.com/watch?v=x2QJYq4IX6M&t=512s)

I recommend giving it a try. The process of learning it all was fun, and as you may have heard you can eventually get pretty quick using Vim.


Is there an LSP that allows refactoring Python code like PyCharm?

I haven't found any other tools that does simple things like extracting a function, renaming or inlining variables. For example, vscode's Python support is terrible.


Jetbrains IDEs have refactorings that are light-years ahead of any LSP functionality. I can use nvim for simple or small code bases, but for any real work project I've had to use IntelliJ.

For example, I had a VSCode coworker who was asking to switch all typescript string union types to enums so they could be refactored, but IntelliJ is able to refactor (in this case rename) the string union types


Right. vim (and the likes) are only good for server side config editing but these days remote plugin of vs code can also take that role away.


This just simply isn’t true. Neovim is perfectly capable of (and I would argue excels at) being a daily driver on large projects.


It can be yes, especially depending on what you're doing. I'm so much more productive with some of the impressive refactoring actions. An example cool one for me in React is "Extract Component" where you can pull out a component and it automatically picks out your props (including types for TSX).

A recent example is that I removed all import cycles from our app last week (there where over 200) and I was able to do this purely with the IntelliJ "move symbols" refactor in a codebase of xxx,xxx lines of typescript. I can't figure out how to move a symbol to another file with LSP. I spent the first year of development at my current job when working on the front end and I'm simply more productive in IntelliJ compared to vim - I'm in vim for everything else tho (as long as it's not kotlin/java as I can't get LSP working for JVM projects).

https://www.jetbrains.com/help/idea/react.html#react_refacto...


Compared to JetBrains, no thanks.

I can't even get Neovim to run stably without throwing random errors every now and then, especially after I update plugins.


I do love JetBrains products. But they were too memory-hungry for me. I stepped away from GoLand and into Neovim and it’s been by far the best experience the past year and a half. So far, there is not a single feature I miss or haven’t been able to duplicate.

Regarding stability - pinning plug-in versions could be helpful. That’s what I’ve done and I’ve never had an issue with stability.


I have both PHPStorm and Pycharm running, each takes up 4+GB memory on a 8G M1. Slowly growing memory usage for WindowServer process makes matter worse.

For the last week, I have been playing with Neovim in spare time using a setup based on https://github.com/LunarVim/nvim-basic-ide It does pinning plug-in too.

It's working well for small projects so far.


Agreed - neovim is plenty stable for me. The built in package management and git submodules in my dotfiles works really well and is dead simple.


Oh I'd much rather use vim than VSCode


In addition to all the language servers folks have already pointed to, Github Copilot works -- surprisingly --- great in Neovim. Tim Pope (author of fugitive and many other popular Vim plugins) wrote the integration.

https://github.com/github/copilot.vim


Have this running in Termux on my phone.

Copilot + nvim + Termux makes it reasonable to code on a phone.


I've had great success with coc.nvim for IDE-like features; it manages language servers for you: https://github.com/neoclide/coc.nvim

For file browser side-panes there are tons of options, but no one ever got fired for using the venerable old NERDTree.

The rest is mostly just tmux!


Lunarvim is a pretty solid choice and comes fully stocked with cool plugins that match most of the popular editors out there. Sometimes I even forget i'm in a terminal.


Depending on what you deem to be a suitable replacement i'd recommend:

  nvim-telescope/telescope.nvim // integrates well with code actions and searching (very extensible in general, similar to ctrl-p)
  hrsh7th/nvim-cmp
  hrsh7th/cmp-nvim-lsp // for language server completion
  neovim/nvim-lspconfig // a bunch of language server specific stuff
note, that you'll probably need a bit of time to configure it to your liking and that nvim doesn't install the language server by itself, so that is something that you need to take care of by yourself as well.

If you want to see what a preconfigured IDE-replacement might look like you can take a look at lunarvim(but beware, it misbehaves on windows quite a bit, you're better of with a linux system here)


lsp-zero is a good way to get a completion running without configuring many plugins...it installs several of the above.


If you’re just jumping in, you can’t beat starting with lunarvim or astrovim and then customizing further from there if you need to. Neovim is fantastic, and the best way to edit code IMO, but getting it set up to a point where it has the features of vscode/IDEs can be a project in itself.


There's really only one "class" of plugin that's a "must have" to turn Vim (Vim or Neovim) into an IDE replacement and that's some kind of Language Server integration; there are several you could pick, they all allow your Vim to automatically start and talk to a local Language Server, giving you all the fancy autocomplete/go-to-definition/inline documentation/etc that you expect from an IDE. Otherwise, I dunno, maybe a nice color theme? Probably the only one I really depend on that's not part of "general" vim is the FZF plugin, which lets me rapidly and quickly fuzzy search for files by their name anywhere in the folder I'm in.


I use Neovim all the time but although I do have some linters installed I find all the fancy stuff so much worse than in a more visually appealing editor. I love vim and I do have a lot of affection for the terminal but things get extremely visually noisy with language servers in a way they just don’t with a more graphical interface.

It sucks because I want to use vim for TypeScript dev but I just can’t stand it compared to VS Code. For non-typed languages I still use vim, and I love how I can fluently edit anything on servers I shell into, but I kind of wish there was a middle ground of some kind.


Can you explain what you mean by “visually noisy”? If you’re referring to the diagnostics messages (virtual text and signs and such), that is easily configurable to disable (I would know, I wrote it)


I mean like all the stuff that displays in and around the code, that isn’t the code itself. For example warnings, hints, etc. An obvious example of something you can’t do in Neovim is display information in a smaller font. Generally speaking you just don’t have nearly as many options for creating information hierarchies in a UI consisting of ASCII characters.

In terms of turning things off, if you turn them off, then what’s the point of having the language server? (Not a rhetorical question - I would describe myself as a workaday programmer, not a master by any means.)


>In terms of turning things off, if you turn them off, then what’s the point of having the language server?

Code navigation and completion, for one.

But there are plenty of knobs to turn that provide a spectrum between “show nothing” and “show everything”. I also find the inline diagnostic text noisy, so I configure it to only show on the line where my cursor is. You can also use the “open_float” function to open the diagnostics on your current line in a floating window. That way you can leave them off my and simply view them on-demand.


You can use the vim extension for vs code, which let's you have your cake and eat it to. All the convenience of vs code with all the speed from using vim commands.

https://marketplace.visualstudio.com/items?itemName=vscodevi...


If you really want speed, you’ll want the neovim extension. This replaces VSCode in many ways, making it neovim under the hood…which means no waiting for VSCode to figure out what’s going on in your giant codebase, no wondering why it takes literally a full half-second sometimes before the characters you just typed pop onto the screen. But it’s still VSCode “on top,” so you can tap into the other features you might want when you want them.

Full disclosure: it’s been years since I used it, but I was super impressed


I still haven’t made the transition to Neovim in favor of stability, but here’s part of my dotfiles repo that installs all the plugins that I use with Vim:

https://github.com/relaxdiego/dotfiles/blob/main/run_once_07...


Look up astronvim for a pre-configured setup that'll work for you. You cam try that and add your own stuff in the user configuration. It's pretty easy.


coworker #1 was literally waiting 30seconsa for his webstorm to open a subdirectory (in a really big code tree)

coworker #2 was struggling with his vscode autodeleting some imports

strange times when you are the vim developer in the house and the one with the most solid IDE...


Do you have your dotfiles on github?


This is a good place for a basic neovim setup for programming

https://github.com/NvChad/NvChad


I do, but I keep the repo private. I've seen too many people accidentally check their keys into public dotfile repos.

coc.nvim (https://github.com/neoclide/coc.nvim) is a great starting point though!


why use coc when native lsp is supported. lspconfig plugin is pretty straightforward to setup.


Can you:

- Edit code

- Autocomplete

- Navigate code, find references, go to definitions

- Run your code

- Debug your code

- Test your code (including running a specific test)

- Profile your code

- Run multiple static analyzers simultaneously

- Use version control and annotate code using version control

- Do all that remotely or with containers involved

- Query a database and get results in a tabular format

- Spell checking

- Have collaborative editing

- Work with issue tracker tickets

- And more...

The sad reality is that for 99.9% of people using vim is reinventing the square wheel to produce a worse development experience and inferior code.


Everything up to and including spell checking, yes. In fact none of those first items are remotely unreasonable to do in a terminal, rather surprising to see them being used as arguments against the terminal.

- vim, neovim, Emacs configured with LSP - https://git-scm.com/ - http://aspell.net/ - https://github.com/tmux/tmux - https://github.com/dbcli

Emacs also exists which runs in the terminal mostly (I only miss image rendering personally).

Collaborative editing is something I don't do much of but would guess there's a neovim plugin which could be used for backend sync.

Interacting with your issue tracker depends on the issue tracker software you use (flat file would work for example, Jira has unofficial clients, etc).

- https://www.emacswiki.org/emacs/JiraMode - https://marketplace.atlassian.com/apps/6398/jira-command-lin...


IntelliJ does all that much better than what any vim plugin can.

DataGrip wipes the floor with pgcli

How do you find duplicate code with that setup?


I've used IntelliJ plenty, and it's pretty bad at most of those tasks. Using the git CLI is much better for version control than the Jetbrains GUI wrapper; using Docker itself rather than a wrapper is much better for containers; etc etc. I'm sort of amazed the question of "can you do version control in a terminal" is even being asked... That's where git originated! That's the git team's primary development focus even today!

"Can you run multiple static analyzers simultaneously"... That's sort of the point of *nix systems: multiple processes running simultaneously. Using the shell is of course going to allow that, especially with something like tmux!

Most of the editor questions were also answered by my original post (and the answer was yes).


> Using the git CLI is much better for version control than the Jetbrains GUI wrapper

For some things. But for reviewing activity in git, and tracking changes across time, doing it in the terminal is unproductive and sucks. (e.g.: 10 levels deep of git blame)

> That's sort of the point of *nix systems: multiple processes running simultaneously. Using the shell is of course going to allow that, especially with something like tmux!

I meant getting a consolidated list of from them, and also having the ability to run corrective actions.

> Most of the editor questions were also answered by my original post (and the answer was yes).

Sure, but how much crap do you have to memorize? It's not a unified experience. It's a duct-taped Frankenstein where every subsystem works differently.


> For some things. But for reviewing activity in git, and tracking changes across time, doing it in the terminal is unproductive and sucks. (e.g.: 10 levels deep of git blame

The shit I've seen IntelliJ users do in git repos is insane. Somehow they create merge commits between their local branch and the origin version of their branch. They've lost changes, rewritten history, all sorts of shit, with 0 understanding of what or why. I'm guessing the warnings come as a pop-up and people instinctively just click ok without reading.

> Sure, but how much crap do you have to memorize? It's not a unified experience. It's a duct-taped Frankenstein where every subsystem works differently.

From your replies it's pretty obvious you have made up your mind. But what you are describing is my exact experience with JetBrains. The good thing about JetBrains tools is that their language analysis stuff is truly state of the art and significantly better than the equivalent LSP stuff out there. Apart from that everything is a Frankenstein setup that works differently.

In vim, all those plugins are just splits. So I can navigate between them with just ctrl+w->h/j/k/l (most people rebind to ctrl + h/j/kl). Each split supports the vim hotkeys by default, because that is the design of vim.

In intellj it's an incoherent mess. Every pane has some weird fucking hotkey that makes 0 sense. You cannot just go "select the pane on the left). The hotkey is ctrl+shift+alt+7 or something insane, to the point where it's not worth it and you just need to click everything.


Sure, but how much crap do you have to memorize? It's not a unified experience. It's a duct-taped Frankenstein where every subsystem works differently.

IDK, my experience with JetBrains is it's leaky abstractions all the way down, outside the core edit/refactor features. Using JetBrains Git without knowing git... I mean, I've seen people do it, but they seem pretty frustrated and confused when things go wrong.

I'd rather just learn the underlying tool once, rather than the underlying tool and also the leaky wrapper around it too.


> But for reviewing activity in git, and tracking changes across time, doing it in the terminal is unproductive and sucks

tig is great at that. "tig blame" and "," is the way to go for researching the history of some code.


>> Using the git CLI is much better for version control than the Jetbrains GUI wrapper

> For some things. But for reviewing activity in git, and tracking changes across time, doing it in the terminal is unproductive and sucks. (e.g.: 10 levels deep of git blame)

Magit[1] in Emacs is quite okay. It doesn’t feel duct-taped. I haven’t used fugitive[2] in Vim but that’s a thing that exists too.

[1] https://magit.vc/

[2] https://github.com/tpope/vim-fugitive


Fugitive is legendary for using Git inside of Vim/Neovim.


I find duplicate code by using a tool such as Sonar for a large codebase, or by reading and knowing the codebase if it is small enough.

But I think you mean how do I refactor duplicate code?

lsp-mode (https://emacs-lsp.github.io/lsp-mode/page/main-features/) for smart code navigation or projectile-replace (mentioned in https://with-emacs.com/posts/tutorials/search-and-replacemen...) for dumb replacements.


Yes you can do all that stuff with like 2 plugins

LITERALLY BUILTIN: - Edit code - Do all that remotely or with containers involved - Spell checking

ALE: - Autocomplete - Navigate code, find references, go to definitions - Run multiple static analyzers simultaneously

DISPATCH: - Run your code - Debug your code - Test your code (including running a specific test) - Profile your code

FUGITIVE: - Use version control and annotate code using version control


By the time you are half-way configuring that I am already done with my tasks.

By the end of the first sprint you'll have carpal tunnel syndrome.


Why do you care so much what workflow some rando on the internet uses?


It's not only some rando on the internet. There's always that one co-worker with a wannabe-vim-hacker setup, that you have to help occasionally with some real work task and nothing in their setup ever works effectively (bonus points for only using DVORAK). After showing them how much easier things are with autocompletion in intellij, next week they proudly show their latest installed emacs-plugin, that only does half-assed keyword completion, without being aware of variables, imports and the program structure. Such a waste of time. Lately I've started to just refuse cooperating under such circumstances, unless they truly show they know their tools.

Mastering the commandline is of course still important, just please not for editing code.


If you want half-assed keyword based completion, you don't need any plugins at all (e.g. ctrl-n in vim).

And if you install a proper plugin that uses language servers, you're at the same level of VSCode, which I'm pretty sure is the most used editor by a wide margin.

Your rant sounds more like you're more annoyed by "wannabe-vim-hackers" than any actual limitations of the tools.


Not OP, but to me, software that requires installing multiple plugins and extensions on top of it and requires much configuration in order to be useable is basically "unfinished software". It's 2022. Software not just has to work out of the box (or out of the download), it has to be packaged with everything needed to actually use it. It has to come fully configured for the most common use cases, or be able to fully configure/adapt itself at runtime. The days of sitting there installing plugins and tweaking settings and looking up how to configure it to do Common Use Case Xyz should be long behind us.

For example browsers. Whenever there is a Must Have extension that basically everyone downloads and installs, we should not be saying "See! It's great that software has plugins and extensions!" We should be saying "The development team totally missed this."


To be honest, VIM doesn't require plugin installation to be fully functionnal.

The main problem with VIM is that nobody reads the documentation, and jumps directly trying to configure vim to imitate what they experienced with other softwares.

Most VIM users never understand VIM philosophy and inner mechanism supporting it. They just try to bend VIM into another graphical code editor.

It's like the meme about "exiting vim". It is pointless. Once you understand VIM you never need to exit it. Just Ctrl-z or use neovim terminal if needed.

The best challenge i was given by VIM guru, when i was asking help installing dozen of plugin, was to read the vim doc (:help) and just use for 6 months a VIM pure vanilla, without any plugin and minimal vimrc. After more than 20 years using VIM daily, i just understood i never learn how to use VIM and were just an adept of CARGO-CULT, victim of mass spread anti-pattern.


I guess you could shell out to check for errors (for example), but isn't it in general nicer to get error messages as you go? Or how about actually intelligent autocomplete? Stock vim simply cannot do those.

What are some examples of plugins people commonly use that you think are useless?


This is like saying a library is incomplete because it does one thing well, and if it’s not a full-fledged framework it’s useless.

I recommend learning about Unix and the associated philosophies - you sound like there’s a lot more growth in your future!


Yeah spending some time to set up a tool you will probably use for the next 30+ years is outrageous.


What you describe is rather 1995. Bloated vendor piece of software that tries to do too much and comes with a vendor manual.


[flagged]


I'm a sysadmin, and most of what I do (editing config files) is very efficiently done in nano. Edit a vhost in apache/nginx. Change a port number on a service. edit rc.conf, etc...

But I've discovered that by using vim macros, the tedious parts of using nano became easy and FASTER then nano.

Let's say you have to declare a bunch of IP's and you can't just type a range, you have to type out each one.

192.168.0.100 192.168.0.101 ...etc... 192.168.0.199 192.168.0.200

In nano: copy/paste each line then backspace to change the last octet. TEDIOUS

In vim: write it once record a macro of doing it a second time auto-incrementing the last octet. now type: 199@w (or whatever letter you stored that macro in) BOOM, 199 new lines have been input.

That 1 use case, made me use vim more. Then I got better. Then I got faster.

Now I can edit those same old config files faster then I once did in nano. Please believe me, it's worth the learning curve. There is SO MUCH MORE available then just editing some config files.

Nano is fine. There is nothing wrong with nano. If you only edit (config) files a couple of times a year, then maybe you won't want to switch. But I'm so much better at vim then I was before, I use it to do ALL my writing and editing.


    printf '192.168.0.%s ' {100..200} > fuck_vim.txt


Literally nobody is asking you to use vim. In fact, I don't recommend it to newbies, and warn that a lot of setup is involved. But I am 100x more productive in it than any other IDE, or seen anyone else with an IDE. It works for me. It may not work for you, that's fine.


[flagged]


You might be well served by not seeking out the company of vim users then. There’s better things to spend this life on than arguing about editors, plugins, and keybindings.


Yes there's a learning curve but once you've learned that it can be more efficient. For some people key bindings are easy to remember. For others a menu is better even though it's slower to navigate.

But clearly it isn't for you. It isn't for me either, though I did try. I just don't really have a reproducible workflow (I'm not a dev). In that case the setup overhead does indeed not pay off. If you spend every day in an IDE I could definitely see it working out.

Even on my work mac I often prefer using the cli for things that others would do in the GUI. They find that archaic and overly complex. I find it simple and faster. Opinions vary :)


Not because something has a learning curve, it means it is better.

You could memorize the entire Sacred Scrolls from Planet of the Apes, that doesn't make it practical.


Plenty of 1-command preconfigured Neovim distributions.

It’ll take less than 5 minutes to install a Neovim-based IDE-like environment; batteries included:

    bash <(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/master/utils/installer/install.sh)


    echo "Fuck vim" > /etc/motd


I've been using Vim since college and nothing else and I could retire at 33 from my FAANG RSUs so it worked for me. Have fun "getting shit done" in VSCode or whatever. Honestly if someone told me they hated memorizing commands or configuring their environment in an interview I would see that as a big red flag, but you do you.


Most of it unvested stock and not enough to retire at 33.

Thanks to the great people running the economy, if you get to survive all layoffs taking place and vest that money, you'll be able to buy an avocado toast made of soylent green in the metaverse of the future. You will own nothing and be happy.


Why do you ask a question and then belittle any responses you get?


Why don't you read user names?


Vim? Heck I can do all that with nano ... wth are you talking about?


I'm curious, how would you handle collaborative editing in nano? All the others seem doable if a bit hacky, but that one confused me.


I’m a (Neo)Vim user rather than Nano but off the top of my head, I’d use tmux to share a Nano session on multiple computers at the same time.


Yeap, what the other guy said. I prefer byobu to vanilla tmux, but the idea is the same. Create a byobu session, detach, give it group permissions, group collaborators attach, enjoy the nano editing party. :)


Haha, damn dude. Did your step-dad use vim?


The commandline is more powerfull than an IDE due the very logic the things work, and has much higher skillcap. You apparently have some skill in an IDE, little skill in the commandline, and draw the incorrect conclusion that the IDE is better.


The answer is yes, but you have to make friends with the employees and plan to marry a local.

See this documentary: https://www.imdb.com/title/tt0362227/?ref_=fn_al_tt_1


This is 100% what I expected the question to be about. Thank you for providing the answer I was hoping for!


I don't know about "living" in a terminal, but CLI/terminal tools are quite far from being out of the picture; if anything, I'd say they're thriving. It's not about one or the other; they're complementary, and I use both every day.

Personally, I use Firefox for browsing, PyCharm for coding, mpv/qimgv for media, and do pretty much everything else in the terminal. Terminal tools are incredibly versatile and composable in a way GUIs really can't match - for instance, I built a script that gets all the RAW files from my camera, converts them to jpg with darktable-cli, and optimizes them for filesize maintaining the same visual quality with jpeg-recompress, great for when I don't particularly care about editing each picture of a long hike. Next step will be to also push them to Google Drive, but I haven't gotten around to that yet. Similarly, the gopro-like camera I use for recording racing footage produces files with some weird filenames and terrible encoding which makes them enormous, so another script pulls the files, renames them to the date/time taken, and uses ffmpeg to transcode them to hevc, which saves several GB. Could I do this all from GUIs? Probably, but it'd involve a lot of hunting for files, dragging/dropping, and context switching between different programs. It's a lot more convenient to do it all in one short command.

There's also some amazing tools which just don't make much sense or would be quite contrived in GUI form. fd and fclones come to mind. AI is starting to be packaged as CLI tools, and it'll open up even more possibilities. Separate hiking pictures into their own directory? Sure! Find lecture videos mentioning a specific subject? No problem, this one doesn't mention the specific keyword you were looking for but it's also relevant at X timestamp!


How is the results from the Darktable conversion? Are you able to share the script?


I keep a 'perfect terminal' in the office, basically a system with an nvidia 7600 in it because that's the fastest 2D text thing I've found to date (yes, modern cards are so slow in text mode it's not even funny). Configured for 24 VT's, a bunch of them autoconnect to remote systems/run specific applications etc at boot - so if I want the calculator, for example, it's Alt-F12.

For local graphics programs, that also provides a memory-mapped framebuffer which makes basic graphics a doddle. Beyond that, text-mode browsing has been too hard work for years (and so by extension email too). While it's very possible to 'cheat' by setting X to render to a framebuffer (either directly or in the background) the whole reason to use the text-only console is to focus on code without computer-borne interruptions.

Even on my graphical computer, it's basically terminals windows and a browser. Any piece of software that interrupts the flow is either configured to not do so, or discarded PDQ.

Terminals FTW.


What do you mean by fast or slow in text mode? Like the 7600 is literally writing text to the screen faster than modern cards or?


Yeah... modern graphics cards have really limited text mode implementations and even worse, often broken ones that don't display the correct colors even (can find many complaints of those running "classic" games etc). There are/were a LOT of basic text modes that were supported up until they were largely deprecated and only very basic implementations exist now... and often are slow to render walls of text. It's kind of wild.


No idea if op refers to that. I don’t think so, but modern stack can be ineffective.

My work mbp M1 was having a delay writing text in external monitor

While all the rest, including vidéo, was display without delay.

I had to tweak some driver settings ( of the base , not my graphic card )


Did you happen to write down what you tweaked? I use an MBP M1 with an external 4K, and I've had a sneaking suspicion that my keyboard inputs are somewhat delayed. Just hasn't ever felt quite right....


You can use slow-mo mode on your phone camera to confirm your suspicion (or use an app[1]). Just record yourself pressing a button with your keyboard in front of the screen in slow motion.

[1] https://apps.apple.com/us/app/is-it-snappy/id1219667593?plat...


yeah It was silly, the displayLink drivers of the docking station had to get an update specifically for those models. In my case there was no mistake possible: there was a solid second between typing something and actually see the text on the screen. Unusable as is.


Yes, much much faster. The 7600GT will do about 900k characters per second (stock) or 600k at 160x60 using ter-u20b font. Last time I tested, a GTX580 does about 187k per second but that's in stock 80x25 VGA mode without a framebuffer; to get a direct framebuffer the only option I'm aware of is nouveau, and that drops the rate to about 14k per second (so only just better than the equivalent of 1FPS at 160x60, as thast's about 10k characters on screen at once).

Some of the kernel changes that are happening may well make it possible to have simple high-speed framebuffers that can be used for text consoles in the future, so there's still hope.


Reading commends like this makes me so grateful I never got into the whole terminal deal and grew up coding on shitty computers.

In my blissful ignorance I could produce just as much effective code on a VNC machine competing with a 1080p Netflix stream on a rural DSL line as I could on a local machine in TTY mode.

The brain is really amazing at what it can adapt to, when I'm typing in a laggy situation it's like "see" the output of what I've typed before it's on the screen and end up being comfortable doing stuff like fixing a typo before it's even been reflected on the screen


Indeed, I started in the days of 40x25 video terminals at home, and new-fangled stuff like modems were only just starting to appear (my first one was 300 baud). Getting a job and having 9600 baud VT100 terminals was truely magic (they still have a teletype for printing work orders on).

However, I've never been tolerant of lag - having a time gap between doing something and having a response just adds to mental workload, it's friction between me and the machine (especially pronounced with IDE's that try to 'help' by taking a second or two to come up with a suggestion, by which time it'll have been left in the dust).


> - My company uses Slack's enterprise auth, and all the CLI slack clients I could find haven't been updated in years and no longer work.

https://github.com/wee-slack/wee-slack is decent.

> - The web is using more javascript than in the past.

cli browsers are probably the only truly unrealistic thing. An idea that I've been kicking around for a while is to build a simple CLI "browser" that uses PhantomJS or similar under the hood to request, load, and render the page into an image, convert the image to sixel (https://en.wikipedia.org/wiki/Sixel) and display it that way (or use any of the various terminal emulator-specific features (KiTTY has https://sw.kovidgoyal.net/kitty/graphics-protocol/ for example)). Probably pretty clunky, but it's doable if you're in the mood to write something purely for fun.

> - Mutt doesn't handle multiple email accounts natively for work/personal. The solutions are hacks at best. Email servers are starting to use more complete auth mechanisms that don't work well with mutt.

I don't think they're hacks. You can define exactly how you want it to work. That's a feature, not a bug. Sure, it takes a little bit of work to set up but you can use https://github.com/cweagans/dotfiles/tree/master/.config/mut... as a starting point if you'd like.


You might be interested in https://brow.sh


Holy shit that's an impressive browser.

Some glitches for sure and I couldn't actually draw in Excalidraw, but I obviously wasn't expecting to.


I do almost everything in terminal windows, but for emails, Slack, video calls, and other support-related things I use native MacOS/iPadOS apps. It doesn't make sense to do everything in a terminal because not every useful service works in a terminal. Choose your environment and tools based on utility.


I agree. I don’t really understand the point in being a terminal maximalist. Yes, I do 90% of my work in vi or ssh and that’s what I prefer.

Checking my email or chatting though, why bother? The company pays for outlook and slack, I’d just be making my life pointlessly difficult.


The overhead of context switching is a thing.

Running a bunch of Electron apps to handle basic things slows you down and takes an unnecessary amount of system resources.

Most users can’t automate GUIs to create workflows, assuming the apps and the platform being used even support that.

Scripting CLI tools has existed since the dawn of Unix.


> The overhead of context switching is a thing.

Yes, and that happens regardless. I can turn off notifications and choose when to look at email or Slack or whatever. I can have those apps on my iPad screen and ignore it or put it in focus mode. If you're talking about switching applications that's just a keystroke whether I'm in screen/tmux or in MacOS.

> Running a bunch of Electron apps to handle basic things slows you down and takes an unnecessary amount of system resources.

All of the native apps I use work faster than I do, I don't think they slow me down. System resources have come a long way since the early days of Unix you refer to. None of my devices struggle with low resources. I mainly work on remote servers so that's where I compile and test code and so on, and those machines don't have GUIs or apps hogging up resources.

>Most users can’t automate GUIs to create workflows, assuming the apps and the platform being used even support that.

Sure, and even fewer users can do anything at the command line.

> Scripting CLI tools has existed since the dawn of Unix.

I remember. That happened about four years into my career as a programmer. I didn't start to see Unix in the wild for a few more years. Scripting CLI tools pre-date Unix but they sure got nicer when Unix took over.

I'm happy to use the command line for almost everything I do in terms of programming. But some of what I do to keep my customers happy involves communicating with them, reading stuff they send, etc. I can't force my customers to stop sending PDFs or HTML emails or links to Zoom calls, nor would I want to. And I'm not going to live with 1970s technology in imitation of Richard Stallman, because however great the terminal and Unix CLI can work for so many things, they aren't the best tool for everything.


Emacs (which can be run in the terminal using the "-nw" option) has a slack package -- I dipped my toes in and noped out quickly, as I found it too difficult and too ugly compared to using the app: https://github.com/yuya373/emacs-slack

I've tried to do the same thing: going completely text mode. For me, it was disastrous -- it was a big distraction for me at work, at two jobs. I even left a good job partially so that I could try to go text-mode rather than click my way through lots of GUIs. It was something of an obsession. Now I look back and sigh.


From the headline, I thought the post would have been about this guy: https://en.wikipedia.org/wiki/Mehran_Karimi_Nasseri


I was thinking The Lawnmower Man https://www.youtube.com/watch?v=3LNvXjb44-U



I was thinking The Omega Man https://www.imdb.com/title/tt0067525/


It is possible but inadvisable. A more realistic approach would be terminal + browser.

Living in a terminal itself doesn't really mean much, as it strongly depends on your tasks. For things like number crunching or programming, it has a pretty big benefit (as text is the universal API after all), and you can do pretty much everything, usually faster and more reliable than a GUI can.

But when you need to do data visualisation, make use of external services that do not provide terminal emulation interfaces or want to work with people that do not live in a terminal, that makes a 60/40 split the best choice.


Early on in my "Linux journey" Xorg and KDE both made some drastic (and not well planned) changes simultaneously that left me stranded in a terminal for several weeks. During that time I was surprised to learn how genuinely functional and capable the terminal could be. Turned out that nearly everything I needed to do was still possible with very few exceptions. Much of that still holds true today, with one major difference. The tools we have at the terminal these days are much nicer than they used to be. Some of them are quite close to GUI tools in their functionality and richness of display output. Because of this I still use the terminal quite heavily even while working primarily in a GUI environment, just because for many tasks it's quicker and easier by far than hunting through a GUI looking for the right place to click to get a thing done.


The solution is not to get religiously terminal.

I keep two desktops open and can flip with a keystroke.

One of those always runs a full screen browser on gnome desk, and the other is the shell.

I flip between those. Email is webmail but on the other screen code editor is vim.


Yeah if you're more effective in terminal then go for it, but I think you'll at least need a good web browser to fill in the gaps.


Since Emacs runs just fine in a terminal, I imagine so.

Although, if you are going to live in Emacs there might be enough terminal there without actually running it in a terminal.


> - Mutt doesn't handle multiple email accounts natively for work/personal. The solutions are hacks at best.

I don't know about Mutt, but I've had no problems handling multiple accounts with mu4e on Emacs. `emacs`/`emacsclient` can be forced to use the terminal by using the `-nw` option.

isync/`mbsync` can also work with multiple accounts. Although, this program just sync's an IMAP account with a local Maildir that clients like mu4e can use for reading mail offline. It's an MRA[1] rather than a whole MUA.

There are many other terminal email clients you can also try.

> Email servers are starting to use more complete auth mechanisms that don't work well with mutt.

Google can support standard auth by activating 2FA, then making an app password. You can do this here:

https://myaccount.google.com/security

Google specifically needs "more complete auth mechanisms" because its regular password gives access to much more than an email account, since Google accounts are a huge platform. What other servers are moving away from standard auth mechanisms?

[1] https://en.wikipedia.org/wiki/Mail_retrieval_agent


I'm not sure about mutt but I used neomutt with Google oauth just fine (the setup is not particularly easy per se, but not too bad either).


I was a terminal poweruser wannabe. For a time I tried just using tmux and Vim on almost all occasions. I still use Vim for something, like writing Puppet code. For everything else: I've just come to embrace to the GUI.

Unless you're an absolute terminal power user that can masterfully navigate tmux, vim or whatever tools you use, I don't think it's a good use of time. There certainly are things where the terminal is the right tools, use it in those situations. Just ask yourself if you're artificially limiting yourself, simply because you think the cool kids use the terminal.


I'd suggest zellij if tmux is too intimidating.

Rather. 99% of what I use tmux for is both: not what I would consider "power user" skills; what I think terminal emulators like kitty or iTerm2 will mimick anyway; and reflects how e.g. VSCode arranges its open files.

I find it convenient to have a session of tabs for a particular task/project, and to switch between the tabs depending on what I want to do.

That said, I rarely make use of split panes (nor a tiled window manager). YMMV, but I almost always want whatever I'm looking at to be fullscreen.

Zellij at least shows the keyboard shortcuts.


Many of our latest hires (new college grads) struggle with terminals and CLI in general. It seems like recently students have stopped getting this exposure which leads to them joining and not knowing how to ssh into a damn linux VM. It's a pretty daunting world.


It's upsetting to see how children's and young people's education gets dumbed down. I went to a toy shop earlier this week and the kits for scientific experiments (chemistry, electronics) have been dumbed down compared to the 1980s. Back then, you had a huge box with chemicals and tools and a proper 100+ page handbook full of experimental instructions (chemistry) or resistors, transistors capacitors etc, and a handbook full of design schemas that you may want to construct e.g. a little radios (electronics). Now you can do "20 safe experiments" like making a LED flash.

In computing, students want to do their coursework on their iPad in a notebook environment, relying mostly on step-by-step instructions given as PDF file or from an online tutorial, based on copy & paste, without understanding what they paste there instead of compiling libraries or write a makefiles from scratch.

Starting next summer, I will include a 2-3 hour UNIX command line (and also a 2-3 hour LaTeX) intro into all courses I teach where that can be justified. (The UNIX Power Tools [1] book is a useful resource for teaching, I found in the past.)

[1] https://www.amazon.de/Unix-Power-Tools-Classique-Us/dp/05960...


> Starting next summer, I will include a 2-3 hour UNIX command line (and also a 2-3 hour LaTeX) intro into all courses I teach where that can be justified. (The UNIX Power Tools [1] book is a useful resource for teaching, I found in the past.)

That's great to hear. If I were in a position to introduce students to the terminal, I'd also try to expose them to the existence some modern CLI tools so they don't feel like they're trapped in the 1970's.

Something like Starship, tmux/byobu, enabling colors, exa/lsd for ls replacements, dust for a modern take on du, easy terminal editors like micro to ease students into editing text in the terminal, along with mentioning how Vim/Emacs can be used in places of editors/IDEs. They'll get to see that the terminal is both modern and relevant, with ample use of color, font weighting, emojis, images, text GUIs, window management via tmux, etc.

I obviously wouldn't make that the focus, but as a quick aside about the tools they can use with some screenshots or screensharing my own terminal setup might keep some students interested.


I've talked with professors about this, and it seems that if students want to learn how to use the terminal, they need to figure it out themselves or take whatever UNIX/Linux-related classes that are offered, and those classes are usually electives and not required.

Apparently some professors are leaning more and more on desktop & cloud IDEs, and other development platforms that just let students code and not worry about the rest. The argument is that abstracting away system administration allows teachers to spend more time on the content they need to teach versus spending time setting up and debugging systems.


It is the job of the professors to create students that master the machines, not be slaves to them. We must raise a generation that creates worthy successors of systems like UNIX, X11, Emacs - instead of not mere derivatives.

Having said that I concur it's true what you say, there isn't somewhere to go at many universities even if students are interested - the command line hasn't got much of a place in modern curricula - but recognizing that we must fight it (employers talking to deans helps a lot! Universities are more customer-oriented than ever in history).


Interesting. I perhaps nearly singlehandedly torpedoed one of these a few years back. I think I'm glad I did.


> It seems like recently students have stopped getting this exposure

Depends on what you mean by recent. I wouldn't expect exposure to have been greater 10-15 years ago. If anything, I would expect CLI exposure to be greater now compared to then, at least because of the rise of git.


For Slack in particular, the deal is that new signins return a token that starts with "xoxc", not a token that starts with "xoxs", and that token requires corresponding cookies in order to be accepted. If you're grabbing a token out of the browser, you will also need to get cookies for slack.com and pass them in the client. Last I checked, you only strictly needed the cookie called "d", but you may as well grab all of them.

A bunch of folks who have been using Slack for a long time have saved their xoxs cookie from a couple of years ago and not invalidated their old sessions, and they'll tell you the various clients still work. For a new user who is getting an xoxc token, your client needs a way to pass cookies along with your token. Many of the terminal clients I've seen don't obviously give you a way to pass the cookie.

My company uses the enterprisiest Slack offering (Enterprise Grid, compliance archiving, proxy restrictions, the works) hooked up to Azure AD as the identity provider and previously to Okta via ADFS, and I have working programmatic auth to Slack (leveraging local Kerberos tickets from Windows AD signon). Give me some details on what your auth setup looks like and I can probably help you with it. (I can try to open-source my internal client if it helps, but it's specific in some ways to our setup so it might be easier to just talk you through it.)


I still find it utterly baffling that Windows and Apple haven’t integrated better “hyper-productivity” oriented workflows into their OSes. I’ve tried (and failed) on multiple occasions to “ditch the mouse” for full keyboard nav but it always comes up short around the browser. Even VS Code has pitiful keyboard-only navigation support.

These days I pretty much work exclusively in terminal, having gotten used to vim mappings and just sticking with it. Still, I’d rather be on a desktop.


Not natively, but through a handful of plugins I have been able to go most days on my MacBook without touching a mouse/trackpad.

There are occasional times I need to pull it out, however. But with Yabai + Vimium + terminal the majority of my day-to-day needs are met happily mouseless.


It obviously depends on your working environment..? I'd be screwed 5 minutes into my workday having to sign into our PDM.

> It seems like the terminal world is slowly getting abandoned in favor of proprietary GUI apps.

Eh, I'm seeing quite the opposite trend. I see people doing stuff that'd consider using a terminal to be straight up inappropriate for (e.g. displaying line graphs).

And your troubles with Slack is most likely down to it being proprietary garbage.


For everything except web browsing, I use the terminal.

neovim - text editor

aerc - email

nzbget - usenet

irssi - chat

mpv - audio

still hoping for gemini to take over for a full terminal experience.


Any thoughts regarding irssi vs weechat?


I'm not sure what specific issues you've had with mutt, but I have mine setup with multiple accounts & have in the past used it for a work account where I had to do IMAP/SMTP auth via oauth token rather than username/password. It's definitely not a super well supported happy path & requires some setup, but it's worked well for me.

- Multiple accounts: I have a per-account config file with the relevant specifics (https://github.com/wfleming/dotfiles/tree/arch-linux/home/co...) and use folder hooks to apply those depending on which mailbox I'm viewing (https://github.com/wfleming/dotfiles/blob/arch-linux/home/co...). (Plus a keybinding in each account file to make flipping to the next account easy.)

- Non-standard auth:

  - I use offlineimap to sync my mail, and it supports oauth2 for Gmail. The arch wiki has helpful details: https://wiki.archlinux.org/title/OfflineIMAP#Configuring_OAuth2_and_getting_access_tokens_via_mailctl

  - For sending mail, I use msmtp, which also supports oauth2. Again, arch wiki has some helpful details. https://wiki.archlinux.org/title/Msmtp#OAuth2_Setup
For web & Slack, I sympathize and have toyed with CLI alternatives in the past, but I'm come to terms with the the fact that it's just not that feasible for the most part. Personally, I spend as much time in the terminal as I can, but I've given up on fighting against the tide for everything. The only native apps I usually have open are Firefox, Slack, and Spotify, and that's acceptable to me since it ends up meaning I still spend most of my day in a terminal.


Terminal code review seems to be a niche looking for an occupier. I live in my terminal for editing text and code, running code to generate more text (test output), deciding how to break that code into meaningful chunks and writing about what each chunk does to make the codebase better (git).

This is realistically a huge part of my job.

The next part of the cycle though is always web based. Where are the code review tools that integrate with my editor? Why am I not reviewing someone’s changes presented as a branch in my working copy? Can I do this without having to make the cognitive break of leaving my development environment and moving to a web page facsimile — albeit a very good one — of the place I do my own thinking? Being able to make suggestions by editing the actual code (and testing it) would be huge.

A solution to this would be amazing.


Join me in developing it at datalisp.is =)


Does GUI Emacs count as sufficiently terminal-ish? You can embed a Webkit-driven browser into Emacs, and then do anything browser-y you need to from there: https://github.com/akirakyle/emacs-webkit


You can even use Emacs as a window manager if you are so inclined. https://github.com/ch11ng/exwm


I lived without X11/Wayland for several years. (These days, I live in GUI Emacs with EXWM instead, which has a similar feeling.)

Some tools I had luck with:

- mpv is your friend - it can play audio, video, and display images directly to the framebuffer without X11. It also makes a pretty decent PDF reader combined with ghostscript to render each page to a PNG.

- The Emacs ecosystem is very useful - there are many packages for interacting with common services, and they typically work in both terminal and GUI modes.

- For web stuff, the best solution I found was to push as much as possible into RSS feeds and/or IRC, which have good terminal clients. Things like rss-bridge and bitlbee are great here. When I needed a browser, I typically used Elinks but was never really satisfied with it. I believe if you need decent JS support you're out of luck.


w3m is a better alternative to elinks in my experience.


Which IRC client did you use in these years?


First irssi, then WeeChat, then cerce in Emacs.


One of the upsides of the pervasive JS is that it often calls APIs that do useful things. If you take the time to capture and study those interactions, you can develop your own libraries and CLI tools that operate those useful APIs, too [0]. Then, you can think of "browser time" as an investment that begets more "terminal time." Also, if you stick with simple interfaces for your CLIs (e.g., read and write pretty printed JSON instead of inventing your own "human readable" formats), it's much easier to make your tools snap together like German nouns, like McIlroy intended [1].

[0] This is all subject to how much you care, of course. Not all automation is worth the hassle.

[1] His metaphor was actually garden hoses that screw together.


When I saw this subject I thought it was about living in an airport terminal, like Mehran Karimi Nasseri did in Paris for 18 years.

https://allthatsinteresting.com/mehran-karimi-nasseri


the web is what keeps me in GUI land, and Browsh (https://www.brow.sh/) isn't quite good enough to make do with.


There is a pretty well updated cli for Slack built on top of WeeChat (hailing from IRC heritage) https://github.com/wee-slack/wee-slack


I couldn't disagree more with the premise of this post. I've never been more productive at the terminal in 30 years. The thrust of your complaints appear to be you can't do company IM easily at terminal, but given most employees will want strong audio/video conferencing features too this is perhaps not all that surprising. We have whole classes of new CLI tools that didn't even exist 20 years ago today, allowing us to trivially launch complex application stacks in a few lines.

I think the effect of javascript's wide deployment on terminal tooling is very marginal at best too.


I disagree with the premise of your answer. The statements "there are new, interesting CLI apps" and "there are more critical GUI apps nowadays" aren't mutually exclusive, actually they both make sense if you consider the number of apps out there is always increasing.


Great! Maybe next time you can address the premises of my answer too, instead of inventing some new ones.


I wonder if you included a JS REPL/console in your terminal if you'd hit an interesting enough hybrid.

Something like Puppeteer/Playwright where you can spin up headless Chrome instances from the terminal, interact with them and automate them in JS. Treat the JS as a mini shell script language in your terminal of choice.

I'm almost surprised there isn't yet a terminal that is an intentional JS-hybrid where you can REPL JS and/or directly shell script in it (beyond just Node scripts).

Probably not entirely worth the time to build such Rube Goldberg contraptions, but an interesting thought experiment at least.


DomTerm (https://domterm.org) isn't quite what you asked for: It only indirectly has a JavaScript console: Since its frontend is a browser engine, you can open up a JavaScript debugger. However, DomTerm can display "rich text" - html, images, mathml and more. Also, there are (tentative) plans to allow loading JavaScript scripts for interesting extensions.


As long as coding stuff can be done through SSH, TMUX, VIM and terminal I'm fine. I've got a netbook-like tablet(s3 active with keyboard cover) and working on it is real nice(I hope to start going a bit more nomad soon), I have to switch apps to Slack & browser but the OS handles this so why bother.. My 2013 notebook also holding up well since what I need besides the term is just the browser... I don't think it's going away, but for this kinda of port to be maintained it needs to fit in with what workflow the termnerds and geeklords are doing, I guess.

In my mind I like to entertain the thought though that this bare way of working computers is discovered by more people & younger generations, that maybe they pick it up and do more cool stuff etc because it's something I only grow to like more and more over time. Btw I was never was like the hardcore linux wizard or anything, more like 'touch typing + this is kinda like playing a fighter'. I've got 2 trainees who are trying to pick up Vim right now and I guess a lot of ppl notice it since they never saw someone coding like I do, like doing typing combos and working mostly at the CLI. It's also funny because my colleague at the company is a very respectable senior and about my age but its 2 totally different styles, he's using vscode & autopilot.

I have some RSI though and it sucks when it starts popping, nowadays that mostly when Im working more remotely since then I use normal keyboard & key setup. On my work computer I have a typematrix with some key customizations that have helped A LOT.


I wonder whether anybody has developed a CLI browser that also has a JavaScript engine. I've seen plenty of TUIs that have modals, text line inputs, etc. You could probably get pretty far so that at least you can support more of the Web. At least to start with just using an engine to allow JavaScript to have control over HTML elements would be a start that would solve many of the issues with text browsers.


> I wonder whether anybody has developed a CLI browser that also has a JavaScript engine.

Some CLI browsers have JS support but what's missing is up-to-date support. The existing browsers have way too much technical debt so adding something like TUI support would be quite difficult. You'd really want to start from a newly-developed engine such as the new Ladybird browser that's part of the SerenityOS project.


W3m has some javascript support, but it's limited. As far as HTML5 goes, I believe you're out of luck.


I was doing this experiment few years back with `emacs -nw`, tons of other packages in Emacs and custom elisp code. Used `ein` in emacs instead of Jupyter notebooks, browsed web in text browser etc.

But as I grew older I realised I need to pick my battles wisely. I still use emacs for some simple edit tasks and tramp for remote server file edits. But for normal day to day development that pays the bills, I've switched to vscode.

GUI based apps are offering better experience. For example, I can still configure Emacs to work well with Golang or Python. But the out of the box setup you get by clicking couple of buttons in VSCode is far superior.

It is separate matter if terminal world is getting abandoned is right thing or not. Maybe it is relic of a different era: when computers were time shared machines and connecting to them with terminal was the only option. But I increasingly realised that isolating myself out of better GUI based options is not the right battle to pick.


Did you leave before the lsp-mode revolution? You mention Python like you used elpy when it was effective. I don’t find myself needing to leave eMacs for development for anything besides debugging


Question for OP: why do you like terminals/CLI applications? What are your needs?

For me, CLI applications are nice because of their ability to interface with others with things like arguments, stdout etc. Dumb and simple to string together a series of applications that feed into each other to give you what you want.

Desktop apps don't focus on that or if inclined would set up rigid interfaces that require communication over IP (read: expensive and inflexible)

Mobile apps grew into this and so will VR/AR/XR.

My call to action would be to encourage you to develop smaller, useful components that others can run to string together their own experiences/solutions.

In mobile apps, this would be providing more integrations to IFTTT or iOS's shortcuts.

My use cases would be to dump information out of apps and grep them. Just give me a damn file I can grep!


It's still possible to live in the terminal, but only in the same way that it's still possible to eat healthy, but you'll have to identify and eliminate all the junkfood out of your life first, and your current junkfood-loving friends may not be able to remain your friends for too long after this kind of lifestyle change.

Having said that, I often wonder the reverse. I'm so happy with my terminal, that every now and then I wonder how much longer will it be possible for me to put up with all the junkfood-equivalent crap that is forced down my throat on a daily basis before I say "enough is enough" and go into virtual hermit mode?


Are your concerns about the lack of open APIs or the lack of command line apps per-se?

Personally I'm all in favor of having more open APIs and third party clients, but would never want to intentionally constrain myself to a TTY that is half a century old.


Yes, but it depends a bit on the exact nature of your job. At the last job, my Linux work machine never had a mouse plugged into it because I never needed one. The macbook the company gave me was the "chat/email machine".

Nowadays, I have to run a proprietary VPN client that only works via GUI, but even though a full screen terminal emulator isn't as "pure", it feels the same.

I love it: absolutely zero distractions, it's a huge productivity win for me. But I realize I'm lucky in that the kind of work I do doesn't require me to be responsive to chats and emails (my reply latency is 24h).


Another alternative solution for Slack is to use Beeper (https://beeper.com) or just run the Slack bridge they use yourself directly (https://gitlab.com/beeper/mx-puppet-monorepo/-/tree/main/pac...) to bridge Slack into Matrix. From there you can use any CLI-based Matrix client you like; weechat, gomuks, whatever.


About browsing, I had difficulties with Lynx as you can't use tabs. The last versions of Elinks were broken on OS X and outdated. I found a fork of elinks (Felinks) that offers everything I want and is easy to configure.

https://slackbuilds.org/repository/14.2/network/felinks/

https://github.com/rkd77/elinks


I'm a very terminal heavy Engineering Manager and Technical Lead at a ~600 employees tech startup.

Slack is a tricky one and there are no decent terminal clients available, but I do a LOT of e-mail on mutt as my main client and could not be happier and write all my code in vim. I don't think you can "live" on the terminal, but you can still realistically use it to power a significant part of your work.

I second the need for a good Slack terminal client, or at least a service to proxy Slack to IRC or something like that. The Slack app is super slow.


I do most of my work in the terminal. I work on JavaScript/TypeScript projects. Soon Java, we'll see if I use the terminal for that.

I love streamlining my ZSHell and ViM experiences by tooling around and have produced some nice scripts and functions which are both living documentation and useful to share.

However, I wouldn't expect my team to maintain shell scripts as they're a bit esoteric.

I quickly navigate around and search my files, use version control, switch projects, run services, and open sites in my browser using terminal and Vim commands.

I have to switch away for debugging though.


Depends on environment. At work we have official corp communication platform - Teams. Most UI build for browsers and require a lot of complex JavaScript for render.

But most of my work is still done in terminal. Most project I managed ended up with very nice CLI applications, makes things a lot easier in the end, like automations for example. Initially specially younger engineers struggled with decision to build cli instead of web portals. But later realized how effective and productive the decision was..


I think the error is in your thinking of where the problem is. If you use screen or tmux inside a terminal what you are doing is relying on a window manager. If you are not using a terminal multiplexer and living in a single terminal you are just unproductive. Look for a window manager that fits your needs and graphical/ textual web browsers are no longer a defining limitation.

That said, there are a lot of people who have gotten off track on this including both the teams developing web browsers and those developing terminals.


I still use the command line extensively. However, I use a browser for collaboration tools and email, and Emacs GUI for coding. On the work computer, sadly a Windows box, I have no such luck.

Having said that, current windowed terminals are a sad shadow of the days of the VT330. Almost none can do double-width and double-height, many can’t blink, and none can do smooth scrolling.

Honorable mention to Apple’s (NeXT’s?) Terminal app, that can, at least, do double width and height.

None has Tektronix or ReGIS support - which would be wonderful for graphic panel applications.


Sounds like you’d enjoy wsl at work. Wsl1 is necessary for file system IO


I use it, but I'm not saying I enjoy it - it's a bit limited - WSL1 feels more like Cygwin, and WSL2 more like a VM, but none is fully integrated into the environment.

I've been in the situation where I needed to config VSCode plugins to use one of the WSL environments and I'm never sure which `git` is being run (if it's the one that runs on Windows, the one in the WSL1, or the one under WSL2. The machine also disagrees with itself about what constitutes an end-of-line marker.

I'd honestly be much happier if the company either gave me a Mac (new office teething problems - third employee in the country - made my original order lost in transit, never to be found again) or allowed me to rip out Windows and install a saner OS on the hardware, which, apart from the UK keyboard, is not terrible.


I go for a terminal-first approach. If a CLI exists for what I want to do, I'll try it out.

If a GUI would be easier, I use that. If there is no CLI, I use a GUI.

At least for me, browsing the web, email, creating professional documents and developing large software projects mostly happen in GUIs. There are related tasks that are easy to shell out to, though, so it's not like I'm sticking to GUIs for everything.

I was never a fan of chatting using the terminal, so I use GUIs for that.


You can, if you’re working as an independent consultant. I have a few friends like this who do live in a terminal. (I am also a consultant, but Gnome works fine for me)


> It seems like the terminal world is slowly getting abandoned in favor of proprietary GUI apps. > Anyone still living inside the terminal? Links to tools for Slack are appreciated.

Fortunately, I work for a company that does'nt use slack or proprietary apps. I've been thinking of some kinda proxy for text browsers with customizable .. edits, to hide excessive html elements form the terminal. (Might need to be per site ?)


Sure! You can also use a Model T for all your auto needs.


I stopped using emacs to manage my mail in 1996 when my colleagues started to send me Word and Excel attachments. Not only I was using a text only client, I was using it on a Unix OS.

I moved my mail to the predecessor of Exchange on a Windows 95 PC. I went on for years with MS Express(?) and Netscape / Thunderbird for my personal email and Exchange for work email. Then only Thunderbird since I went self employed.


This is a question about lifestyle, really. Most "ways of living" that deal with modern office environments can't do it. And a lot of bureaucratic functions need a graphical browser.

But if your day to day is physical labor, crafts, writing, theoretical research etc. - you don't need the computer much to begin with.

If you allow your phone to act as your sole graphical environment, I think it can work out.


I use only terminal programs for my development job. There has to be a real good reason for me to use a gui while working. One such good reason is a web browser. there is simply no way to work in the modern world without one. (for a large percentage of people anyway)

git, vim and plugins/addons for it, *nix tools in general, man pages etc. don't need more than that and a browser.


The terminal is still the most efficient control center for the machine. We have less control than before so we get dragged into the cloud, onto centrally coordinated networks.

There are converging factors that will give back some control but I think people should be treating that convergence with more urgency than we do now.

Of course the terminal should also evolve, new standards need to be set.


I do most of the work in the command shell, and in other programs in the terminal emulator (IRC, email, NNTP, and some games). One which isn't is the web browser, although I do not use it for everything. (Sometimes I do use Lynx, though) In some cases I had written programs if needed.


Sure it's possible to live in a terminal, assuming you're willing to impose shit like this not just on yourself but upon everyone you interact with: https://stallman.org/stallman-computing.html#internetuse


dude, I've been reading posts like this since the nineties (on Slashdot.)

Terminals have been 'going away' for longer than I've been alive, and they will continue to diminish long after I'm gone.

The reason they don't ever get there is that the market as a whole is still increasing in size overall, even as the stock of TUI-natives dwindles. There are simply so many more people working on e.g. neovim, kakaoune, and himalaya (an email client) that the fact that there are even _more_ more people using GUIs simply doesn't matter as much.

Put another way: the increase in absolute numbers of TUI/CLI users is the statistic to watch, not the relative percentage of users.

Finally, terminal chops are a nerd status symbol -- a form of conspicuous consumption of time and muscle memory. Humans tend to drop status symbols _last_.

I don't brag about my use of VSCode, but I sure talk up my neovim config in interviews ;D


There also seems to a renaissance of new terminal applications—slick, GPU-accelerated, built in multiplexing, native support for Open Type features, full color support, etc.

I’ve settled on WezTerm [1] for now but Alacrity and Kitty are also impressive.

[1]: https://wezfurlong.org/wezterm/


For email, it appears Alpine (the successor to Pine) supports multiple email accounts via Roles. I have not tried this.


Maybe you'll find something you like looking into a matrix slack bridge alongside a command line matrix client


>- Mutt doesn't handle multiple email accounts natively for work/personal. The solutions are hacks at best. Email servers are starting to use more complete auth mechanisms that don't work well with mutt.

How come? I use hundreds of email accounts with mutt and have never had to do any special configuration.


When I was reading the headline I thought of people like this: https://www.airport-technology.com/analysis/terminal-dweller...


> Mutt doesn't handle multiple email accounts natively for work/personal

My solution for this is to simply run mutt twice, with different .muttrc files and in separate tmux windows.

I prefer this, I don't want personal and work mail (or notifications) mixed together.


This is like asking can I fix my car with only a set of wrench and a few tools. The answer is yes but it will be hard in situations. One is trying to do anything graphical unless you are launching a gui app from terminal, but still call it “inside”


I tried it in the past and it worked quite well, except for Slack: I got it working, but it wasn't great.

For email, I can suggest aerc [1]: lovely piece of software!

1: https://aerc-mail.org


Yes unless you work with language that "needs" an IDE like java, scala ect.


I have done Java in Vim before with various plugins. It is technically doable, but it's also nowhere near as ergonomic as it is to use IntelliJ for example. I would want to put a lot more into the setup before trying to do it full time in the terminal.


You can always load the IDE up as a Vim/Emacs plugin. I've used the Eclipse Language Server within Vim to some success in the past


Thats why i put need in quotes.

Sure you can get away with it but vim plugin is no where close to what you can do in Idea. Not even in the same orbit.


Good old days at college when I used to code in notepad :p


> It seems like the terminal world is slowly getting abandoned in favor of proprietary GUI apps

This sounds like something written from the 1990s.

In fact these days, proprietary GUI apps are being abandoned for web apps or mobile apps.


It’s more possible today than ever.

There’s more commitment to it today than ever.

There’s more command line mtools than ever.

It’s not about one solution of CLI only or some east front end. Both have their place as beginners become experts, and beyond.


Slack used to have XMPP integration, so you could have used https://profanity-im.github.io/ for chat.


> - My company uses Slack's enterprise auth, and all the CLI slack clients I could find haven't been updated in years and no longer work.

weeslack works fine


Is it ”possible”? That just depends on what you are willing to give up. You clearly aren’t fond of video calls if you consider giving up a graphical desktop.


I’d give up the GUI if that could get me rid of constant meetings over Teams.


if it doesn't already exist, someone is bound to make a truly horrible hack involving Zoom and aalib

https://www.ubuntubuzz.com/2012/04/play-movies-in-ascii-art-...


for mutt, I use Luke Smith's mutt-wizard and can do several accounts, I switch accounts with `i1`, `i2`, etc. for the different accounts, though I'm not sure if that fits your use case

for the question I'd say "depends on what you want to do", if you have to interact with people who use slack, then probably no, unless you make your own CLI client to it, same with the web


No, you cannot. Assuming you are human; you require air, water and food to live. The terminal does not provide any of these.


Now I am coding mostly in vi, in the VSCode Terminal, in the Docker contains, in chrome browser.


The world is changing. We only have one world. You can choose to live inside your containers though.


Here I am thinking about Tom Hanks.


If you're willing to compromise by also having a modern browser, absolutely.


I really just enjoy using i3wm tiling window management for terminal multitasking.


> Links to tools for Slack are appreciated.

I would tend to think most of these suck. Slack is a proprietary chat app. Why would people contribute significant free time to make something for it?


yes except for the browser, you can use weechat it's a cli irc client but you can link a lot of accunts (slack, fb messenger, etc.)


no, but a terminal and a browser is a good compromise between terminal only and going full enterprise office software mode.


Even my local library stopped using terminals with monochrome screens and some database system written in COBOL. Now they have webbrowsers.

Perhaps it is time to upgrade :)


How do you read documentation for work?


Man pages, pdftotext, elinks, go doc, etc.


there's also a resurgence of lean fast TUI, fzf, bat, neovim, python libs like textual


Can’t use Zoom inside a terminal.


No, you need food and water.


80% is good enough for me


Nope, I live in a house.


Until few years ago I was a hard-code unixer, witch means zsh+Vim, even if on X11, on modern terminal emulators like Terminator, Tilix etc. Then I've decided to seriously do a thing I've only superficially and never really studied before, after seeing it in action: try Emacs seriously.

In a little time EXWM have replaced my WM, Emacs have integrated a big slice of my previously favorite tools. It's not perfect, it have bugs/flaws, but is so much powerful than the Unix model and the modern GUI model(s) that outshine anything else. I still use zsh, eshell it's a bit too limited/alien to me so far, unix tools lacking a LispM underneath are still serving me under the wood but that's is.

Said that, as you rightly state the actual IT model, VERY unfortunately for the humanity at a whole and no, I'm really serious, have shifted long ago to classic desktop model toward a modern limited and limiting model and now even worse to the old mainframe+dumb terminals model, where the mainframe is external, someone else computer, the cloud and dumb terminals are now "endpoint", utterly complicated pile of crap to boot up a WebVM improperly named browser for legacy reasons. In the actual state of things choice is limited: some "services" can be integrated more or less easily, more or less stably/reliably, others can not.

That's why I've first shared my person journey toward Emacs: even if sit on top of Unix, like a bootloader, not much differently than the aforementioned WebVMs it can wrap Unix and integrate X11/WebVMs (cr)apps a little bit. Doing so does not totally solve your issues, BUT solve partially many of them and gives you something FAR more powerful/evolved than Unix. You can't do much more than that.

To use a truce metaphor: we live in a dramatically lost war, chances to win before dying are utopia at best, but at least we can live the unique life we got a bit armed instead of being totally at the mercy of every enemy. Your car if not today, tomorrow will demand you a login on a smartphone to a cloud service just to open the door, so your WC to lift the cover, your country will demand a smartphone just to pay taxes in an integrated cloud-mobile platform no one really know who really control at a certain "zoom" level, no one can really do anything outside it but you can so far still have a small personal garden that ease your life a bit at least giving a comfortable environment with your data locally available so much powerful that can help cope with the outside world crap.

BTW Slack, a CRAPPY service no damn company should be so crazy to choose it, is supported by some Emacs packages see for instance https://www.emacswiki.org/emacs/Slack as usual it's not a full and bug free support, but you can use it, like you can use Jira etc.


weechat + bitlbee


It doesn't work for business at all because if you want to do business you have to meet people where they are. You can't email a client and say, sorry, can you please send me that contract in a text file, I only have a terminal. Or, sorry, I can't use your web portal to access the data because it uses JavaScript.

If you're not doing business, using the terminal works fine. Up until you have to deal with health insurance or your power bill or your taxes or bank.

Unfortunately the world now revolves around [gui] web browsers. We brought this technologically retarded hellscape on ourselves and we deserve it.


>[gui] web browsers

You largely can restrict yourself to phone calls and postal mail. Aside from ordering from Amazon, my dad largely does. (Albeit in part because my brother and I will do various things for him he can't figure out how to do with just a phone call or letter.) But it's increasingly difficult for a lot of things and is, at a minimum, less convenient.

And, as you say, in business you generally don't really have the option to basically refuse to use a computer for many purposes.


Saw an elderly lady freaking out at Walmart because they no longer could pay capital one credit card in person with a physical check.


In fairness, paying post-paid bills by check through the mail is still an option for most things. I get most stuff handled automatically and pay most of the rest online through my bank but I still write a fair number of checks either in person or mailed.


> Unfortunately the world now revolves around [gui] web browsers. We brought this technologically retarded hellscape on ourselves and we deserve it.

This seems like rose colored glasses, maybe there was a very small period of time where there was a wide variety of things you could do in a terminal, but for business purposes it was mostly native GUI’s which suffer from the same problems as the web if not worse (maybe only better because they were harder to make so there were a lot less of them)


> Up until you have to deal with health insurance or your power bill or your taxes or bank.

> Unfortunately the world now revolves around [gui] web browsers. We brought this technologically retarded hellscape on ourselves and we deserve it.

As bad as the web is, I certainly don't miss the days when I had to go to a physical office, wait minutes, sometimes hours, in a line and talk to somebody that may or may not help me, depending on how their day was going. Thanks but no thanks.


> technologically retarded hellscape

The modern web seems pretty great to me. Why do you feel that way?


The modern web is primarily distinguished by its custom ui/media, as opposed to the old school web which put textual information first and allowed clients more control over presentation. The problems this creates are:

* Accessibility - I can't change presentation to make things easier for me to consume

* Inspectability - I can't search, index, etc. Information is hidden behind js driven interfaces that only present bits at a time.

* Uniformity - I don't want to deal with a deluge of clever interfaces. I want the data only, and I want control over how I will present the data to myself.

* Buggy - All these custom JS driven interfaces means a never ending deluge of weird interaction bugs, most of which we just ignore. Pages are needlessly slow or error prone.


You don't get out much do you? Not if you consider that a hellscape.


I find this comment absolutely inappropriate for this forum.


There are two ways to read that comment. One is like you say. The other - as “someone who doesn’t go out much”, this actually resonates, in a weird way: “the Unix way” resulted in user having a proper control and their environment being predictable and thus trustworthy. Compared to that, the web is not only technologically inferior (Chromium LoC alone is enough to tell), but also as unreliable and unpredictable as many other things IRL.


Is pretty as a prison dressed to be nice. Is pretty for instance if you do not need to do anything than consume someone else provided contents and your favorite services do not cease to exists or change usage terms overnight.

Google reader was nice, a day Google kill it, GitHub seems to be nice for some cohort of users, a day a political move between some countries makes your account locked, a day your ebook reader+service cease to exists with all books you never own but being convinced of the contrary, a day your smart vacuum cleaner stop to work because an AWS service have issues etc.

That's how pretty it is. Pretty to capture you, ugly once you discover you are trapped and than it's too late.

Oh, sure in mere tech terms you might run webapps locally, they are still NOT AT ALL pretty behind sugar-eye graphics, since integrate things, bend things is a nightmare that demand a gazillion SLoC for anything, while on classic CLI or better systems like Emacs you can do it in a snap. Not only: anything you'll learn on classic systems is valuable normally for a lifetime and more, anything you learn for the modern web might be valid for few years but generally last far less and no, you can't advance, you can only remain afloat keep learning the new crap on and on.


You seem to have a lot of complaints about the internet and they may even be valid concerns on their own, but I fail to see how this relates to CLI vs. GUI. Google Reader would still be dead if you interacted with it via CLI. GitHub would still be dead if their servers shut down. Maybe you're equating CLI with some "good old days" that you fondly remember?


CLIs are family of UIs, whose name is normally used to identify TUIs at a whole, while GUIs tend to identify ONLY modern GUIs, so ignoring the classic Documenti UIs and that's the trick.

My point is:

- modern TUIs, called by most CLIs, compared to modern GUIs (widget based GUIs and WebUIs) are more powerful because AT LEAST they allow limited easy user extensibility and composability (scripts and unix IPCs);

- classic GUIs, in the sense of document UIs, like Emacs, like old Xerox Tioga etc, on contrary can be called 2D CLIs in modern lingo and they are FAR superior both of TUIs and modern GUIs because they are "graphical" and they are even more extensible and composable than TUIs.

That's is. Modern developers regularly push toward classic GUIs without knowing them, think for instance how popular Notebook UIs have became. WebUI themselves as a "more like documents" widgets-based GUIs. Still are are far behind classic document UIs.


Censorship, mandatory KYC and ID verification, mass surveillance, ridiculous amounts of ads, everything is a subscription service and my god damn oven needs a login and ethernet connection…


That seems to be a complaint, at least in part, about a terminal-based world which only the "right" people had the ability to access vs. a commercialized Eternal September where all the plebes (and scammers/grifters) have access. I'm pretty sure that a terminal line world that somehow had the same access and usage as today's GUIs/Web would find other ways of introducing the same problems.


Yeah, this is the same thinking that calls Unix with it’s incomprehensible set of pun-filled commands with thousands of conflicting flags “the bazaar” and the relatively-easy-to-use and discoverable GUIs of the world “the cathedral”. It’s elitism at its worst.


Rel: Usenet spam


> The modern web seems pretty great to me. Why do you feel that way?

A quote I once heard about the modern web browser: "I want this program to do everything my computer already does."

Imagine a simple hypertext markup language which tells a program how to render the text, link to different text or sites and perhaps paint some images on a screen. Seems pretty strait forward. Now make that program into a worse computer. This is what makes many people nauseous when they attempt to build "modern web" things.

I heard a great comparison of game dev to web dev: "You write programs to reach goals or a finish line. game dev feels like you're building and fine tuning a race car. Web dev feels like you're running a marathon in the rain and everyone is throwing garbage at you while booing."


There's only one problem with that comparison: web development and game development aren't exclusive to each other. Those days are long gone, thanks to WASM and WebGL. For a game developer, the modern web browser is just another platform to deploy to. One that has less friction in many ways. You don't have to ship an executable and lead the user to and through your installer, and then make them log in through your custom login flow where the password manager doesn't work - you just provide a link to a login form that redirects to a WASM build of your game. Your user already knows how to use the browser.


You must have a very good ad blocker.


It was certainly an eye opener when I went to help a friend with their computer and saw the web without ad blockers for the first time in years. I had no idea.


Worse, if they have been infested with malware that may inject additional ads into sites like Amazon... Actually made me a fan of chromebooks for anyone that doesn't actually need more than that.


Are you sure those aren't just Amazon ads? They generated $31B in ad revenue last year.


In this case of memory, it was definitely malware... though I couldn't really speak to Amazon today if ublock/privacy-guard/pihole catch them.


There are reasonable terminal viewers for many formats.

Web sites that require JS to function (and there are many) is a bigger deal.

Same with pictures.

It's much more realistic to run a graphical environment and use a regular browser. Just disable JS by default and put a reasonable ad blocker. Then whitelist sites where you really need JS to work, like your Jenkins host :)

A reasonable PDF viewer is also not such a resource hog, same with picture viewers when you need to display pictures. Say, Firefox does a reasonable job of being both if you don't want to install dedicated software.

You can make a graphical environment which is snappy, low-distraction, and very usable. (That was definitely already possible 20 years ago, when my Linux desktop was my main working machine, and ran quite adequately on a tiny fraction of today's laptop resources.)


>Unfortunately the world now revolves around [gui] web browsers. We brought this technologically retarded hellscape on ourselves and we deserve it.

This seems backwards. Limiting yourself to CLI tools do retard your abilities, modern GUI apps do not.


Sorry?

CLI respect of Emacs yes, is limited and limiting, but modern GUIs are FAR more limited and limiting. Can you integrate them? No. Let's say you want in a single view a set of mails, financial transactions, notes etc. You can arrange something in a CLI, you can do it in org-mode, you can't do it in the most advanced ERP monster.

Modern UIs try to go back to the original document UI concept but TOTALLY fails for the interactive part, they are mere view where you can touch some knobs someone else placed there for you, nothing more, and try to bend them is a nightmare.


This seems like an unfair comparison.

If you limit the capabilities of a GUI interface to only what is possible without code changes, then you must do the same for CLI applications.

Emacs is all code. Most CLI-only applications cannot be modified other than the flags you pass in; you are instead forced to pipe from one application to another.

If you limit the capabilities of GUI applications to the realm of existing software (i.e. your monster ERP reference) then we must also limit the capabilities of CLI tools to what exists, and I know (for having looked far and wide) that I have needs which are not available via terminal-only programs; the only existing set of available software that I need with a comprehensive set of features is in a GUI-only application.


That's exactly the original Unix model fault: it's designers though that's possible making many very small and simple "programs as functions" to be easy combined in scripts and with IPCs to doing almost anything without the need to go to "system code" as a cheap and easy solution to the hardness of a classic system design.

They quickly drop such idea introducing GUIs, who fail to offer composability and scripting, and they derailed hitting their own design limits. Modern GUIs are the monster emerged form such ashes who happen to be worst than the problem it try to solve. The issue in the example comparison in my previous post is that at least in CLIs you can combine/compose a bit, with modern GUIs you can't. Write a script is easy, at least FAR easier than change an ERP.


What can't you do in X Window that you can do in a terminal?

I'd agree that some GUIs are bad, but the same could be said about some TUIs.


Not in, but with modern GUIs (so X11 xlibs wrapped by some widget lib) I can't compose nor integrate anything. For instance if I want to do some simple math in an email I'm composing I need to launch another application, type the same math I've typed in the message body, evaluate it, copypaste the results, copy-pasting is the sole IPC such tools have.

On a terminal, I can run a terminal based editor who typically can run code from inside the text buffer. In Emacs I can do much more in both terminal and X11. That's is.

My org-mode notes links anything, meaning mails (searches, specific messages, threads), financial transactions (ledger), elisp code, for instance to act on notes themselves like an `* Online retails orders` heading with a "click here to add a new one" or to change the Emacs/EXWM graphic, for instance to present something, org-ql queries on my notes etc. In pure CLI (not TUI) I can at least cat and process programs output, in modern GUIs I can't.

A simple showcase: https://youtu.be/B6jfrrwR10k


This is a matter of pattern, not technology.

GUI apps can and sometimes do provide interfaces for programmatic use.

And some terminal applications fail to follow conventional Unix patterns.


The GP lists some ways that a terminal-only workflow limits you.

>Modern UIs try to go back to the original document UI concept but TOTALLY fails for the interactive part, they are mere view where you can touch some knobs someone else placed there for you, nothing more, and try to bend them is a nightmare.

I don't see this as a bad thing. I want someone responsible for the product to figure out the best way to use it via a focused set of controls and inputs. Some people fail at this, others are amazing.


Just a simple example: you probably buy on Amazon and find it's order history webpage simple and nice. Now let's say you want to collect such history in your desktop, link it to the corresponding bank transactions per any order (you have bought many things and they are charged separately on your bank), link to some bought items notes like when the warranty period end in your agenda. What do you need to achieve such result?

In CLIs you need a way to query in text all such elements, you are limited by the limited and limiting Amazon WebUI who do not offer anything cat-able, even not anymore a manual *sv export. Not much different is the situation on your bank side where if you are lucky you just get manual ofx/qif export.

In a classic CLI world you wold have a remote service who can be queried ssh-in it and locally process the output. In modern Emacs you can do the same in a modern 2D DOCUMENT-BASED GUIs. You just need a bit of math to mach items to bank transactions, nothing more than 20 SLoC. With the WebUI paradigms you need perhaps a WebVM extension with around 5-10k SLoC to achieve something similar...


I don’t actually. Amazon is on the “fail” list.

It sounds like you want APIs for all of your services. That’s fair. But I don’t think the vast, vast majority of people have use cases as you describe so the ROI on providing something and maintaining it is too low.

In any case, in today’s world, you can programmatically scrape the page of the results and crawl further pages if necessary. It wouldn’t be 5-10K lines to output a list of names and prices.


If companies choose to use proprietary software for needs that FOSS can and has served well for years, it would seem that those companies are cutting their own legs.

I speak primarily of Slack and Zoom and other “low hanging fruit” of already solved problems that feature VC-funded wheel reinvention made popular by their VC-brethren dogfooding said products, when threaded messaging and webRTC don’t necessitate proprietary solutions. https://meet.jit.si for example…

I don’t think mindless cargo culture is a trend to follow, nor will tech savvy devs disappear nor will the need to remotely administer servers via command lines tools disappear.

Remote Desktop solutions are not realistic tools for server administration in any sort of serious way, so I’m pretty sure that’s a niche that will always exist…

Seeking to browse the web exclusively through a cli browser, however, is probably not something one can do while working in the field of web development. The web is primarily graphic lauout based




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: