Why is the terminal input so weird?
warp.dev
warp.dev
Dark pattern #2: On sign-up, you "agree to our terms of service" but then you have the gall to say, on unsubscribe: "you are currently subscribed to our opt-in messaging. Do you want to remove yourself from opt-in messaging?"
Agreeing to a 17 page terms of service document might be technically "opting in" to messaging (spam), but it sure isn't in spirit. Opting in is when you click on a, previously unchecked, check box that has "I'd like to receive marketing from you".
I'm sure there's plenty more but I uninstalled it already.
Think about all the things you type into a shell, via a terminal!
Of course for a local terminal emulator no such requests are necessary.
"Rent seeking [...] is an economic concept that occurs when an entity seeks to gain added wealth without any reciprocal contribution of productivity."
As a buyer, I care about my cost and the value I receive. I don’t demand to see proof of costs incurred or effort expended on the part of the seller to understand whether I got value in excess of my cost.
When I pay my house insurance or mortgage, I don’t ask the insurer or bank to show me any proof of anything. They’re not rent-seeking in economic terms.
That's a personal opinion, which I disagree with, and is additionally economically unsustainable. But you're free to have that opinion - the problem is sli actively misleading others by using a term like "rent-seeking" with a specific definition where it is categorically incorrect.
“Warp.app” is an app downloaded from the Internet. Are you sure you want to open it?
I had a feeling I should check first .. spidey senses were good...So it doesn't solve the problem then. The problem is that terminal input doesn't respect[1] the other conventions we're used to. I've used iTerm for... 5 years now? and had no idea option+click was a thing. I even had to enable a non default keybinding preset (something named like "natural keybindings something") to get the basic option+left/right arrows to move the cursor word by word.
I like iTerm, but a more natural prompt option would sure be appreciated. Warp may not be the solution because of dark patterns but there are no reasons to keep terminal input stuck in the past, they're onto something. Just the ability to consider inputs and outputs as more than just text is great: I can actually copy a whole output without having to select the characters and being careful not to go to far/not far enough, or getting stuck because the output was bigger than my configured scrollback. You could also get true output separation between stderr and stdout.
[1]: yes I know it's technically the other way around, no I don't care
I wish you luck, but your product in it's current state is confusing to me. fish solves most of these issues for me and it runs on all my devices, free. All I'll say is that your competition is stiff.
Please note that our business model is not about collecting and monetizing any of your personal data.
You know what, that is fair. I know a lot of folks take an issue with software that is monetized and many are jumpy about software that might rugpull them and lock certain features behind a paywall some time down the line, or look into more aggressive forms of monetization, but at the same time a lot of software would probably be better made if it had stable financial backing.
I'll probably keep using the most boring terminal setup that's possible just for the sake of not being an early adopter (which is just an excuse because I don't have a Mac), but I'm curious to see how this will play out in the long term, so good luck with your endeavor!
> Please check out our pricing page to learn more.
Here's the direct link: https://www.warp.dev/pricing
And to save folks a click:
Individual
A modern terminal experience for individuals. Download now!
Free
Includes
- Block Creation
- A.I. Command Search
- Workflows
- Modern input text editing
Team
Advanced collaboration and support for teams. Coming soon.
Pricing TBD
Everything in Individual, Plus
- Shared team configurations
- Shared team workflows
- Real-time terminal sharing
- Shared terminal notebooks
Enterprise
Security, compliance, and flexible deployment. Coming soon.
Pricing TBD
Everything in Team, plus
- Advanced security and compliance
- Advanced team deployment
- Integration with internal toolsSome might rather enjoy a smarter autocomplete, much like IntelliSense and products like it made the older IDEs feel like text editors.
Plugins like TabNine/Codota went a step further and attempted to make the suggestions even more relevant and context sensitive.
As long as this "AI" doesn't just randomly execute commands, but rather suggests you what options are popular (locally or online, saving you opening StackOverflow, for example) or what might be relevant from the documentation and examples (so you don't have to do too much manpage scrolling), I fail to see the harm.
>The app is 100% free for any and all individuals.
I assume the usage of the upper-case F in "Free" indicated libre, not gratis. Your comment is about the latter.
Maybe with a proprietary binary release that includes the corporate features, and an open-CI/CD binary release that doesn't, ala the Chrome/Chromium split?
Doesn't matter, any kind of connection to the mothership or telemetry is a no-no...
You could have corporate edition, with telemetry and everything or a personal one.
But no self-respecting dev is gonna use a terminal calling home for personal use...
There is no such thing as a good and well-intentioned and safe-trust-us way to do it. The fundamental concept is offensive from the outset.
There is no nice and honest and integrity way to do a fundamentally bad thing.
Why should you have to make sacrifices for it? If I were demanding an open-source solution where one didn't exist, that would be one thing, but here I (and presumably also the parent) intend just to keep using an open-source solution that works perfectly well for me.
Tools with better DX (developer experience) are a market that's been tapped into heavily in the past few years, personally I'm not surprised there's a pricing page. Would I pay for something like this? Probably never; I don't feel like I need to optimize my terminal workflow even if I have to reach for the manpage of a command from time to time.
Yes, it can. It's not the full docs of course, but tab completion for flags often comes with a one liner about what it does from the docs [1].
Now if that login required barrier was removed, I'd at least be willing to give it a try. May not switch, but I'd be willing to give it a chance. But as it stands? Hard pass.
... and they should already know all that, and there is really no believable excuse for not knowing all that already, and I don't for a second believe they don't.
So, really there is not even any doubt to give any benefit of the doubt like "even if you're well intentioned". Passed that already.
Warp's pricing model is a whole other issue though.
But they decided to write a whole blog post making up problems about peoples’ current workflow. People are naturally going to point out that they don’t suffer from these problems.
If warp didn’t want it to matter, they could have not brought it up I guess.
Not really, those are problems with current workflows.
>People are naturally going to point out that they don’t suffer from these problems.
They do, they just work around them or are used to them.
That's trivially true for any "problem" that people "don't suffer from," and it's not that interesting.
Problem: Input editing in the shell is hard if you can't remember the appropriate keyboard shortcuts and don't use the relevant features.
Workaround: Remember keyboard shortcuts and use them.
Blog-proposed workaround: Download our app.
If people want to use their app then that's fine and dandy, but I don't think it's reasonable to frame my experience as being hampered by a problem that the app would solve when my workflow is not in fact hampered by it. It's acceptable and normal for a tool to not have a universal audience.
Yes, and it's called denial and compromise.
>Workaround: Remember keyboard shortcuts and use them.
Notice how that's not a "workaround": it's resigning to the problem and suffering the limitations of the system. The very opposite of a workaround, which is finding an alternative easier solution to something being hard.
That's not the definition of rent-seeking.
"Rent seeking [...] is an economic concept that occurs when an entity seeks to gain added wealth without any reciprocal contribution of productivity."
https://www.investopedia.com/terms/r/rentseeking.asp
The "reciprocal contribution of productivity" provided by the Warp developers is increased functionality of the software.
You can argue that you'd rather pay once for a particular version of the software (I would), or that you don't want to pay for a terminal emulator in the first place (I don't either), or that the Warp devs could stop improving the software in the future (and they could), but "rent-seeking" is still an incorrect description of their business model, and is only used by people who have an agenda trying to slander Warp for some reason.
But implicit in "reciprocal contribution of productivity" is "compared to what." After having installed a barrier across a river, productivity increases by charging a fee and lifting that barrier. In that same vein, Warp spending extra development effort to block continued use of something you've already paid for and downloaded to your machine unless you keep giving them money is textbook rent-seeking UNLESS there's some value they're adding by doing so. Admittedly I should have referenced that value rather than their costs, but in practice the two are related because organizations aren't inclined to incur costs without adding value somewhere.
> and is only used by people who have an agenda trying to slander Warp for some reason
That seems like an unnecessary ad hominem. I don't even particularly care that they are rent-seeking. I just don't want to see that term redefined so far that we have to come up with some other name to refer to the same bloody concept, and especially not for the purpose of needlessly bolstering the profits of artificial SAAS. We're all adults here, and anyone who cares is presumably capable of making a proper argument for why rent-seeking is acceptable here rather than trying to redefine the word to brush their payment model under the rug.
> In turn this means that anyone who has wanted to improve the terminal editing experience needs to do it at the shell level – and this is what some shells like fish try to do (as well how shell plugins like OhMyZsh work). They can only do so much though, and, crucially, they can’t make terminal input work overall in a less “weird” way.
They provide no justification on why that would be true, and indeed I believe almost all of their fancy features could be built in terminal also. Their explanation on terminal input is ridiculously naive, largely ignoring how control characters can be used to do a lot of things.
Tab completion is a half-designed solution, and not exactly portable across shells.
Terminals need to stop pretending they are dumb 8" CRTs from the 1970s. Virtually all interactive terminal input is through GUI applications at some point, and if it's not, it's not by choice.
And performing stdin input in scripts for programs that need it? Don't get me started, and don't say "expect" with a straight face. The fact that scripting languages have no provisions after 40-50 years is nuts.
The post manage to analyse terminal input without having acknowledging readline. So yeah, they have no idea what they are talking about.
https://www.masteringemacs.org/article/keyboard-shortcuts-ev...
They could write an "interactive shell" with mouse support that implements all those features and it would run in any pre existing terminal. They could even make this work with existing shells and it would work over ssh ect. Nothing against innovation but this is the wrong approach imo.
They're not writing a technical deep dive, they're presenting their vision for a different approach. I think that vision is flawed but I'm not going to grade them on how deep they get into implementation details.
It's actually more 60s/70s, when the first terminals, command-line prompts, and shells were built. The reason why it's stuck there is technology has only improved iteratively rather than revolutionarily. The "lets add another layer of abstraction" form of innovation, rather than outside-the-box thinking and reinvention.
The fact that we still write software by hand using lines of source code in a text editor is pretty ridiculous to me. It's not that far removed from punch cards.
The editor I'm imagining looks and works a lot like your typical code view, but has a better understanding of the semantics and makes things there are keyboard shortcuts for more visible. From the top of my head: First-class code folding and commenting and actions primarily on blocks rather than lines. e.g. if you disable ("comment out") an if-statement, either disable the whole block or the wrapping of the inside code with the condition. It's very rare that you want to do something in between and in textually based languages this action is much harder than it needs to be without producing a syntax error.
An important part of GUI design is to avoid the possibility for invalid states, but text-based code editing in its current form produces a lot of them, totally unnecessarily and annoyingly so, in my opinion.
I'm sure that tools with features like this already exist, but they're certainly not popular.
Changes on the text layer would be propagated back down as changes to the persisted binary AST that the text represents.
As such, any Unix tool used to manipulate text (and thereby textual source code), e.g. diff(1) + patch(1), could be used to manipulate the persisted binary AST through the text. `sed -i` would still work, even.
But you could also have other tools, that manipulate the underlying binary AST directly; where the textual projection would be the thing to update in response.
Or any homoiconic language.
That's why my imaginary editor would work with that format, just in a more semantic/graphical way - as an enhancement rather than a totally new way of doing things. In fact the most practical way to go about it (let's work within the current ecosystem as much as possible!) would probably be to make a VSCode extension.
Graphs as a projective UX for an underlying textual model sounds a bit more ... realistic. All those "graph programming" languages don't really seem practical for real projects precisely due to the lack of an ecosystem around them.
Think like: your syntax highlighter has no idea what your code when you're in the middle of typing, because once you type an opening parenthesis without yet having typed a closing one, your code no longer has any possible valid parse.
Ideally, you shouldn't be able to modify the text in ways that don't represent an atomic graphical operation in the first place. But if you enforce that, you can't really say that the textual representation is the canonical one. It's just a storage projection.
Agreed. This makes some changes that could be simple unnecessarily hard. Formatting shouldn't even be a thing. FWIW though, having an auto-formatter on save has solved a big chunk of that pain for me.
Also git blame becomes kinda pointless.
Well, it wasn't hard to beat punch cards in terms of convenience (BTW did you use them once?), but apparently it's very difficult to beat text editors because they've survived for 50+ years despite the fact the mouse was available in the 80s and that people have been saying that sort of thing once in a while for at least 3 decades.
Yeah, terminal input is odd at times. Doubly so if your main prior experience is entering text into HTML textareas. There's a learning curve, but there's a benefit to tackling that curve. For one, you get readline editing, which is _far_ more powerful than the textarea comparison, and it's customizable. For another, if you need to use your editor to manage a larger command, you have that exact option (see Ctrl-X Ctrl-E in bash/readline). That editor can be vim, or it could be your pimped out VSCode with Copilot. Bash doesn't care.
When you think about it, that's a good 70% of the article's complaints resolved. Trouble navigating through lines of command input? Learn your readline keybindings, or just pop it open in your editor of choice, which also grants you syntax highlighting and whatever else.
The other 30% of what article proposes are pretty decent ideas. Why _isn't_ there a way to hover over a command and see a snippet from its manual page, or to hover over a command-line flag or option, and see the data from the manual page? We have bash-completion which can provide us command-specific completion, what about docs? Many new features can be added to the current architecture. For example, OSC 52 allows terminal apps to send data to the clipboard so long as the terminal emulator supports it. I don't see why similar extensions couldn't enable applications to annotate text with documentation, etc. But that doesn't require the terminal to take over all the line editing: it's just incremental improvement to the current system.
And that's where I think this article and approach are wrong. Maybe it works with the user's shell, but what about Python? GDB? Or the myriad other command line tools I use on a daily basis? As it is now, my terminal is responsible for being the best "terminal emulator" possible. It handles input, draws to my screen, and does it fast. It doesn't need to concern itself with supporting GDB: it is a terminal, and that's that. I'd rather not see these layers get smooshed. Let's focus on improving the current system so that GDB, readline, and the other pieces of the puzzle can incrementally improve the situation.
Galaxy brain: M-x eshell. Use regular Emacs commands from the shell! Define functions in Emacs Lisp, use them as shell commands!
Some of these features are near-impossible given the current terminal-shell abstraction, however. For example, a traditional terminal has no concept of command input/output, which means that it can't suggest a next command to run based on the output of the previous command.
thefuck (https://github.com/nvbn/thefuck#how-it-works) does exactly that...
Neither does wayland or whatever. Point being that you can treat terminals as dumb character cell grid display with slightly wonky input mechanism and get quite far ignoring/working around all the traditional line-oriented stuff.
To the warp terminal developers:
I'm sure your terminal program is great, but stop posting this content-marketing stuff here. It's not your audience.
Lots of developers use Terminal.app, so that clearly isn't a real problem. There's no obvious reason why developers would be willing to buy a closed source IDE, operating system or cloud services but not a terminal emulator. I think people are reacting more to the login requirement than anything else.
" We're launching our new and improved input editor. We just posted our article on the history of the terminal input, and how we could innovate on it.. We would appreciate if you could show the post some love. "Why is the terminal input so weird?” (navigate to HN and go to the “new” page and vote / leave a comment - we aren’t linking to it here because that can trigger HN’s moderation filters)"
Upvote this!!!
# edit long commands
autoload -U edit-command-line
bindkey -M vicmd v edit-command-line
That `edit-command-line` autoload script is part of zshcontrib and should be installed by default on any recent zsh distribution. I've never encountered a server I've ssh'ed into that didn't have it. Enjoy :)autoload -U edit-command-line
zle -N edit-command-line
bindkey -M vicmd v edit-command-line
But, like, this is obviously an entirely different class of problem from TFA, which is a skill issue.
`v` is also available in vi input mode.
Good thing they got that funding a few months ago instead of now, when there's far less VC money sloshing around and the Juicero of the command line looks like a far less enticing proposition.
Option + mouse click moves the cursor to where ever, control+a|e move to the beginning or end of the line, option+arrow jumps words, and the arrows navigate up and down lines just fine... What am I missing?
There's no substitute for learning the tools.
If you ever find yourself thinking "weird that there's no way to X", in a shell or editor, you're probably wrong.
If you can take the time to learn these (if not, why are you using a terminal?), then you can learn some shortcuts without them being "discoverable".
I say supposed because they're really not all that big of a deal. OK, bash making it difficult to go backwards to previous lines is... annoying, at least until you press C-x C-e and do what you want anyway.
The use of a mouse for something text-centered is pretty much foreign to me, too.
If you were confused about the command arguments you could run commando (or use … as an argument) to bring up a GUI to select the flags.
The Eddie text editor for BeOS and now MacOS X/XI/XII/XIII has a similar text-editor/shell hybrid.
Absolute no from me, even if their terminal truly is better and innovative.
In case there was any confusion, Warp never sends the contents of terminal commands and outputs to our servers (unless a user explicitly chooses to use the "Block Sharing" feature).
What Warp currently sends in regard to telemetry is listed here: https://docs.warp.dev/getting-started/privacy#exhaustive-tel....
We initially required telemetry for all users while in beta so that we could have a better understand of usage patterns and improve the product in its early stages. As we mature, we are able to better extrapolate from a larger sample size without requiring telemetry.
It shouldn’t be opt out in the first place, it should be opt in.
Requires an account? Check. Crashes IMMEDIATELY upon opening? Check. Doesn't support any tool I use (e.g. FZF, key-bindings, etc)? Check. Spammy "iS tHe tErMiNaL oN lIfE sUpPoRt?" blog post? Check.
Do they even know their target market is mildly allergic to all of the above? Yikes.
\[\033[999;0f\]The setup: I'm on a Mac, I use iTerm for my terminal, Fish for my shell, and most often I'm inside a docker container also running Fish and using iPython.
The question: When I Ctrl+W to delete a word in a Fish prompt, what counts as a word is different to what counts as a word in iPython. For instance, Ctrl+w at the end of this string `test.func('param1', 'param2')` produces...
Fish: test.func('param1', 'param2'
iPython: test.func('param1',
Hit Ctrl+w again, and you get...
Fish: test.func('param1', '
iPython: all gone.
This causes me to over delete in iPython many, many times per day. I'm guessing that the rough flow of the delete word signal is iTerm -> Fish -> iPython and that iPython is the thing that's being overzealous?
Almost correct. Once you launch iPython, Fish is out of the picture until you quit iPython. However yes iPython does handle Ctrl-W differently from your shell
Here's a gist with my config (also binds shift-left/right arrow to move to previous space instead of visual select): https://gist.github.com/fratajczak/64e32421a43d3b8194d0409ce...
[1]: https://github.com/prompt-toolkit/python-prompt-toolkit/blob...
Our current best-guess on how we'd do this is a more restrictive license that * allows for verifying security and privacy * allows individuals to build and tweak Warp * prevents another company from starting a commercial enterprise off of it
We'd love more thoughts here though! Feel free to join the discussion at https://github.com/warpdotdev/Warp/discussions/400 if you're interested.
A few things we've found: 1. Developers are understandably opinionated about their terminal/shell setup. It's a matter of personal productivity. 2. We have noticed a general trend of more terminal use happening in IDE, not a standalone terminal. 3. Most terminal "collaboration" happens asynchronously not synchronously (e.g. shared scripts, CLIs, secrets etc as opposed to live terminal sharing) 4. Most of the collaboration happens at the shell level not the terminal level
Given the above, we made the conscious conscious decision not to build our own terminal.
Happy to elaborate more
This. I barely use terminal outside of Jetbrains, and heard similar things from other devs.
And people who live in vim/emacs (I used to live in vim)- I would be surprised if they'd pickup something that might interfere with their setup, like tmux or special plugins etc. (forcing login stuff aside- assuming that'll be removed at some point)
But maybe warp folks will find a way to play nice with everything, or be simply too useful to not use.
Is it possible to work with vim in warp?
This is the tradeoff of building our own editor instead of using the shell's--we can build features that wouldn't be possible in the shell directly but it requires us to build features that already exist in the shell from scratch. So far, this tradeoff has been well-worth it to build what we think is a better experience when using the terminal.
Making a login required is absolutely unnecessary, though.
Literate programming in org-mode with babel and magit and () is
Still weird but so much more than a terminal
? help ? ? ? quit ? exit ? bye ? hello? ? eat flaming death ? ^C ? ^C ? ^D ?
In zsh (vi mode) I simply press shift-v and I am dropped into my $EDITOR with my current input loaded into a buffer. Of course I rarely need to do this because zsh vi mode covers 99% of my requirements.
So, my tldr for an article I didn't finish reading: someone doesn't know how to use their tools and instead of learning they jumped on the internet to complain, and/or sell me a solution or something, idk.
Maybe you don't find it valuable because your setup and mad vi skills offer you an alternative (which I'm very sure is just as feature-rich as what is described in the post, which you didn't read). Isn't it obvious how a more accessible solution might be useful to some people?
I for one welcome the efforts of the Warp team to improve terminal UX.
esc -> v does work both with bash and mksh on ubuntu with stock config but not out of the box with zsh on my macbook so i suspect there is something missing im my one line .zshrc file.
Capital V is an actual vim command btw triggering linewise visual mode and that does somewhat seem to actually seem to be the functionality of shift-v by default in zsh.
Enable vi mode (usually in .zshrc but you can test from the command line):
set -o vi
Invoke $EDITOR on the current command line: ls -la /tmp<Esc><v>
That's Escape, then the lowercase v key (sequentially, not together)You can use up-arrow to go through command history, reach the one you want to rerun with modifications, then press Esc, v.
I even tried setting editor to something other then vi(scite) and it's clear that where bash and korn lauched $EDITOR on <Esc><v> zsh does not.
My .zsh file on macOS is literally just "set -o vi"
I guess there is some kind of added magic here(are you using the oh-my-ssh macro's) that's just not applied with my deliberately minimalist .zshrc.
My .zshrc is pretty minimal and hasn't changed in a very long time, but I did find this:
set -o vi
# command editing in vi mode (ESC-v)
autoload -U edit-command-line
zle -N edit-command-line
bindkey -M vicmd v edit-command-line