tShow loaded text - ve - a minimal text editor (work in progress) | |
git clone git://src.adamsgaard.dk/ve | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 980ae0e805b66f9a92d2c36a920a1b6380e227a4 | |
parent 812ddc49f3f4312a59bf50452a2b5384160dd415 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Tue, 6 Aug 2019 11:58:40 +0200 | |
Show loaded text | |
Diffstat: | |
M byote.h | 8 ++++++++ | |
M input.c | 2 +- | |
A io.c | 17 +++++++++++++++++ | |
A io.h | 6 ++++++ | |
M main.c | 2 ++ | |
M output.c | 22 +++++++++++++++------- | |
M terminal.c | 1 + | |
7 files changed, 50 insertions(+), 8 deletions(-) | |
--- | |
diff --git a/byote.h b/byote.h | |
t@@ -6,9 +6,17 @@ | |
#define PROGNAME "byote" | |
#define VERSION "0.0.1" | |
+/* editor row: stores a row of text */ | |
+typedef struct eRow { | |
+ int size; | |
+ char *chars; | |
+} eRow; | |
+ | |
struct editor_config { | |
int cursor_x, cursor_y; | |
int screen_rows, screen_cols; | |
+ int num_rows; | |
+ eRow row; | |
struct termios orig_termios; | |
int status_height; | |
int mode; /* 0: normal, 1: insert, 2: visual */ | |
diff --git a/input.c b/input.c | |
t@@ -39,7 +39,7 @@ editor_process_keypress() | |
if (E.mode == 0) { /* normal mode */ | |
switch (c) { | |
case CTRL_KEY('q'): | |
- write(STDOUT_FILENO, "\x1b[2J", 4); | |
+ write(STDOUT_FILENO, "\x1b[2J", 4); /* clear s… | |
write(STDOUT_FILENO, "\x1b[H", 3); | |
exit(0); | |
break; | |
diff --git a/io.c b/io.c | |
t@@ -0,0 +1,17 @@ | |
+#include <stdlib.h> | |
+#include <sys/types.h> | |
+#include <string.h> | |
+#include "byote.h" | |
+ | |
+void | |
+file_open() | |
+{ | |
+ char *line = "Hello, world!"; | |
+ ssize_t linelen = 13; | |
+ | |
+ E.row.size = linelen; | |
+ E.row.chars = malloc(linelen + 1); | |
+ memcpy(E.row.chars, line, linelen); | |
+ E.row.chars[linelen] = '\0'; | |
+ E.num_rows = 1; | |
+} | |
diff --git a/io.h b/io.h | |
t@@ -0,0 +1,6 @@ | |
+#ifndef IO_H_ | |
+#define IO_H_ | |
+ | |
+void file_open(); | |
+ | |
+#endif | |
diff --git a/main.c b/main.c | |
t@@ -1,6 +1,7 @@ | |
#include "terminal.h" | |
#include "output.h" | |
#include "input.h" | |
+#include "io.h" | |
int | |
/* main(int argc, char* argv[]) */ | |
t@@ -8,6 +9,7 @@ main() | |
{ | |
enable_raw_mode(); | |
init_editor(); | |
+ file_open(); | |
while (1) { | |
editor_refresh_screen(); | |
editor_process_keypress(); | |
diff --git a/output.c b/output.c | |
t@@ -69,17 +69,25 @@ draw_status(struct abuf *ab) | |
} | |
/* draw editor screen. | |
- * show tilde characters after EOF */ | |
+ * show tilde characters after EOF, and show status on last line */ | |
void | |
editor_draw_rows(struct abuf *ab) | |
{ | |
- int y; | |
- for (y = -1; y < E.screen_rows; ++y) { | |
+ int y, len; | |
+ for (y = 0; y < E.screen_rows; ++y) { | |
- if (y == E.screen_rows-1) | |
- draw_status(ab); | |
- else | |
- ab_append(ab, "~", 1); | |
+ if (y < E.num_rows) { | |
+ len = E.row.size; | |
+ if (len > E.screen_cols) | |
+ len = E.screen_cols; | |
+ ab_append(ab, E.row.chars, len); | |
+ | |
+ } else { | |
+ if (y == E.screen_rows-1) | |
+ draw_status(ab); | |
+ else | |
+ ab_append(ab, "~", 1); | |
+ } | |
ab_append(ab, "\x1b[K", 3); /* erase to end of line */ | |
if (y < E.screen_rows - 1) | |
diff --git a/terminal.c b/terminal.c | |
t@@ -111,6 +111,7 @@ init_editor() { | |
E.cursor_x = 0; | |
E.cursor_y = 0; | |
E.mode = 0; | |
+ E.num_rows = 0; | |
if (get_window_size(&E.screen_rows, &E.screen_cols) == -1) | |
die("get_window_size"); | |
} |