4 #include <gdk/gdkkeysyms.h>
15 static void on_window_destroy(GtkWidget
*widget
, gpointer data
)
20 static void scroll(GtkTextView
*view
, float amount
)
24 GtkTextBuffer
*buffer
;
26 buffer
= gtk_text_view_get_buffer(view
);
27 gtk_text_view_get_visible_rect(view
, &rect
);
28 y
= rect
.y
+ amount
* rect
.height
;
29 gtk_text_view_get_iter_at_location(view
, &iter
, 0, y
);
30 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(view
), &iter
,
34 static gboolean
on_key_press(GtkWidget
*widget
, GdkEventKey
*event
,
37 struct txtwin
*tw
= data
;
38 switch(event
->keyval
) {
40 scroll(GTK_TEXT_VIEW(tw
->main
), 0.05);
43 scroll(GTK_TEXT_VIEW(tw
->main
), -0.05);
54 struct txtwin
*txtwin_alloc()
58 GtkTextBuffer
*buffer
;
59 struct txtwin
*tw
= xmalloc(sizeof(struct txtwin
));
60 memset(tw
, 0, sizeof(*tw
));
61 window
= gtk_window_new(GTK_WINDOW_TOPLEVEL
);
62 gtk_window_set_title(GTK_WINDOW(window
), "CNOOR");
63 g_signal_connect(G_OBJECT(window
), "destroy",
64 G_CALLBACK(on_window_destroy
), NULL
);
66 vbox
= gtk_vbox_new(FALSE
, 2);
67 gtk_container_add(GTK_CONTAINER(window
), vbox
);
69 /* create the textview */
70 tw
->main
= gtk_text_view_new();
71 gtk_box_pack_start(GTK_BOX(vbox
), tw
->main
, 1, 1, 0);
72 gtk_signal_connect(GTK_OBJECT(tw
->main
), "key_press_event",
73 GTK_SIGNAL_FUNC(on_key_press
), tw
);
74 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tw
->main
),
76 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(tw
->main
), FALSE
);
79 buffer
= gtk_text_view_get_buffer(GTK_TEXT_VIEW(tw
->main
));
81 /* create the minibuffer */
82 tw
->bar
= gtk_entry_new();
83 gtk_box_pack_start(GTK_BOX(vbox
), tw
->bar
, 0, 0, 0);
84 gtk_signal_connect(GTK_OBJECT(tw
->bar
), "key_press_event",
85 GTK_SIGNAL_FUNC(on_key_press
), tw
);
87 gtk_widget_show_all(window
);
91 void txtwin_free(struct txtwin
*tw
)
96 void txtwin_loop(struct txtwin
*tw
)
101 void txtwin_gtk_init(int argc
, char **argv
)
103 gtk_init(&argc
, &argv
);
106 static GtkTextBuffer
*txtwin_buffer(struct txtwin
*tw
)
108 return gtk_text_view_get_buffer(GTK_TEXT_VIEW(tw
->main
));
111 void txtwin_append(struct txtwin
*tw
, char *s
, char *tag
)
114 GtkTextBuffer
*buf
= txtwin_buffer(tw
);
115 gtk_text_buffer_get_end_iter(buf
, &iter
);
116 gtk_text_buffer_insert_with_tags_by_name(buf
, &iter
, s
, strlen(s
),
120 void txtwin_tag(struct txtwin
*tw
, char *name
, char *fg
, char *bg
, char *font
)
122 GtkTextBuffer
*buf
= txtwin_buffer(tw
);
123 gtk_text_buffer_create_tag(buf
, name
,