Introduction
Introduction Statistics Contact Development Disclaimer Help
tShow tabs with > symbols - ve - a minimal text editor (work in progress)
git clone git://src.adamsgaard.dk/ve
Log
Files
Refs
README
LICENSE
---
commit ec3976286cbc8ff16cf02429d735951bb80a29d4
parent d459a5c2e81581c2019aa6ef69c99bc08d8180f2
Author: Anders Damsgaard <[email protected]>
Date: Tue, 6 Aug 2019 13:46:18 +0200
Show tabs with > symbols
Diffstat:
M byote.h | 8 ++++++--
M io.c | 40 +++++++++++++++++++++++++++++…
M output.c | 4 ++--
3 files changed, 47 insertions(+), 5 deletions(-)
---
diff --git a/byote.h b/byote.h
t@@ -6,10 +6,14 @@
#define PROGNAME "byote"
#define VERSION "0.0.1"
+#define TAB_WIDTH 4
+
/* editor row: stores a row of text */
typedef struct eRow {
- int size;
- char *chars;
+ char *chars; /* text read from file */
+ char *rchars; /* text to render */
+ int size; /* length of chars */
+ int rsize; /* length of rchars */
} eRow;
struct editor_config {
diff --git a/io.c b/io.c
t@@ -10,7 +10,40 @@
#include "byote.h"
#include "terminal.h"
-void editor_append_row(char *s, size_t len)
+/* translate tabs before display */
+void
+editor_update_row(eRow* row)
+{
+ int j, idx, tabs;
+
+ free(row->rchars);
+ row->rchars = malloc(row->size + 1);
+
+ tabs = 0;
+ for (j=0; j<row->size; ++j)
+ if (row->chars[j] == '\t')
+ tabs++;
+
+ free(row->rchars);
+ row->rchars = malloc(row->size + tabs*(TAB_WIDTH - 1) + 1);
+
+ idx = 0;
+ for (j=0; j<row->size; ++j) {
+ if (row->chars[j] == '\t') {
+ row->rchars[idx++] = '>';
+ while (idx % TAB_WIDTH != 0)
+ row->rchars[idx++] = ' ';
+ } else {
+ row->rchars[idx++] = row->chars[j];
+ }
+ }
+ row->rchars[idx] = '\0';
+ row->rsize = idx;
+}
+
+/* add row to buffer */
+void
+editor_append_row(char *s, size_t len)
{
int i;
t@@ -20,6 +53,11 @@ void editor_append_row(char *s, size_t len)
E.row[i].chars = malloc(len + 1);
memcpy(E.row[i].chars, s, len);
E.row[i].chars[len] = '\0';
+
+ E.row[i].rsize = 0;
+ E.row[i].rchars = NULL;
+ editor_update_row(&E.row[i]);
+
++E.num_rows;
}
diff --git a/output.c b/output.c
t@@ -94,12 +94,12 @@ editor_draw_rows(struct abuf *ab)
if (y == E.screen_rows-1) {
draw_status(ab);
} else if (file_row < E.num_rows) {
- len = E.row[file_row].size - E.column_offset;
+ len = E.row[file_row].rsize - E.column_offset;
if (len < 0)
len = 0;
if (len > E.screen_columns)
len = E.screen_columns;
- ab_append(ab, &E.row[file_row].chars[E.column_offset],…
+ ab_append(ab, &E.row[file_row].rchars[E.column_offset]…
} else {
ab_append(ab, "~", 1);
}
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.