Compare commits

...

4 Commits

Author SHA1 Message Date
bx 8f917f058c copy paste now functional 2022-04-02 22:36:17 +01:00
bx a06db018fa forgot to add clipboard.c last commit 2022-04-02 22:28:47 +01:00
bx 07d5fc4a8c added copy command 2022-04-02 22:28:26 +01:00
bx e708b994da fixed bug in unindent command 2022-04-02 22:08:42 +01:00
5 changed files with 45 additions and 1 deletions

35
c_clipboard.c 100644
View File

@ -0,0 +1,35 @@
void
c_copy(char *c) {
c += 2;
int start = atoi(c);
for(; *c != '\0' && *c != ' '; c++);
int end = atoi(c);
Row *cpy_start = b_getline(buffer, start);
if(cpy_start == NULL || b_getline(buffer, end) == NULL) {
puts("invalid line.");
return;
}
if (clipboard != NULL) {
b_truncate(clipboard);
free(clipboard);
}
clipboard = calloc(1, sizeof(Row));
Row *dest = clipboard;
for (int i = start; i <= end; i++) {
memcpy(dest->text, cpy_start->text, ROW_SIZE);
cpy_start = cpy_start->n;
dest = b_insert(dest);
}
}
void
c_paste(char *c) {
Row *line = b_getline(buffer, atoi(c + 2));
if (line == NULL) {puts("invalid line."); return; }
if (clipboard == NULL) {puts("empty clipboard"); return; }
for (Row *cb = clipboard; cb->n != NULL; cb = cb->n) {
line = b_insert(line);
memcpy(line->text, cb->text, ROW_SIZE);
}
}

View File

@ -18,6 +18,7 @@ c_unindent(char *c) {
for(int i = 0; i < ROW_SIZE - 1; i++) { for(int i = 0; i < ROW_SIZE - 1; i++) {
row->text[i] = row->text[i + 1]; row->text[i] = row->text[i + 1];
} }
row->text[ROW_SIZE] = 0; row->text[ROW_SIZE - 1] = 0;
} }

View File

@ -9,5 +9,9 @@ NULL,
['['] = c_unindent, ['['] = c_unindent,
[']'] = c_indent, [']'] = c_indent,
['d'] = c_delete, ['d'] = c_delete,
['c'] = c_copy,
['v'] = c_paste,
}; };

2
efn.c
View File

@ -22,5 +22,7 @@
#include "c_indent.c" #include "c_indent.c"
#include "c_delete.c" #include "c_delete.c"
#include "c_clipboard.c"
#include "commands.c" #include "commands.c"

View File

@ -1,3 +1,5 @@
Row init_row = { 0 }; Row init_row = { 0 };
Row *buffer = &init_row; Row *buffer = &init_row;
Row *clipboard = NULL;