Hacker News new | past | comments | ask | show | jobs | submit login
Terminology – a new terminal emulator (enlightenment.org)
154 points by Aissen on March 25, 2013 | hide | past | favorite | 137 comments



Transparency and background images are great for making screenshots to show off your customized desktop. For actual daily use, they're absurd.


I've had semi-transparent terminal windows going on many years now. I keep them 80% opaque in the foreground, and drop it down to 75% opaque for inactive windows. I also apply a nice blur effect to the background (with the active window having a higher blur amount). It's really nice; lets me see what's behind the window, without detracting from the readability of the terminal itself.

Transparency without blur might be problematic though.


Blur is absolutely the key to transparency. I've found it's a balance: you can go for less blur, but you have to make the window more opaque. With more blur you can go more transparent with the same amount of readability/non-distraction.


I have to admit I have been using transparency more lately. It is great when you are quoting something or trying to duplicate a ui in html.

Granted, it is much more heavily used in screenshots than it is anything else. :)


I use transparency on terminals since I use X. Its not to bad if i dont have it, but on a tiling wm its the only way to see whats your background image ;)

Yeah, its useless. But a bit of candy is not to bad.


I have a large screen. With a semi transparent terminal I get the impression that my brain is better able to re-scan the screen for the content I was looking for. Especially if I have a vim session with several columns.


When I first saw them I thought transparent terminal windows were the coolest thing. Then I tried to use one...

So, as other commenters have pointed out, using blur and/or 80% opacity helps with this. One thing I haven't seen (with this terminal or any other) is to actually outline each character in black (assuming white on black color scheme). That would give some much needed contrast, while still allowing areas with no text to be visible without much or any blurring and perhaps not needing the opacity set so high.


Eterm does this. It does help, but it is kind of ugly.


I just tried this and I wasn't wowed by the effect. Back to a solid black background for me...


I allow slight transparency through terminal windows, perhaps 10%. This allows me to see motion in background windows, which is useful for keeping track of processes like lengthy compiles.


Why would it be absurd? Do you use a monochrome display? Because, let's face it, black/white is all you need. Or green/white.


Because backgrounds (or movies) like the ones shown in the video make the terminal text completely unreadable and reading the text on a terminal is kind of the whole point of it.

Edit: That sounded a little more negative than I meant it. I'm actually a fan of transparent or backgrounds, but I think they need a lot of tint/blur to them or they become distracting and/or make the text unreadable. This was evident in the video where I couldn't read a lot of the grey text once the background picts were enabled.

Though the use case for video still eludes me. :-)


I have the feeling that many people are distracted by the bad video. The terminal actually looks like this: http://www.bestubuntu.com/wp-content/uploads/2013/01/eae91__...

It's very clean and nice looking... I don't understand how this is distracting.


I used to care a lot about tabs and pane splitting in the terminal emulator. Then I discovered terminal multiplexers: screen, then tmux. Now I don't want those features in the terminal emulator anymore, as they overlap and even conflict with the terminal multiplexer.


I still like tabs. I'm often logged into multiple remote machines where, for me, a terminal emulator's tab represents a unique SSH connection and that tab then has tmux running on the remote machine.

Otherwise, I'd be running tmux on my local machine, then want to run tmux on a remote machine, and nesting terminal multiplexers is not good.


Nesting terminal multiplexers is very good, I do it for exactly the use case you mentioned. Escaping your escape key is easy, with a little practice you won't even realize you're doing it.

I have a shell function called 'go' that creates a new screen and labels it, connects to the remote host via SSH, and then recreates or re-attaches to the remote scren as appropriate. My top level screen session currently has 8 remote hosts I'm logged into, each running their own nested screen sessions.

My go() function also reads my ~/.ssh/config file to grab all my host aliases so I can tab complete to them. Note, I'm a Perl programmer, and rarely write shell scripts, so this function may be kinda ugly.

    go()
    {
        local OPTIND OPTARG
        local SCREENCMD="screen -dRR"

        while getopts "xn" flag; do
            case "$flag" in
                x) SCREENCMD="screen -xRR"; shift;;
                n) SCREENCMD=""; shift;;
            esac
        done

        if [ "$#" == "0" ]; then
            echo "Need someplace to go."
            return 1;
        fi

        while (( "$#" )); do
            screen -t $1 ssh -tq $1 $SCREENCMD
            shift
        done
    }

    _go_show()
    {
        local curr opts
        cur="${COMP_WORDS[COMP_CWORD]}"
        opts=$(grep 'Host ' ~/.ssh/config | cut -d' ' -f2)
        COMPREPLY=( $(compgen -W "${opts}" ${cur}) )
    }
    complete -F _go_show go


You should know that the bash-completion package in Debian and kin does tab-expansion of ssh hosts in known_hosts and config. Also handles the --argument switches for just about all common utilities.


Nesting terminal multiplexers is wonderful :)

It kind of sucks if you accidentally use a hardstatusline in both the nesting and the nested muxes, and it slightly sucks if you use the same escape key for both/all levels of nesting.

I have been using a nested screen setup for ~3 years at home and it's great. My outer screen uses ^Z as its escape key (I ^Z very few commands) and the inner ones use ^O.

It works wonderfully, and I never have a problem remembering which screen has what because of the different escape keys. It's sort of like the finger memory that you develop if you use multiple workspaces (esp in a WM that supports tagging windows) and always keep the same things on the same workspaces.


^Z looks like a great escape sequence. Never thought of this one. ^O is my current favorite, and ^\ isn't far behind.


I use job control pretty often, so ^Z is out for me. I use ^O as my screen escape key, which back in the way old days used to flush output, which was extremely handy at 300 baud.


Me, I tend to leak tmux sessions and windows all over the place. It's almost like job control but with a modern twist.


I like ^J myself. Left pinky, right index finger.


As long as you keep a proper frame of reference, you'll be fine (I disable tmux's status bar on nested tmux sessions though). You can use C-a a, or something similar to send a C-a to the nested session, although it can be a little annoying.


I think that's a big differentiator in people's CLI preferences. When I see prompts that don't include $HOSTNAME, and people eschewing tabs for multiplexing in all cases I just assume they rarely manage remote machines.


perhaps it's not that they don't manage remote machines, just that they do it differently to you.. nested tmux with $HOSTNAME/$IP in the hardstatus make this very easy imo, tells you where you are whilst also allowing you to keep a minimal prompt.. as i find long prompts can be incredibly annoying

also, using ^a^a to send commands to the nested tmux isn't so bad.. but to get to the third one down you need to use ^a^a^a^a as you need to send a ^a^a to the second one in..

for the fourth nest you need 8 ^a's, but again, it's a bit like code indentation, if you're 4 tmuxes deep, then there's a good chance you're doing it wrong

but still, it's nice to be able to do it if necessary


Personally I've moved from tmux to a tiling window manager with urxvtd. Less fiddly day-to-day and doesn't get locked up and horrible.

Tabbing and whatnot are something the WM (in my case, i3) handle far better than a specific program.


If you're just using Tmux as a way to split/tab your terminals you're missing out on a ton of its functionality.

For example it also allows you to detach/reattach your running session, which is invaluable if you're working remotely, and especially if you have a flaky connection. I've used it in several instances where there is more than one person handling DB upgrades and the like. You can have several panes/tabs open, vim with upgrade notes, and everyone connecting and working as needed. It beats the crap out of constant copying/pasting pieces of code and terminals on some IM program to make sure everyone sees what you're seeing.

I usually also end up running it locally and bypassing the terminal emulator and WM's multiplexing abilities, but it's more out of a desire to use the same tool whether I'm running locally or on some remote box. If you don't need the latter, it's a bit harder to justify using it, even though it still has some advantages, like generally being more scriptable.


> it also allows you to detach/reattach your running session

I use dtach(1) for this. I'm sure tmux is far more powerful, but dtach is much simpler and does all I need at this point. It's still less than a year since I learned Vim, so I'm taking a break from learning arcane programs with a zillion options for a while :P


Yeah, tmux remotely is great, but for terminals on the desktop I don't really feel that it's that useful.


locally, I find the tmux buffer system (just like in vim) to be very useful for pasting text around the place, also, the newer versions have :choose-tree, which is well worth a look, using ^a s gives you a list of open sessions, from which you can choose what you were working on, and if you give your sessions sensible names (based on the starting directory for example) then you can switch between projects/jobs incredibly easily..

also, running tmux locally has the advantage that if you need to leave the office or go somewhere, you can still reattach to your work machine and pick up from where you left off.. so, in a sense, everything is remote


I gave up on urxvtcd when I realized that a single crash brings down all your terminals. Nowadays I use stock xterm, since while I was dallying with urxvt, xterm got the one feature I cared about from urxvt, which was URGENT-on-bell.


I'm not sure how to port color/font config from my urxvt config to xterm. Googling only seems to tell me to how to change background/foreground, not the individual colours.

Also, Is there any reason not to use just urxvt (without the client/daemon setup)? I've never had a crash that has brought down all of my clients, however.


There is no reason not to use urxvt in the normal mode, as it behaves just like xterm would (not exactly of course, but one crashing won't lose all of them).


no, no reason not to use plain urxvt without the client/daemon bit.

at the time, I think I was on some kind of network where urxvt's terminfo wasn't likely to be installed anywhere. I know I could install it everywhere in ~/.terminfo or whatever, but it was a pain to get to a new host and realize that I hadn't set it up. I went back to xterm.


Agreed. Multiplexing panes and tabs should be the responsibility of the WM, not the terminal itself.


not when you're working via ssh


Guys, why don't you just go ahead and get yourself a tiling window manager??

http://awesome.naquadah.org/


Or perahps I3!

http://i3wm.org/


Or even better, XMonad!

http://xmonad.org/


Only better if you are up for 500mb of dependencies and having to learn Haskell to configure your desktop.


Configuring XMonad is a very good reason to learn Haskell, among many others.


And apart from a little arcane syntax, you absolutely don't have to learn any real Haskell to configure xmonad.


No, but you have to learn a REALLY arcane syntax!


or better use DWM :P


Terminal multiplexers (screen/tmux/dtach) and native terminal emulators each provide unique features, so for me the best is a combination of both!

If you use a mac, I encourage you to try iTerm2/tmux-git. The combination allows you to reconnect to a remote tmux session and get a window with all of your tabs for that server. You'll never need to know the tmux commands again. You'll just use your native commands to switch tabs, search the history, see the list of open tabs, open new tabs, etc. This is the killer setup.


Somehow I wasn't previously familiar with tmux, and that looks _fantastic_.

I've been stacking screen sessions for years, so this is really exciting. Thanks!


The nice thing is that Terminology allows you to support any use case you want:

- Multi-plexing in the terminal

- screen/tmux

- multi-plexing in the WM

And it's pretty nice ! Written by hackers, for hackers.


For me, tabs distract from the cleanliness of a black (or insert your own background color) terminal.


Fullscreen is important!


Personally, I really like to be able to drag the splits between terminals, use my scroll wheel, and click between tabs.

Maybe these things can be enabled in tmux somehow? I know on a mac tmux/iTerm can do these things, but I'm on linux.


setw -g mode-mouse on

setw -g mouse-select-window on

setw -g mouse-select-pane on

setw -g mouse-resize-pane on


Sadly this still leaves you with a rather crippled subset of the real thing. I.e. "copy mode" instead of proper scrolling, no native text selection, and very noticeable latency and glitches.

It's the price you pay for emulating a 35 years old piece of hardware[1] inside an emulator of the same...

[1] http://en.wikipedia.org/wiki/VT100


I wouldn't call the copy-mode "crippled subset of the real thing".

With tmux's copy-mode, you can even select text without touching your mouse, using e.g. vim-like movements. Which is amazing feature.

The fact, that the copy-mode doesn't jump back down with every change on stdout is also very nice feature.

If you want to work with standard linux clipboard, you still can - just hold shift and select like in almost any linux TUI application.


Thanks.

On a random note, why do all unix applications (generalising I know) seem to default to a super-minimal set of options? Surely the kind of people who get annoyed by mouse integration (and you can just ignore it) are the kind of people who can find out how to turn it on, whereas those of us who are using tmux for the first time want all the nice options turned on by default?


i cannot force this to work on urxvt :/


Well, it does work with urxvt. Since you provided nothing about your configuration, I can't tell you what's the problem.


I use tmux daily but I still rely on emulator tabs when tailing verbose files as sending it through tmux will lock up my terminal.


I like using both. Sometimes a screen tab just isn't enough separation.


Reminds me of TermKit. http://acko.net/blog/on-termkit/


Sadly, TermKit is pretty much in hibernation due to too much criticism: http://www.reddit.com/r/programming/comments/137kd9/18_month...


If everyone listened to the nastiest comments on reddit, nothing would ever happen. For anything you can imagine, there is some group who will delight in shooting it down.

I say this as someone who reads reddit quite a bit.


While I agree with you, that's not what he said in his comment :)


That's a shame; it was the most interesting experiment yet in a modern take on the command-line terminal.


That's a really bad screencast, since the fonts are barely readable. Still, cool features. Will try it out to see if they are useful or annoying.


Can't use XFT fonts. Doesn't set 256 colors properly. The blinking cursor is retarded and seemingly cannot be disabled. Those are kind of dealbreakers for me.

On the plus side, it feels really snappy. Impressive speed indeed.


Right click -> Options -> Behaviour -> Cursor blinking -> uncheck.


Thanks. Guess I was kinda quick to jump on that one.


What do you mean by "Doesn't set 256 colors properly" ? You can use fonts provided by fontconfig. Check https://www.youtube.com/watch?v=BYYfQrlXlcM


I want so badly for the XFT thing to not be a problem. All my favorite terms benefit from using the old font system instead, but there just aren't any good fonts I can use.

I do like some of the classic monospace fonts like 6x13, but my monitor resolution is just too high for that.


How about GNU unifont or terminus? they both have fairly large sizes.


I try terminus every now and again, but I always have trouble installing my own fonts (timeshare, not my box) and terminus isn't nice enough to motivate me to struggle through.


as someone who uses several (SEVERAL) xterms on the same screen and focus-follow-mouse, my best bet to see where my words will go when i type is to notice which screen has the blinking green cursor instead of the static white one.

that one would help a lot.

(i used to have a very visible window manager active border and shadows, and also lower the opacity of the non-focused ones... but gnome 3 designers in all their wisdom decided i didn't need all that)


I do that with XFCE. Active window gets a bright title bar and borders with dark text, inactive windows get dark title bars with light text and thinner borders. High contrast in both cases, but easy to differentiate.

Themes like that are very easy to change to suit yourself.


I know, i did that on every window manager since Irix.

But gnome3...

I'm only using it because I'm stubborn. And because i maintain one somewhat popular gui app and i want to test it where i know none of other contributors are testing


I really, really like terminology (as i like Enlightenment), but i am waiting until it supports Tabs, the only thing missing for me.

As to all the "uhh, i don't want additional stuff" comments: There is no reason a terminal emulator can look nice as long as it doesn't distract. And so far, terminology does a really good job! And good, does it look sexy.. ;)

Keep up the development of terminology, one user here for sure! ;)


If you had watched the screencast, you'd have seen that a tab-like feature was in the works, that allows you to multiplex terminals inside Terminology.


How do i switch the tabs?


Right now it's hardcoded to Control+PgUp and Control+PgDown.

As I said it's still a work in progress.


To counter all the neutral to negative feedback, I want to chime in and say I was very impressed. The execution speed with the aesthetics excite me. The gazillon-terminal-window- opens junkie in me always looking for a better terminal emulator -- especially with reasonable Unicode support. Keep up it the great work EFL team!


Terminology still has problems compared to SecureCRT or rxvt-unicode. I have been trying it on and off, as recently as this morning from the latest builds on ppa hannes-janetzek/svn-enlightenment, and if you fill the screen with text, it frequently does the wrong thing with the scrollback buffer, but as far as advanced terminals go, there's nothing for competition with Terminology.

For the neatest demo of what you might want to do, download the development version of Elive -- there is a demonstration showing how the terminal can have a transparent video (or is it rendered EFL/OpenGL?) as a background.

The terminal shows promise, and I don't think I've filed a bug that hasn't been corrected and closed, so if anyone with more expertise can replicate problems as I've described, maybe you should do that.


Please open bug reports on http://trac.enlightenment.org/e/newticket or at least explain your issues here so I know what to fix. Also check in the TODO file if it's not already listed.

I'm currently working on text reflow when resizing terminology.


Text reflow accurately characterizes the issues I would think you'd be working on, to fix what I've seen.

I just fired up a virtualbox. All you have to do to see the misbehavior is run 'ps wuax' in a regular 80x24 terminology and then go to fullscreen. Your cursor winds up in the middle of the screen, above some of the text that used to show before the cursor, and before the cursor is a big empty space or certainly nothing sensible.

I just confirmed that my build from 3/20 has the problem, and a newer build on 3/25 has the same issue.

I will file a ticket if you can't reproduce right away, and gladly help out!


It's exactly what I'm working on, thank you. See trac.enlightenment.org/e/ticket/1184 It will be there for the next release.


Like I said. I haven't opened a ticket that I haven't seen fixed. This is why I enlightenment. Thank you!


FWIW, the ppa is hannes-janetzek/enlightment-svn, and you can try it out in Ubuntu with:

sudo apt-add-repository ppa:hannes-janetzek/enlightment-svn

sudo apt-get update

sudo apt-get install terminology

great effort coming along. I'm sticking with terminator for now but will keep my eye on terminolog.


Unfortunately, terminology seems to be broken for me :(

  [buster@Fry➔ ~] terminology 
  terminology: symbol lookup error:   /usr/lib/libelementary.so.1: undefined symbol:   ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE


You might get this error when your EFL stack needs upgrading. Did you use the PPA? What version of Ubuntu are you on?

For me, I wasn't able to finish apt-get upgrade without uninstalling an old libefl and all of its dependencies (some libraries that have been since merged into libefl I think), then installing again.

Try doing `apt-get dist-upgrade`


I had theefl-trunk installed before, but ppa-purge didn't remove everything, i suppose. Went through libe* libraries and purged whatever came from e17. Installed again.. working now, woohooo!


I never heard of ppa-purge before. Thanks for playing! :)


I'm wondering.. when i hit ctrl-shift-t it seems to open a new terminal? Atleast i get a new prompt.. but no way to switch?


Confirmed. I have no idea what it's doing, maybe this is preliminary support for tabs. You have more terminals to log out from after ctrl+shift+t.


According to https://news.ycombinator.com/item?id=5445978

CTRL-Pgup and Pgdown, trying tomorrow :)


You misspelt:

    sudo apt-add-repository ppa:hannes-janetzek/enlightenment-svn


ah, so I did. Thanks!


This is one thing I myself was considering writing, as there is no reason why today's terminal emulators, which I spend most of my time on my machine, shouldn't be able to also display media. This will team up with ranger very nicely for the ultimate terminal-foo!


On the other hand, I couldn’t help thinking, while watching the video, why should my terminal load web pages and images?

I’ve done the same thing both in Linux and now on OS X, by using various 'open' commands or – on OS X – 'qlmanage -p', which opens a QuickLook window for a file, just like the video is showing, but it’s system wide and not in my terminal.

And this is not a “OS X had this before” post, it’s just that the feature seems more fit to an external program to me. I’m trying not to type unix philosophy here, but it’s going right against it.


Thumbnails for filelists seems somewhat useful. And another use for inline image display is that you could be modifying the image and then scroll back and forth to see the results and intermediates.


I was referring to displaying files in a separate window, not to file listings.


Totally agreed. And at the same time there are so many improvements that can be done in a new terminal emulator other than displaying rich media!


Out of curiosity, what? Setting aside actual emulation of old school terminals, most of today's many terminal programs have very similar feature sets.


I'm confused. What does 'cat myimage.jpg do'? You can easily display images using other programs. The terminal is for things that can be easily manipulated.


I'm amazed Enlightenment still exists.


It's the basis for Tizen, Samsung's new mobile operating system.


e17 was released 3 months ago, after 12 years in development. https://news.ycombinator.com/item?id=4955861


It's one of the best compositing desktops IMO. It renders fast, even without hardware acceleration.


But his point still stands. And it's easy to see why. It's not 'backed' by any distro where it's the default.



It's backed by Samsung.


Does anyone know if the inline images/videos are implemented as terminal escapes. I.e. can you

   find | xargs tycat | less
and scroll around with the data? Can it work remotely?


It's done using escape codes (\033}). tycat/tyls/ty* only outputs escape codes. Terminology handles them and display the images…

In tycat.c, you can see some code like: if (mode == CENTER) snprintf(buf, sizeof(buf), "%c}ic#%i;%i;%s", 0x1b, w, h, path);

Because the path is given, it won't work remotely.

find | xargs tycat should work but doesn't (one more bug to fix :D ).


Given that you can communicate two ways with terminals using escape codes, you might be able to run your remote shell with something like

  tyserver bash
and tyserver could then say replace escape-w-h-path with an escape-w-h-file-descriptor-n which would then allow the remote side to async query for the contents of fd-n with an escape-read-fd-n-bytes while you continue to interact with the terminal.


For me the point in using a terminal emulator over the GUI shell is that I don't have to move my right hand from the keyboard on to the mouse. This (Terminology) seems cool but all the extra features have to be accessible with obvious and non-obscure keyboard shortcuts. That would make it a very considerable choice as a main operating shell


Keyboard shortcuts should be remappable.


Under no circumstances should rich media be displayed in terminals. I am terrified of progress.


My feeling was the exact opposite. I have long been dreaming of rich media - especially video - playing within my terminal without having to awkwardly set screen splitting and resizing VLC to minimum.


A warning: apparently tycat will bypass pulseaudio sound settings and play things at the loudest possible volume. Make sure your /hardware/ volume controls are set sufficiently low before testing...

Also, it doesn't remember volume settings, so if you Ctrl-L to clear the screen and then scroll up to the audio element in the scrollback buffer, it will start playing at full volume again x_x


It looks cool and all, but I just want a Linux term than can log all output a file so I have a record of what I did. There doesn't seem to be any decent ones out there.


you use the /usr/bin/script program to record a transcript of a session. no term emulators that i know of provide this kind of feature natively though.


Having script run in your shell when it starts breaks X login sessions. Most terms do this actually, just no on Linux ironically. e.g. iTerm2, Terminal.app, Putty.


GNU Screen can also do logging, if that helps the OP.


Yeah, I use tmux though. I wish I had cycles to add it to tmux.


Still no truetype fonts huh? Looks like a more flashy Eterm.


The entire rendering engine behind terminology supports TrueType. See http://i.imgur.com/8Xga6K4.jpg


nice, that was one of the reasons I couldn't use eterm.


Terminology doesn't share any code with eterm.


Installation is a bit of a pain, at least on OS X. It complains of a bunch of packages missing. Consider having it available through macports.


How did you install it? I'm on OS X, too, and make throws this error: "make: * No targets specified and no makefile found. Stop.".


I wasn't able to. After a bit of hunting I realized the missing packages were on their site. Some of those make just failed, and on others it would appear as though make install went through but were not afaict installed. I gave up.


Try ./autogen.sh

That should bring you into configure. This still fails for me, but at least then one can see what needs to be installed or updated in order to satisfy configure.


i'd give all that away to instead have tab completing based on man page parameters descriptions or something.


As raylu says, zsh has that feature. Prezto (https://github.com/sorin-ionescu/prezto) makes it relatively easy to get started with zsh. Install it, enable any extra modules you want to load in .zpreztorc inside the “zstyle ':prezto:load' pmodule \” command, then update your .zshrc with your existing customizations from .bashrc and .bash_profile.



Thanks guys, didn't know about that!


And in case you're on a systems without such fancy shells as described in the other answers, the command "apropos [keywords]" will give a list of matching man pages.


Fish does that too: http://ridiculousfish.com/shell/

Now if someone could integrate that with bash-completions =)


Have you tried the bash-completion package? It adds a ton of context based tab completion stuff.


Really happy the Enlightenment project is still making cool stuff.

Remember completely wiping my computer as a teenager trying to get Enlightenment running on it. After a good 12 hours or so I got booted into it… then I learned what the term "winmodem" meant




Join us for AI Startup School this June 16-17 in San Francisco!

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

Search: