I got myself interested in clipboards again. I kinda lost my interest
while trying to maintain gnome clipboard manager a few years ago. The
clipboard of X has lots of problems which I wanted to tackle by doing a
I didn't succeed for the simple reason that the X clipboard wasn't very accesible. For example to know when another xclient became the owner of the current clipboard, you had to make sure you (as a clipboard manager) had to own it at all times. By stealing it from the new owner and claiming ownership. Simply because the only event available was "you have lost the ownership". Well actually, I did succeed in creating it. But I didn't in making it actually being used. For the application itself was ugly clumbsy and needed to perform horribly ugly tricks to get it's job done.
The new xfixes extensions, however, make it possible to know about clipboard-owner changes more easily. Therefor some common clipboard manager tasks can be done more easily today. I'd like to create a common clipboard manager daemon that can be shared by different popular desktop environments.
Some of the tasks such a clipboard manager could do:
- Make the clipboard persist when an xclient who's owning the clipboard is about to die
- Make the clipboard persist between X sessions
- Create a clipboard-history
- Share clipboards between different hosts
I also want to tackle the problem that an xclient needs to first
deliver it's clipboard to the xserver when another xclient is
requesting it. While often both xclient processes are running on the
same host, the xserver isn't always. It makes sharing larger clipboards,
in such a situation, a very network intensive job. It causes lots of
network-traffic. And honestly, it's slow. In my humble opinion, it
would be better to utilise an Inter Process Communication mechanism. An
added advantage would be that sharing the clipboard between non xlib
applications and xlib applications could take place much more easily.
Today this is only possible while utilising a clipboard manager or an
xclient like xterm which will copy it to the console-window it's
displaying, as if it's being typed by the user. Imagine vi supporting
pasting the HTML-source behind the selected text of your Firefox
instance without the need for first going to the source of the website
you're viewing. Imagine two instances of vi copy and pasting to each
other in both directions without the need of temporary files (which is
more or less how mcedit does it). Imagine copy and pasting on the
console as easy as today on X.
One problem with implementing such an idea was the fact that there wasn't an IPC-system being liked by the programmers of the popular desktop environments. For example KDE preferred to use DCOP whereas GNOME preferred ORBit. Today, however, a new such mechanism is being designed just for the purpose of desktop inter process communication by the freedesktop.org organisation: DBUS.
We have all the ingredients to implement these idea's. I am working on a very first piece of testing code here. For non-programmers there's nothing interesting to see there at this moment.
There's a discussion about this going on at the xdg mailinglist of freedesktop.org.