efn/c_clipboard.c

37 lines
871 B
C

void
c_copy(char *c, char **argv) {
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, char **argv) {
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);
}
}