tShow loaded text - ve - a minimal text editor (work in progress)
(HTM) git clone git://src.adamsgaard.dk/ve
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 980ae0e805b66f9a92d2c36a920a1b6380e227a4
(DIR) parent 812ddc49f3f4312a59bf50452a2b5384160dd415
(HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
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(-)
---
(DIR) 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 */
(DIR) 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 screen */
write(STDOUT_FILENO, "\x1b[H", 3);
exit(0);
break;
(DIR) 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;
+}
(DIR) diff --git a/io.h b/io.h
t@@ -0,0 +1,6 @@
+#ifndef IO_H_
+#define IO_H_
+
+void file_open();
+
+#endif
(DIR) 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();
(DIR) 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)
(DIR) 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");
}