Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
A curated list of Terminal frameworks, plugins and resources (github.com/k4m4)
266 points by febin on Feb 24, 2017 | hide | past | favorite | 80 comments


Long-time bash guy, I used to use just git-bash-prompt + a few dozen aliases and functions, but recently got some shell envy after seeing a coworker with powerline on fish. I checked out ooh my fish and it was really hard to get it to do what I wanted; things like saving a function (since aliases are defined in one with ooh my fish) took a few hours to figure out because of how homebrew installs fish on Mac. It was also overly difficult to get ^r rev search working, $(foo) didn't work, the random one-liners I'd type didn't work half the time with fish.

I switched to zsh + prezto with powerlevel9k ( https://github.com/bhilburn/powerlevel9k ) and within an hour, I had something awesome. Here's a guide on installing it: http://www.codeblocq.com/2016/09/Pimp-up-iTerm-with-Zsh-and-... and I'd really really recommend powerlevel9k. Nothing against fish, but after a few weeks, it was just too hard to unlearn all my bashfulness, whereas in zsh it just works as it used to + had the extra functionality I got with fish + now is even more awesome and useful thanks to powerlevel9k.


In fish, you do (foo) instead of $(foo), and to do rev search you just type something and press up. To save a function, do funcsave name.

It did take me a little while to get used to fish (psub was another thing that took some googling to find) but I don't think I would go back to zsh now.


What's bringing powerlevel9k that's not in oh my zsh?

By quickly glancing at it, it just seems to be a bloated theme with no extra features.


This. I used to have that setup (Prezto + Powerlevel9k) but in the end I didn't want all sorts of needless config, and it still felt really heavy. Plus, you actually rarely use anything in the framework.

Now I just use zsh + zplug (vim-plug like plugin manager) + pure zsh theme + tiny zshrc. Fast as hell, tailor-made and no-nonsense. You can check it out over here if you're interested: https://github.com/jorvi/dotfiles


I spend most of my time in Terminal (well in Emacs) and don't use much more than I could have had on a AAA (Ann Arbor Ambassador 42x80 terminal). What am I missing out on? This page doesn't say, just lists alternative terminals.


I spent a few minutes making as many mistakes in a terminal I could to give an idea of what zsh can do. I'm not sure if it is what you are looking for but hopefully it's helpful and if not oh well.

https://asciinema.org/a/bbis1intm13ya7vw3jyk0a2rl

Note: anytime something odd happens and things pop up I pressed <TAB>


I press tab in my zsh and it doesn't look nearly as nice. Is that specific to the theme you have running or is it an extension?


By as nice do you mean the colors and font? If so I use oh-my-zsh as a base config and build up from there.

https://github.com/robbyrussell/oh-my-zsh/wiki/Themes


I have been using MobaXterm for a while on Windows. I don't see it mentioned very often in lists like this. It could probably fall under multiple headings in this list.

http://mobaxterm.mobatek.net/


I went through so many terminal emulators on Windows, looking for one that could handle SSHing to a Linux box and running tmux/vim/irssi inside the session; MobaXterm was the only one I could find that could handle it. It's a shame it isn't free software, but I can't find any free software on Windows that does curses GUIs correctly.


I use to use Moba and on the paid product to boot. It was the best, but it was very, very bloated and they did a fair number of annoying things related to UI.

I have since stopped using Moba and just use Windows Subsystem for Linux... there are still too many annoyances because of the Windows console host stuff; even using tools like ConEmu still fall victim to the issues and introduce their own cruft to deal with. Still, I find the overall experience just more seamless and the least annoying of the options I've tried so far including Moba.


I was so happy to find Moba after my MacBook took a dive all I have now is a Win10 laptop. I'm pretty sure I'll survive for travel now, Moba really gets the job done!


I'd love to find a shell + terminal that's aware of the semantics of shell output.

One nice thing about (good) GUI programs and websites is that 'results' are quickly navigable. In a terminal, I'd love to be able to drill down into results of ls; from grep output quickly open a file and jump to that match; etc.

(Shell output can be in any format, but even if it could grok the output of only specific programs/commands (and also their switches) that would be a starting point.)

Does anything like this exist, for any platform? It seems like PowerShell could be a good match, but I don't know anything about its ecosystem.


That exists, it's called GUI...

Improving on the text model is almost always premature optimization, though. Consider the incredible cost for an observer to "understand" what you are doing. Insane amounts of work (resulting in lock-in or a product never shipped) is not how the text model could become so successful.

Why can tools like grep or sed be so immensely useful? Precisely because they don't need to understand what goes in (other than a stream of lines), what does the pattern mean (other than being a regular expression), and what goes out (other than a stream of lines).

And what's the benefit of programs understanding "semantics of output" really? Everything is text. When a file is printed on the terminal, select it (e.g. double-click), type "vim " (or whatever), and middle-click. It's good enough most of the time. When there is some really dry repetitive work, bang out a command-line to automate that for you (along the lines of "while read filename; do vim filename; done").

A GUI can only help for the most common cases. If these are only a minority of cases, GUIs are only crippled tools preventing you from doing real work. (Personal anecdote: I use nothing but a browser and xterms on most days or even weeks).


Everything is text.

No. In PowerShell, console output is 'typically'[1] of a well-known type.

It is therefore entirely possible for a shell + terminal to be aware of the operations available on its output.

[1] For some definition of "typically"... PowerShell permits arbitrary manipulations of output, so obviously there are circumstances where this is impossible.


Yep, my post was unclear. "Everything is text" is the Unix idea.

I know that PowerShell pipes objects and that's exactly the problem from an architectural standpoint. It's what makes it expensive to create and integrate components.


You really want Genera. Just about every depiction of something beyond mere verbiage was interactable in its shell.


Pretty close to what you describe is Acme [0] the text editor/shell from Plan 9. It is mouse oriented edit. You can right click on words to search them in file or open text files, directories or compiler errors. I recommend viewing this [1] introduction video.

I miss few things in Acme. A bit more WIMP-y familiarity and a 3 button mouse.

That's why I'm working on experimental text editor inspired by Acme [2].

[0] https://en.m.wikipedia.org/wiki/Acme_(text_editor)

[1] https://youtu.be/dP1xVpMPn8M

[2] https://github.com/hadrianw/werf


I really like Rob Pike's minimalist principles but somehow dislike most of his implementation choices. I can't be productive in acme due to missing my #3 arm, but I'd kill for structured regular expressions in vim.


You've described Emacs, which is a huge library of frontends to common Unix utilities. Dired, for example, just parses `ls` output.


It's no surprise to me that Emacs has already solved this problem... Are there examples beyond dired?


grep output, compile errors link to the relevant file, and location within said file.


You're pretty much asking for PowerShell. I've been using it for a while, which might jade my answer. That said, I've got it being installed on my Unix systems as my one-true-shell.

You stream objects instead of text. The objects can be rich. It's a huge step forward in semantics and consistency.


Is there terminal support though for navigating the resulting objects?


Think what "navigating" should mean. If it's a vague, abstract thing which could mean a million different things in practice, the answer is likely "no".


Well, I've given examples above of what I mean, so I think that one could extrapolate that to other examples...

But to put it in more concrete terms:

Is there a shell + terminal that permits the user to interact with shell output - in specific circumstances - whereby "interact" I mean:

* the ability to view additional properties (which are hidden by default) of objects represented in the output

* the ability to make a user-selected object the primary focus of investigation

* the ability to easily (think - right click, or keyboard commands to accomplish the same) expose verbs that can be activated on those objects, and additionally to choose one?


There are many people around the internet hating it with a passion. I believe them. There can't be a tool that magically reads all of your wishes.

Serious question, have you ever known a technical Windows sysadmin? I tried to backup a directory tree today as a domain administrator using robocopy, and could not do it without messing with file permissions.

Not that today's Unix is that simple anymore...


I'm writing a shell that does this; right now I'm working on the language itself (a somewhat functional language with basic types and records) and its parser (the syntax is like a terser OCaml mixed with Ruby, designed to be quick to write), but eventually it'll reimplement most unix programs so that their output is actually a type it recognizes, and it'll have something like a FCI (Foreign Command Interface) that would let you easily parse the ouput of commands it doesn't implement.

It's not uploaded anywhere yet (and there's not much to look at right now, just an unfinished parser and the beginning of an interpreter), but when I have time to work on it and put it in a somewhat functional state I'll post it on here too.


iTerm hyperlinks strings that are valid paths. Cmd+click to open. It is immensely useful!!


This is something standard OS X Terminal does, too, although it's either a right-click or command-doubleclick. Terminal actually does a lot now that it didn't a few years ago.


Really? I can't check for a few hours. If you did...

ls

cd ..

Would all the listed files be clickable in the ls output?

This is what the parent comment is referring to in iTerm.


That would surely require rewriting all terminal programs, to get their output structure?


So many things wrong with this list. Fish stuff in the ZSH section, the FreeBSD package manager in the Linux section, Cygwin is not a package manager (you still need apt-cyg or sage to install things in Cygwin without rerunning setup.exe) ...

Sometimes I see good stuff in these lists, but this author looked like they didn't even really try.


The author clearly tried, there are something like 100 different links, and it's BS to suggest that they didn't because there are some errors.


>The author clearly tried

...to cram as many links as possible for the recognition without putting the effort into the curation that make these "Awesome" lists worth anything more than a Google search.


FWIW, I don't see what particularly differentiates setup.exe from apt-get, other than that the former is a GUI; people generally consider Synaptic to be a package management tool, even though it is a GUI, and it is very similar to Cygwin's setup.exe (which isn't like, overwriting everything with a new install: it manages the existing packages).


People fear setup.exe because it's confusing. I remember being very very scared to break the existing install every time I ran it.


The fact that easy_install even exists in that list...


Most authors of "awesome" lists just want the stars and GitHub "fame", they don't care about curation or quality.


It is sad that nobody else mentioned it or care about it.

I don't even know what most of these tools have to do with "sexiness" and find myself angry that people just enjoy. Is there any possible critics over there or is everything supposed to be considered as (awesome|cool|hip|sexy)?


Why not send a pull request with corrections?



why not just use babun?


Does it mean that "awesome" is no longer cool and every curated list is going to be "sexy" instead?


Because Awesome is overloaded: https://awesomewm.org

;)


I opened an issue about the semantic problem. What makes me worried is more sexism, harassment, rape culture.

https://github.com/k4m4/terminals-are-sexy/issues/59


That list is missing a section for terminal music players. I created one in Haskell some time ago: https://hackage.haskell.org/package/haskell-player


CRT (cool-retro-term) is a nice, free alternative to Cathode and runs on Linux too.

https://github.com/Swordfish90/cool-retro-term


Could do with adding Finch to the list under Communication

https://developer.pidgin.im/wiki/Using%20Finch


I find it hard to take too seriously such a list if it doesn’t include GNU Screen. A terminal multiplexer really enhances the experience of working in a terminal. Even tmux only gets a cursory mention in the middle of other Tools and Plugins.

It would make a lot more sense to give terminal multiplexers their own section (even if there are only two entries) and explain the benefits of using a terminal multiplexer.


Tilda should not be left off the list.

https://github.com/lanoxx/tilda



Anyone know if there is any terminal + server side piece that, like terminology or iterm2, lets me inline plot in R, python over ssh? Linux or mac.


If you are running a Mac for your desktop (with iTerm2) and ssh'ing into a Linux machine. These work if you run them remotely as the image gets transferred through the SSH session:

https://github.com/daleroberts/itermplot

https://github.com/daleroberts/bv

Alternatively, for any other terminal emulator with Unicode 9.0 font support and true color support, you can use:

https://github.com/daleroberts/tv

This even includes Windows (using patched PuTTY) and remotely running 'tv' on a Linux machine.


Thank you, I will try these. I was looking at your repo but couldn't tell if it would work remotely.


While technically not a terminal client, Blink is a mosh supported ssh application for iOS.

http://www.blink.sh/

Open source so if you've got yourself an Apple Developer account you can build and run it yourself.


For Windows, I think Git Bash/MSYS2 are worth mentioning as well.


Those should both be superseded by PowerShell for anything realistic on Windows.


I like PowerShell (lately I like it a lot), but MSYS2's use case is slightly different. The latter, unlike the former, gives you a minimalistic POSIX layer in Windows.


Is there still no way to make iTerm2 refresh faster? When doing quick scrolling or output, it's so noticeably choppy compared to Terminal.app, or even Xterm.


Terminal dispensed with NSScrollView and I think that won a performance advantage in rendering. It's hard to do if you're not Apple. They also modulate the refresh rate based on load, which 3.1 adds. They're using Core Text which is very slow compared to Core Graphics but they made it up with clever hacks.


I don't buy it as the main problem. 60fps is not asking for very much from a terminal emulator. VGA text modes can handle it, my old 486DX laptop can handle it, and XTerm can handle it (even fully software rendering everything to a buffer). It's possible core text is to blame, but this seems like an odd problem for an emulator to have in 2017.


This bothers me, too. Terminal lacks some features I really want, but it's implementation just feels polished. It's just so smooth, reflows text nicely and renders fonts perfectly.


Terminal is great but a major lacking feature is 'true color' (https://gist.github.com/XVilka/8346728).

If you an Apple engineer working on Terminal and reading this post, please add it, it would be much appreciated :)


And here I thought I was spoiled with 256 colors in Terminal.


Do you use any advanced features like triggers/alerts with captured output?

I found that a regex I was using to pop a notif was slowing iTerm2 down big time, removed it, and it feels much better now.


Zero. I use iTerm2 when I have to use a Mac, where I act as though it's Xterm. This is just out of the box behavior. Older versions had an adjustable refresh rate slider.


Triggers were super slow in 2.x but are much faster in 3.0. Try it again if it's been a while.


Interesting not to see csh/tcsh there. I'm out of the loop when it comes to these things; is it pretty much dead? Did bash 'win'?


I still have a soft spot for tcsh for historical reasons, but yes, bash pretty much won.

Specially now with Microsoft's Bash on Windows


Nor ksh, which was the common shell for the SVr4 line (Solaris et al.). It has some extensions to sh that bash picked up, some that bash imitated just badly enough to be incompatible, and some that bash never picked up (e.g. floating point expressions, which I use surprisingly often).

The terminal emulator I use, mlterm, isn't on the list either. Its killer feature for me is a configuration that solves the vim ESC/Alt prefix problem.


I would add rxvt-unicode to the terminals list. Its client/server model makes opening new terminals practically instant.


Good to see Cmder mentioned for Windows. Does everything I need and looks great.


My only complaint is that it often explodes when using vim or pagination certain files over SSH.

Also ctrl+w by default in cmder closes the tab instead of the bash equivalent, I always have to unbind it.


FreeBSD's pkg is listed under Linux.


Probably worth opening an issue.


nice list except git is not a shell and powershell is not a terminal emulator :)


And fish isn't for zsh :)


You know, zsh without fish is like fish without a bike.


No mention of fizsh?




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

Search: