geevi: set window default size
[geevi.git] / ex.c
blobad18fb1ef0d27e724031d2a6c06ae6456382ada7
1 #include <stdlib.h>
2 #include <string.h>
3 #include <gtk/gtk.h>
4 #include "geevi.h"
6 void edit(struct vi *vi, char *name)
8 char *text;
9 size_t length;
10 GtkTextIter iter;
11 GtkTextBuffer *buffer;
12 if (!*name)
13 return;
14 strcpy(vi->filename, name);
15 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(vi->view));
16 if (!g_file_get_contents(name, &text, &length, NULL)) {
17 fprintf(stderr, "could not open file\n");
18 gtk_text_buffer_set_text(buffer, "", -1);
19 return;
21 gtk_text_buffer_set_text(buffer, text, -1);
22 gtk_text_buffer_get_start_iter(buffer, &iter);
23 cursor_place(GTK_TEXT_VIEW(vi->view), &iter);
24 g_free(text);
27 static void write(struct vi *vi)
29 GtkTextIter start, end;
30 char *text;
31 GtkTextBuffer *buffer;
32 if (!*vi->filename)
33 return;
34 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(vi->view));
35 gtk_text_buffer_get_start_iter(buffer, &start);
36 gtk_text_buffer_get_end_iter(buffer, &end);
37 text = gtk_text_buffer_get_text(buffer, &start, &end, TRUE);
38 if (!g_file_set_contents(vi->filename, text, strlen(text), NULL))
39 fprintf(stderr, "could not write file\n");
40 g_free(text);
43 static void quit()
45 gtk_main_quit();
48 static int startswith(char *heystack, char *needle)
50 while (*needle && *needle == *heystack++)
51 needle++;
52 return !*needle;
55 void execcmd(struct vi *vi, char *cmd)
57 if (!strcmp(":q", cmd) || !strcmp(":q!", cmd))
58 quit();
59 if (startswith(cmd, ":e "))
60 edit(vi, cmd + 3);
61 if (!strcmp(":w", cmd))
62 write(vi);
63 if (!strcmp(":wq", cmd)) {
64 write(vi);
65 quit();
67 if (startswith(cmd, "/") || startswith(cmd, "?")) {
68 char *keyword = cmd + 1;
69 strncpy(vi->word, keyword, MAX_COMMAND_LENGTH);
70 vi->word[MAX_COMMAND_LENGTH - 1] = '\0';