7 #include <gdk/gdkkeysyms.h>
11 static void on_window_destroy(GtkWidget
*widget
, gpointer data
)
16 static int is_real_key(int keyval
)
18 return isprint(keyval
) || keyval
== GDK_Return
;
21 static gboolean
on_key_press(GtkWidget
*widget
, GdkEventKey
*event
,
25 if (vi
->mode
== EM_EX
) {
26 if (ex_ctx(vi
, event
)) {
32 if (vi
->ctx
== rootctx
)
33 return vi
->ctx(vi
, event
);
34 if (is_real_key(event
->keyval
) && vi
->ctx(vi
, event
))
39 static void set_widget_font(GtkWidget
*widget
, char *font
)
41 PangoFontDescription
*desc
;
42 desc
= pango_font_description_from_string(font
);
43 gtk_widget_modify_font(widget
, desc
);
44 pango_font_description_free(desc
);
47 static void draw_editor(struct vi
*vi
, char *font
)
51 GtkTextBuffer
*buffer
;
52 window
= gtk_window_new(GTK_WINDOW_TOPLEVEL
);
53 gtk_window_set_title(GTK_WINDOW(window
), "Simple GTK VI");
54 g_signal_connect(G_OBJECT(window
), "destroy",
55 G_CALLBACK(on_window_destroy
), NULL
);
57 vbox
= gtk_vbox_new(FALSE
, 2);
58 gtk_container_add(GTK_CONTAINER(window
), vbox
);
60 /* create the textview */
61 vi
->view
= gtk_text_view_new();
62 gtk_box_pack_start(GTK_BOX(vbox
), vi
->view
, 1, 1, 0);
63 gtk_signal_connect(GTK_OBJECT(vi
->view
), "key_press_event",
64 GTK_SIGNAL_FUNC(on_key_press
), vi
);
65 set_widget_font(vi
->view
, font
);
66 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(vi
->view
),
68 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(vi
->view
), FALSE
);
71 buffer
= gtk_text_view_get_buffer(GTK_TEXT_VIEW(vi
->view
));
72 gtk_text_buffer_set_text(buffer
, "some text...\n", -1);
74 /* create the minibuffer */
75 vi
->entry
= gtk_entry_new();
76 gtk_box_pack_start(GTK_BOX(vbox
), vi
->entry
, 0, 0, 0);
77 gtk_signal_connect(GTK_OBJECT(vi
->entry
), "key_press_event",
78 GTK_SIGNAL_FUNC(on_key_press
), vi
);
79 set_widget_font(vi
->entry
, "DejaVuSansMono 9");
80 gtk_widget_set_size_request(window
, 800, 600);
81 gtk_window_set_default_size(GTK_WINDOW(window
), 1024, 768);
83 gtk_widget_show_all(window
);
87 "Usage: %s [ARGS]\n\n"
89 " -f font set text font\n"
93 static void print_help(int argc
, char **argv
)
95 printf(usage
, argv
[0]);
98 static char *version
=
100 "Copyright (C) 2009 Ali Gholami Rudi\n\n"
101 "You can redistribute and/or modify geevi under the terms\n"
102 "of GNU General Public License.\n";
104 static void print_version(int argc
, char **argv
)
106 printf(version
, GEEVI_VERSION
);
109 int main(int argc
, char *argv
[])
113 char *font
= "DejaVuSansMono 10";
114 memset(&vi
, 0, sizeof(vi
));
116 while ((c
= getopt(argc
, argv
, "vhf:")) != -1) {
119 print_version(argc
, argv
);
122 print_help(argc
, argv
);
129 fprintf(stderr
, "Bad command line option\n");
133 vi
.alt_im
= im_get("fa");
134 gtk_init(&argc
, &argv
);
135 draw_editor(&vi
, font
);
136 cursor_init(GTK_TEXT_VIEW(vi
.view
));
138 edit(&vi
, argv
[optind
]);