geevi: set window default size
[geevi.git] / geevi.c
blob612fe908e4f73ee4fa3304653c4e10b89f944393
1 #include <ctype.h>
2 #include <getopt.h>
3 #include <limits.h>
4 #include <string.h>
5 #include <stdlib.h>
6 #include <gtk/gtk.h>
7 #include <gdk/gdkkeysyms.h>
8 #include "geevi.h"
9 #include "im.h"
11 static void on_window_destroy(GtkWidget *widget, gpointer data)
13 gtk_main_quit();
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,
22 gpointer data)
24 struct vi *vi = data;
25 if (vi->mode == EM_EX) {
26 if (ex_ctx(vi, event)) {
27 vi->ctx = rootctx;
28 return 1;
30 return 0;
32 if (vi->ctx == rootctx)
33 return vi->ctx(vi, event);
34 if (is_real_key(event->keyval) && vi->ctx(vi, event))
35 vi->ctx = rootctx;
36 return TRUE;
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)
49 GtkWidget *window;
50 GtkWidget *vbox;
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),
67 GTK_WRAP_CHAR);
68 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(vi->view), FALSE);
70 /* write something */
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);
86 static char *usage =
87 "Usage: %s [ARGS]\n\n"
88 "Arguments:\n"
89 " -f font set text font\n"
90 " -h show this\n"
91 " -v show version\n";
93 static void print_help(int argc, char **argv)
95 printf(usage, argv[0]);
98 static char *version =
99 "GEEVI %s\n"
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[])
111 struct vi vi;
112 int c;
113 char *font = "DejaVuSansMono 10";
114 memset(&vi, 0, sizeof(vi));
115 vi.ctx = rootctx;
116 while ((c = getopt(argc, argv, "vhf:")) != -1) {
117 switch (c) {
118 case 'v':
119 print_version(argc, argv);
120 return 0;
121 case 'h':
122 print_help(argc, argv);
123 return 0;
124 case 'f':
125 font = optarg;
126 break;
127 case '?':
128 default:
129 fprintf(stderr, "Bad command line option\n");
130 return 1;
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));
137 if (optind < argc) {
138 edit(&vi, argv[optind]);
140 gtk_main();
141 return 0;