Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdd vertical scrolling - ve - a minimal text editor (work in progress)
git clone git://src.adamsgaard.dk/ve
Log
Files
Refs
README
LICENSE
---
commit 65a91ff9999be9f55f6f57b1ca91afc65f8bdbf6
parent fd944c194e43e14db7bf4fdaf5c5fbc726683c5e
Author: Anders Damsgaard <[email protected]>
Date: Tue, 6 Aug 2019 12:29:55 +0200
Add vertical scrolling
Diffstat:
M byote.h | 1 +
M input.c | 2 +-
M output.c | 32 ++++++++++++++++++++---------…
M terminal.c | 1 +
4 files changed, 24 insertions(+), 12 deletions(-)
---
diff --git a/byote.h b/byote.h
t@@ -17,6 +17,7 @@ struct editor_config {
int screen_rows, screen_cols;
int num_rows;
eRow *row;
+ int row_offset;
struct termios orig_termios;
int status_height;
int mode; /* 0: normal, 1: insert, 2: visual */
diff --git a/input.c b/input.c
t@@ -14,7 +14,7 @@ editor_move_cursor(char key)
E.cursor_x--;
break;
case 'j':
- if (E.cursor_y < E.screen_rows - 1 - E.status_height)
+ if (E.cursor_y < E.num_rows - E.status_height)
E.cursor_y++;
break;
case 'k':
diff --git a/output.c b/output.c
t@@ -68,25 +68,32 @@ draw_status(struct abuf *ab)
}
}
+void
+editor_scroll()
+{
+ if (E.cursor_y < E.row_offset)
+ E.row_offset = E.cursor_y;
+ else if (E.cursor_y >= E.row_offset + E.screen_rows - E.status_height)
+ E.row_offset = E.cursor_y - E.screen_rows + 1;
+}
+
/* draw editor screen.
* show tilde characters after EOF, and show status on last line */
void
editor_draw_rows(struct abuf *ab)
{
- int y, len;
+ int y, len, file_row;
for (y = 0; y < E.screen_rows; ++y) {
-
- if (y < E.num_rows) {
- len = E.row[y].size;
+ file_row = y + E.row_offset;
+ if (y == E.screen_rows-1) {
+ draw_status(ab);
+ } else if (file_row < E.num_rows) {
+ len = E.row[file_row].size;
if (len > E.screen_cols)
len = E.screen_cols;
- ab_append(ab, E.row[y].chars, len);
-
+ ab_append(ab, E.row[file_row].chars, len);
} else {
- if (y == E.screen_rows-1)
- draw_status(ab);
- else
- ab_append(ab, "~", 1);
+ ab_append(ab, "~", 1);
}
ab_append(ab, "\x1b[K", 3); /* erase to end of line */
t@@ -104,6 +111,8 @@ editor_draw_rows(struct abuf *ab)
void
editor_refresh_screen()
{
+ editor_scroll();
+
struct abuf ab = ABUF_INIT;
ab_append(&ab, "\x1b[?25l", 6); /* hide cursor */
ab_append(&ab, "\x1b[H", 3); /* cursor to home */
t@@ -111,7 +120,8 @@ editor_refresh_screen()
editor_draw_rows(&ab);
char buf[32];
- snprintf(buf, sizeof(buf), "\x1b[%d;%dH", E.cursor_y+1, E.cursor_x+1);
+ snprintf(buf, sizeof(buf), "\x1b[%d;%dH", (E.cursor_y - E.row_offset)+…
+ E.cursor_x+1);
ab_append(&ab, buf, strlen(buf));
ab_append(&ab, "\x1b[?25h", 6); /* show cursor */
diff --git a/terminal.c b/terminal.c
t@@ -113,6 +113,7 @@ init_editor() {
E.mode = 0;
E.num_rows = 0;
E.row = NULL;
+ E.row_offset = 0;
if (get_window_size(&E.screen_rows, &E.screen_cols) == -1)
die("get_window_size");
}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.