Tilix: A tiling terminal emulator
gnunn1.github.io
gnunn1.github.io
Interestingly though, what I finally realized is there is a huge amount of value in ditching both and switching over to tmux. Tmux does everything that tilix does but is completely independent of the underlying terminal. What I finally realized is that tmux is not just about persistent sessions - the screen/pane management along with completely keyboard-based navigation and history/copy/paste commands just blows the tiling terminals away.
What I think you're missing with just nvim is the tmux scripting capabilities and of course the session management.
It's pretty easy to script up a tailored set of tmux sessions/windows/panes. I do this on initial login. Other solutions like tmuxinator/tmux-resurrect exist to automate this setup, if you don't want to script it.
After reading your comment, I get the impression that this is not the case.
It is interesting to imagine alternative universe where we instead would have advanced enough OS level window management that would allow deeper integration to underlying applications. E.g. something like OS level tree style tab -like window-management might be neat, especially if combined with powerful tiling management.
My primary window-organization tools are: i3 virtual desktops, web-browser, emacs, and tmux. i3 virtual desktops are named by task/workflow: I have one desktop for project management, one for emacs, one for terminals for one project, one for terminals for another project, one for work-related communication, and one for personal communication. Emacs does its thing and makes great use of it, but its spectacular profusion of buffers and its insane customization never pollutes the rest of my WM because it's contained within emacs. The browser desktops group related tabs, but they go one further and let me put tabs side-by-side without multiple windows of project management polluting my global window list. And so on and so forth.
Allowing each tool to specialize information management for its particular use case gives me much better performance overall. It's definitely specialized and idiosyncractic; I would not want to make everyone deal with it. But for me, doing this 8+ hours a day: every time I'm forced to work without that hierarchy and that specialization, I can tell you that the effort is worth it.
I've decided to only use a tiling WM for all window/pane management, and stop using anything else, as much as possible.
So I abandoned Gnome3->Terminator->tmux in favor of bspwm->urxvt. I don't lose the functionality that I had before (tiling terminals), and I'm using much lighter-weight tools and less of them. I love it.
Oh, and as for editor tiling... Yeah, I still have to tile buffers in Vim/Emacs, but only because I prefer the editing workflow in that case (all my context / session / environment remains the same). I suppose I could have lightweight clients, but I haven't really looked into it.
Most tiling WM's are essentially 'tree style tabs' but for all windows. You organize tiles and children of a tree, in i3 you can also set tiles to stack so you get a tab-like appearance to a tree.
I personally like the current situation because I can group related work.
Huh? How is this any different in other operating systems?
It doesn't solve frames in Emacs, or tmux/screen per se, but for tmux at least iTerm2 on OS X shows that doing a terminal emulator that integrates with it certainly is possible. For my part, my screen usage is very strictly "full screen" (or full terminal, I guess) so it flows relatively smoothly.
Sometimes it is annoying - splitting emacs frame and resizing it the same way as my tiles would be nice. Other times it is nice to be able to treat them on two separate levels. I'm not sure doing entirely away with the two level nature of that would be ideal.
Only issue I am having is sorting of opened web pages. If you using only few web pages per virtual desktop it can be useful. With tabs in chrome you can move whole chrome to another tile or desktop. But if you have 20 qutebrowser windows it takes to long.
I did try this for urxvt and it was quite efficient. No idea whether it will run well with hundreds of e.g. emacs buffers.
At least, with GridSelect [1] the selection mechanism scales well to hundreds of items.
[1] https://hackage.haskell.org/package/xmonad-contrib-0.13/docs...
https://code.launchpad.net/~andfagiani/terminator/tmux
And here's the discussion of it:
https://bugs.launchpad.net/terminator/+bug/1301605
You can see in comment 18 how to use it.
Here are the bindings I went for so that it feels more like screen ( what I am used to ), plus being able to use vi like commands for copy + paste:
vim ~/.tmux.conf
setw -g mode-keys vi
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
unbind C-b
set -g prefix C-a
bind C-a send-prefix
Split screen vertically ctrl+a %
Split screen horizontally ctrl+a "
Copy and paste works like... ctrl+a escape - copy mode
v - enter visual mode to highlight
y - capture text
ctrl+a p - paste into terminal
Seems you can use ctrl+a (release) and arrow keys to flip between panes.Plus ctrl+a left/right to adjust pane size.
Using copy mode to navigate the scroll buffer is also a useful feature - you can really cut down the use of a mouse in the terminal.
https://github.com/mtl/tmux-modality
I need to iron my workflow out a little bit though as all the modes (especially when you have vim within tmux modality ) can be a little confusing.
Edit: for vertical panes ctrl+shift selection works on gnome-terminal at least.
1. Enable pane zoom (<prefix> z)
2. Enter copy mode (<prefix> [)
3. Select and copy text
You can also look into the tmux-yank [0] plugin, which copies to the native system clipboard.
Given that the whole point of the tool is that it's a tiling terminal app, I'd appreciate a few more screenshots on the page or in the readme showing the different ways it lets me organise my terminals.
I'm a big fan of Gnome's design with the unified title and toolbars. For a terminal app such as this, however, the fat title bar combined with the tab bar make for a fairly large and heavy looking header. I wish it was a little more compact.
The only reason I ever look at the dock is to open minimized windows, and even for that I usually opt for the 'see all windows of current app' gesture.
That said, the dock is very useful for most tech-illiterate people I know.
I'm the command-line and use-vim-keybindings-for-all-the-things type person, which often clashes with all the reasons why I'm an Apple fan (slightly abashed these days) and fascinated with UX.
I actually often find myself discovering interesting, hidden OSX 'solutions' to things even now, as a power user, and after using it for more than five years. I never discovered them before because my 'default' would be to go to iTerm2 for a quicker approach.
For example, I find myself switching between Finder and iTerm2(+zsh) quite regularly when my need is to navigate folders/directories and/or quickly CRUD files. And yet, I was also fully aware of the OSX Finder keyboard shortcut 'SHIFT-CMD-G' to jump to a directory from within Finder. I never really used it.
Just last week I decided to use the Finder keyboard shortcut more regularly, and I feel the end result is a boost in productivity, however tiny and ultimately insignificant it may be. There's a certain friction between using the command-line and OSX' GUI that just disappeared for many of my common use cases (CRUD files and directories with sublime text or vim).
Exploring iTerm's extra features (toolbelt, profiles), but also discovering tmux and how iTerm integrates with it, are similar 'tucked away' things that 'fuse' power-user and normal-user interfaces, and that I only discovered in the past months.
I'm not sure why I apparently feel drawn to making a strict dichotomy between CLI and OSX usage that causes me to be blind to these in-between cases, but thanks for reminding me. I'd never have thought to use the 'recent files' lists in the dock. Just a cursory glance makes me suspect I'll be using it quite a bit going forward!
In any case, they aren't interested in providing choice for users with different tastes. Either you like what they give you, or you should go elsewhere.
I went elsewhere.
XFCE is still pretty configurable.
> What’s more, today’s Nautilus compares favourably with file managers from other operating systems/desktop environments. KDE’s Dolphin uses 109 vertical pixels of chrome compared with Nautilus’s 48. Finder in the upcoming OS X version seems to have around 75 pixels.
I wrote some quick notes about it here: https://www.bidon.ca/fr/random/2017-02-25-customizing-gnome-...
It also has an inspector, so you can find the right class name as you would when doing CSS in a browser.
I have to admit that I also tried developing an extension (https://github.com/mlutfy/hidetopbar), which I found hard, but someone else took over maintenance and he's been doing a really good job. Has a few active contributors too.
(after 10 years on fvwm, I re-tested every w-m out there, before giving up and adopting Gnome3.. happy since)
It used to be called something else, but a company with the same name made a copyright complaint.
The "problem" I'm having with the xfce terminal is that it supports tabs. It basically has too much features for me. And being the idiot that I am, I make use of them. Even though I'd actually prefer not to, so that instead I'll be using the features provided by my window manager.
It's a silly problem, I know. But the question is:
What is a performant customizable terminal that is dead simple? No tabs. No tiles. Just a single terminal window.
Or maybe I should just unbind the create new tab shortcut.
Like, People who want to run every session in tmux (but don't care about using a tiling wm) don't need scrolling, tabs, or splits. People who want to run their terminals in i3 also don't want tabs or splits, but they do need scroll or else they have to duplicate effort on both sides just to get scrolling.
http://www.pleyades.net/david/projects/sakura
[ed: That said, I now notice that Tilix appears to be written in D, which should point to it avoiding a few C/C++ pitfalls. ]
Protip: Use the shortcuts wisely, it makes it much better to use. I personally use + and - on the keypad for new tab/close tab and End to hide/unhide.
My one big issue is this bug (https://github.com/Guake/guake/issues/45) which has an air of the user being wrong and the terminal being fine.
There are a few other nitpicks like the lack of search (no clue if other terminals have search, but it is a feature I would kill for).
I work on website crawlers for fun and being able to search terminal output is something I'd die for. :)
Here's the code: https://github.com/gnunn1/tilix/
Another cool trick is to use zero trust mentality and get the secrets to the box without having to copy/paste/type/view them through your terminal emulator.
It's using fairly well known library (VTE), it's open source so it's not that easy to sneak something in. Situations when your terminal emulator (it's not a program facing Internet) can be compromised: 1. you have something malicious on your computer, 2. you have something malicious on you server. But imho in both situations you already have bigger problems than your terminal emulator...
I frequently see HN comments question security of a number of applications, none of which are as critical an interface with production servers as the lowly terminal. For example, a recent replacement for ls was highlighted on HN, and there were questions of whether one would want to install use an untested application due to security concerns. In the case a terminal, it seems to be even a bigger potential issue since it is what one frequently types passwords in for sudo. I am quite surprised at the tone of comments.
[0] https://gnometerminator.blogspot.nl/p/introduction.html?
What's allowing the pretty path view instead of my ugly ascii "~/blah1/blah2$ ?
I've since switched to the fish shell (https://fishshell.com/) which has this built in.
It doesn't matter which shell you use, all the common ones have some kind of plugins or extensions for that.
In Terminator you can create more than one group to broadcast input to, and it can be across multiple tabs.