pbcopy on Linux (using GTK+)
というわけで、書いてみた。
pbcopy.c
#include <gtk/gtk.h> #include <gio/gio.h> #include <gio/gunixinputstream.h> int main(int argc, char *argv[]) { gtk_init(&argc, &argv); GInputStream *in = g_unix_input_stream_new(0, FALSE); gchar buf[1024]; gssize read_bytes; GError *error; GString *str = g_string_new(""); while ((read_bytes = g_input_stream_read(in, buf, sizeof(buf), NULL, &error)) > 0) { if (read_bytes == -1) { g_printerr("g_input_stream_read: %s\n", error->message); g_clear_error(&error); } else { buf[read_bytes] = '\0'; g_string_append(str, buf); } } GtkClipboard *pb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); gtk_clipboard_set_text(pb, str->str, str->len); gtk_clipboard_store(pb); g_string_free(str, TRUE); return 0; }
こんなかんじ。
GTK+ とか GLib とかほとんど使ったことないので、リファレンスを見つついつものパッチワーク。
動くからいっか。
参考
http://library.gnome.org/devel/gtk/stable/gtk-Clipboards.html
GUnixInputStream: GIO Reference Manual
GInputStream: GIO Reference Manual