
Pymux: a tmux clone in pure Python - amjith
https://github.com/jonathanslenders/pymux
======
martanne
I'm all for experimenting with new ideas, however this seems to duplicate all
the conceptual shortcomings I see in tmux.

First of all, session support and terminal multiplexing are two distinct
features which shouldn't be intermingled. What ever happened to the Unix
principle of doing one thing and doing it well? My take on this problem is a
combination of abduco[1] and dvtm[2].

Next a built in copy mode seems wrong, there is no need to implement vi(m) or
emacs key bindings when you can make use of the complete editor. That is why
dvtm uses my vim clone vis[3] as a filter: the terminal (scroll back) content
is piped to $EDITOR and whatever the editor writes to stdout is kept in a
register to be pasted in other terminal windows.

Furthermore I think the completion menu should also be implemented as a
standalone tool (using e.g. dmenu or slmenu) as is done for the vis file open
dialog.

As a last point I consider Pyhton not really suitable for core system tools,
if you want something more expressible than C then something like Rust would
probably have been a better choice.

[1] [https://github.com/martanne/abduco](https://github.com/martanne/abduco)
[2] [https://github.com/martanne/dvtm](https://github.com/martanne/dvtm) [3]
[https://github.com/martanne/vis](https://github.com/martanne/vis)

~~~
winestock
>What ever happened to the Unix principle of doing one thing and doing it
well?

Rob Pike has the answer for you.
[http://interviews.slashdot.org/story/04/10/18/1153211/rob-
pi...](http://interviews.slashdot.org/story/04/10/18/1153211/rob-pike-
responds)

A Slashdot user named sczimme asked Pike this question: Given the nature of
current operating systems and applications, do you think the idea of "one tool
doing one job well" has been abandoned? If so, do you think a return to this
model would help bring some innovation back to software development?

Rob Pike's reply was: Those days are dead and gone and the eulogy was
delivered by Perl.

~~~
jeff_marshall
I think there is still some nuance available.

Perl is great for succinct syntax, which is something I admire (who doesn't
appreciate backtick for invoking another program?)

This same brevity is valuable in other contexts, but the challenge is in doing
it and understanding the implications. So long as such mechanisms don't
introduce hidden complexity (e.g. ';' in bash or it's equivalent), succint
syntax has my vote. Working in C at a low level and still having to deal with
integer overflow shows me that there is definately a middle ground w.r.t.
expressivity and details. I'd be happy to see progress in this area.

------
jonathan_s
(author). This is the first release of Pymux. It should be stable and usable
for daily work. However, don't hesitate to create a GitHub issue in case you
feel that it lacks some features/responsitivity or when you'd like to see
something different. Expect to see more progress in the coming months.
Jonathan

~~~
rogerbinns
Three things I care about are byobu, mouse support and tabs.

Being able to make byobu use this instead would make adoption really easy.
Hopefully just documentation and changing one byobu setting for a different
binary name somewhere.

Tmux has mouse support but it seems to require config settings (ie doesn't
happen by default). I'd rather mouse stuff just works out of the box with no
configuration and does the right thing.

I like tabs in the terminal (eg Gnome-Terminal on Linux). I believe there is a
Mac term emulator that can map the different screens to tabs. Byobu does help
a lot with this, but it would be nice if the terminal can do so too.

Thanks for allowing different viewers to see different screens at the same
time. tmux's behaviour of making every viewer see the same one at the same
time is highly annoying. (Yes I know there are ponderous workarounds, but
seriously?)

~~~
avn2109
+1 for out-of-box mouse event support. This would be the killer feature for
me.

Right now, configuring pass-through mouse events in Tmux on a Mac is a huge
production. StackOverflow has conflicting advice for each permutation of OSX
version + Tmux version, and a lot of stuff changed in the last couple versions
of each, such that old advice is entirely useless.

------
effenponderousa
There are way too many negative remarks about this project. It took a lot of
effort to share this project with the world. Presenting alternatives projects
and arguments against pymux is a direct assault on everything good about open
source, python, and our hacker news community.

~~~
wrenky
Presenting alternatives is a pretty open source idea, no? Thats exactly what
this project is doing for tmux! Its not an attack but a discussion point.

------
otiger
Does it or will it support 24bit / True Color terminals?

This is the only feature I miss with Tmux since I've been using Neovim with
24bit colors for a while.

~~~
jonathan_s
Yes, it does support true color. It's disabled by default, because not all
terminals support it, but if you want 24bit, do:

pymux --truecolor

~~~
xvilka
Thanks, added in my summary gist
[https://gist.github.com/XVilka/8346728#terminal-
multiplexers](https://gist.github.com/XVilka/8346728#terminal-multiplexers)

------
melted
What for? What benefits does the use of Python confer in this case?

~~~
paulddraper
README.md is a good place to check:

Compared to tmux

To some extend, pymux is a clone of tmux. This means that all the default
shortcuts are the same; the commands are the same or very similar, and even a
simple configuration file could be the same. (There are some small
incompatibilities.) However, we definitely don't intend to create a fully
compatible clone. Right now, only a subset of the command options that tmux
provides are supported.

Pymux implements a few improvements over tmux:

There is a completion menu for the command line. (At the bottom of the
screen.) The command line has fish-style suggestions. Both Emacs and Vi key
bindings for the command line and copy buffer are well developed, thanks to
all the effort we have put earlier in prompt_toolkit. Search in the copy
buffer is highlighted while searching. Every pane has its own titlebar. When
several clients are attached to the same session, each client can watch a
different window. When clients are watching different windows, every client
uses the full terminal size. Support for 24bit true color. (Disabled by
default: not all terminals support it. Use the --truecolor option at startup
or during attach in order to enable it.) About the performance:

Tmux is written in C, which is obviously faster than Python. This is
noticeable when applications generate a lot of output. Where tmux is able to
give fast real-time output for, for instance find / or yes, pymux will process
the output slightly slower, and in this case render the output only a few
times per second to the terminal. Usually, this should not be an issue. If it
is, Pypy should provide a significant speedup. The big advantage of using
Python and prompt_toolkit is that the implementation of new features becomes
very easy.

~~~
melted
That doesn't answer the question though. Why not just add all (or some) of the
aforementioned stuff to tmux? Tmux is an established, widely used piece of
software. Any improvements would be much more appreciated there.

~~~
ymse
You could say the same about screen vs tmux (or endless other software
clones). Projects like these help drive innovation on both sides. Competition,
if you like.

Besides, Pymux is Python while tmux is C. I'm sure you can appreciate that
adding a Python API to tmux would be non-trivial, both code-wise and
politically.

~~~
JustSomeNobody
But what's the innovation? Adding the python API?

~~~
toolz
Not everything has to innovate. I understand it would be more useful to you
and I if it did innovate, but there isn't some prereq for posting to hacker
news that your project has to be innovative.

I personally find this project interesting to see, although I won't be using
it.

~~~
JustSomeNobody
The comment I was replying to specifically mentioned it.

~~~
hueving
Spend the 30 seconds required to read the ancestor comment explaining what it
has enabled WRT prompt toolkit.

------
mitchtbaum
Can you save an environment like with [https://github.com/tmux-plugins/tmux-
resurrect](https://github.com/tmux-plugins/tmux-resurrect) ?

