iTerm looks nice, but is there a reason to switch from Terminal.app? The "jobs" sidebar looked great until I discovered that it only works for local processes, for example.
Generally, it seems there is a lot of room for improvement in terminal apps these days:
- Probably upwards of 90% of my terminal work involves SSH, and it seems like a huge missed opportunity not to integrate with SSH in any significant way. iTerm doesn't even bother, whereas Terminal.app's "New Remote Connection" is pretty useless. (It should at least be able to infer my commonly used hosts from OpenSSH's known_hosts file.)
- A terminal should be able to discover the currently running remote process, or at least what host I'm connected to. Neither Terminal nor iTerm do this. My tabs always say "ssh", and so I have to hunt for the right tab to find my shell.
- Persistent shells. Today, when I want to open a remote shell on a host, I open a Terminal tab and do "ssh ". If something goes wrong with my connection, I have to go back in manually, and the shell state is lost, and any interactive program not running with "nohup" will probably have terminated. If I close a tab and ssh back in, my state is also lost. If I want multiple shells on the same box, I have to either use multiple tabs, or a kludge like screen or tmux that tries to be a terminal within a terminal. I want to ssh to a server and be exactly where I was.
- No I/O integration. Why can't I cat a file into my terminal app in order to copy or download the contents? Why can't I pipe a local file into a remote shell?
- Grepping. It would be swell if I could tell the terminal to filter its current window contents by a pattern. I don't mean highlighting results, I mean only showing lines matching a pattern. Often I end up doing "tail -f some.log | grep foo", then "...grep bar", "...grep -C10 bar" because I'm not quite what I'm looking for. With this built-in grepping feature, I could do "tail -f some.log", set up a pattern in the terminal app itself, and I could watch it display different matches interactively as I change the pattern.