Skip to content

Instantly share code, notes, and snippets.

@romiras
Created May 11, 2015 14:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save romiras/b89b9dc371c998402bd5 to your computer and use it in GitHub Desktop.
Save romiras/b89b9dc371c998402bd5 to your computer and use it in GitHub Desktop.
GTK+ pipe viewer
/*
Simple GTK+ pipe viewer
Contributors: Romiras
Based on paned.c
LICENSE: GNU GPLv3
*/
#include <stdio.h>
#include <unistd.h>
#include <gtk/gtk.h>
char input_buf[BUFSIZ];
void insert_text (GtkTextBuffer *buffer, FILE *file)
{
GtkTextIter iter;
int n;
gtk_text_buffer_get_iter_at_offset(buffer, &iter, 0);
while((n = read(0, input_buf, sizeof(input_buf))) != 0){
gtk_text_buffer_insert(buffer, &iter, input_buf, -1);
}
}
GtkWidget *create_text( void )
{
GtkWidget *scrolled_window;
GtkWidget *view;
GtkTextBuffer *buffer;
view = gtk_text_view_new ();
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (scrolled_window), view);
insert_text (buffer, stdin);
gtk_widget_show_all (scrolled_window);
return scrolled_window;
}
int main( int argc, char *argv[] )
{
GtkWidget *window;
GtkWidget *text;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Pipe text viewer");
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (gtk_main_quit), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
gtk_widget_set_size_request (GTK_WIDGET (window), 800, 600);
text = create_text ();
gtk_container_add (GTK_CONTAINER (window), text);
gtk_widget_show (text);
gtk_widget_show (window);
gtk_main ();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment