6 void edit(struct vi
*vi
, char *name
)
11 GtkTextBuffer
*buffer
;
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);
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
);
27 static void write(struct vi
*vi
)
29 GtkTextIter start
, end
;
31 GtkTextBuffer
*buffer
;
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");
48 static int startswith(char *heystack
, char *needle
)
50 while (*needle
&& *needle
== *heystack
++)
55 void execcmd(struct vi
*vi
, char *cmd
)
57 if (!strcmp(":q", cmd
) || !strcmp(":q!", cmd
))
59 if (startswith(cmd
, ":e "))
61 if (!strcmp(":w", cmd
))
63 if (!strcmp(":wq", cmd
)) {
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';