Clipboard command line utility

I’ve been doing a lot of Python for Google’s Highly Open Participation
contest lately but finally found the time to make a utility I thought
of a few weeks ago. Basically, it allows you to pipe to and from the
clipboard on the command line. Example:

[email protected]:~$ echo ‘ruby’ | clipboard
[email protected]:~$ clipboard
ruby
[email protected]:~$

You can also access it with the normal Control-C/Control-V shortcuts.

So, it’s a great concept, but not such a good implementation. First,
I doctored the output above. ruby-gnome2 seems to be outputting error
messages that I can’t get rid of, even after a Google search. This is
the real output:

[email protected]:~$ echo ‘ruby’ | clipboard
/usr/lib/ruby/1.8/glib2.rb: line 55
GLib-GObject-CRITICAL **:g_boxed_type_register_static: assertion
g_type_from_name (name) == 0' failed /usr/lib/ruby/1.8/glib2.rb: line 55 GLib-GObject-CRITICAL **:g_param_spec_boxed: assertionG_TYPE_IS_BOXED (boxed_type)’ failed
/usr/lib/ruby/1.8/glib2.rb: line 55
GLib-GObject-CRITICAL **:g_object_class_install_property: assertion
G_IS_PARAM_SPEC (pspec)' failed /usr/lib/ruby/1.8/glib2.rb: line 55 GLib-GObject-CRITICAL **:g_param_spec_boxed: assertionG_TYPE_IS_BOXED (boxed_type)’ failed
/usr/lib/ruby/1.8/glib2.rb: line 55
GLib-GObject-CRITICAL **:g_object_class_install_property: assertion
G_IS_PARAM_SPEC (pspec)' failed [email protected]:~$ clipboard /usr/lib/ruby/1.8/glib2.rb: line 55 GLib-GObject-CRITICAL **:g_boxed_type_register_static: assertiong_type_from_name (name) == 0’ failed
/usr/lib/ruby/1.8/glib2.rb: line 55
GLib-GObject-CRITICAL **:g_param_spec_boxed: assertion
G_TYPE_IS_BOXED (boxed_type)' failed /usr/lib/ruby/1.8/glib2.rb: line 55 GLib-GObject-CRITICAL **:g_object_class_install_property: assertionG_IS_PARAM_SPEC (pspec)’ failed
/usr/lib/ruby/1.8/glib2.rb: line 55
GLib-GObject-CRITICAL **:g_param_spec_boxed: assertion
G_TYPE_IS_BOXED (boxed_type)' failed /usr/lib/ruby/1.8/glib2.rb: line 55 GLib-GObject-CRITICAL **:g_object_class_install_property: assertionG_IS_PARAM_SPEC (pspec)’ failed
ruby
[email protected]:~$

I have tried doing something like this with stderr, stdout, and defout
with no luck:
require ‘stringio’

old_stderr = $stderr
$stderr = StringIO.new

require ‘gtk2’

$stderr = old_stderr

Any suggestions?

I have posted the full source code to http://ruby.pastebin.com/f5ef5f028

I would also like a better way to capture STDIN without blocking if
there is no text on STDIN.

Thanks,
Dan Finnie
[email protected]

On Jan 3, 2008 2:39 AM, dfinnie [email protected] wrote:

You can also access it with the normal Control-C/Control-V shortcuts.
/usr/lib/ruby/1.8/glib2.rb: line 55
G_IS_PARAM_SPEC (pspec)' failed /usr/lib/ruby/1.8/glib2.rb: line 55 GLib-GObject-CRITICAL **:g_param_spec_boxed: assertionG_TYPE_IS_BOXED (boxed_type)’ failed
/usr/lib/ruby/1.8/glib2.rb: line 55
GLib-GObject-CRITICAL **:g_object_class_install_property: assertion
`G_IS_PARAM_SPEC (pspec)’ failed
ruby
[email protected]:~$

I have seen these errors as well, you will have better luck if you
compile ruby-gnome2 directly from SVN.
Yeah, it has lots of dependencies, but probably you will have them.

I will love to play with code and see where it takes me!

$stderr = old_stderr
[email protected]


Let them talk of their oriental summer climes of everlasting
conservatories; give me the privilege of making my own summer with my
own coals.

http://gnufied.org

On Thu, Jan 03, 2008 at 06:09:58AM +0900, dfinnie wrote:

I’ve been doing a lot of Python for Google’s Highly Open Participation
contest lately but finally found the time to make a utility I thought
of a few weeks ago. Basically, it allows you to pipe to and from the
clipboard on the command line. Example:

[email protected]:~$ echo ‘ruby’ | clipboard
[email protected]:~$ clipboard
ruby
[email protected]:~$

I’m not saying you shouldn’t write this utility – I’ve been known to
duplicate existing utilities at times, too, sometimes with a good reason
and sometimes for less-good reasons. However . . .

Are you aware there’s a commonly available utility for this already
called xclip? I use it pretty extensively.

[email protected]:~> echo ‘ruby’|xclip
[email protected]:~> xclip -o
ruby
[email protected]:~> cat books.txt
Policy Made Easy
[email protected]:~> xclip books.txt
[email protected]:~> xclip -o
Policy Made Easy
[email protected]:~>

. . . et cetera.

FreeBSD:
[email protected]:/> portinstall xclip
(assuming you use portupgrade)

Debian:
[email protected]:/# apt-get install xclip

If you already knew about xclip, I’m curious why you are writing what
amounts to a Ruby replacement for it. Are you just practicing? Do you
want to rewrite a bunch of utilities in Ruby kinda like the Perl Power
Tools? Do you dislike the xclip licensing?

Feel free to refuse to cater to my idle curiosity. I’m just nosy that
way.

If you already knew about xclip, I’m curious why you are writing what
amounts to a Ruby replacement for it

There are probably a many reasons, I do not know why he wants to have
this,
but one thing which immediately comes to my mind is:

  • To have the same functionality available in pure ruby, without
    depending on
    some C program like xclip. :slight_smile:

I actually did not know about xclip, I wrote the utility to use it, not
as
an exercise. Thanks for the link.

Do you have any other favorite command line utilities?

Thanks,
Dan Finnie