diff --git a/c_delete.c b/c_delete.c new file mode 100644 index 0000000..ba49cbc --- /dev/null +++ b/c_delete.c @@ -0,0 +1,12 @@ +void +c_delete(char *c) { + Row *line = b_getline(buffer, atoi(c + 2)); + Row *prev_line = b_getline(buffer, atoi(c + 2) - 1); + if (line == NULL || prev_line == NULL) {puts ("invalid line"); return; } + + prev_line->n = line->n; + line->n->p = prev_line; + free(line); +} + + diff --git a/commands.c b/commands.c index 7be5b47..274c265 100644 --- a/commands.c +++ b/commands.c @@ -1,17 +1,15 @@ void (*commands[256])(char *) = { NULL, -['q'] = c_quit, ['O'] = c_open, -['P'] = c_print, ['w'] = c_writeline, -['q'] = NULL, ['Q'] = c_quit, ['S'] = c_save, ['i'] = c_insertline, -['p'] = NULL, ['p'] = c_print, -['P'] = NULL, -[']'] = c_indent, ['['] = c_unindent, +[']'] = c_indent, +['d'] = c_delete, + + diff --git a/efn.c b/efn.c index ae7b56b..d6e43f8 100644 --- a/efn.c +++ b/efn.c @@ -23,4 +23,6 @@ #include "c_save.c" #include "c_insertline.c" #include "c_indent.c" +#include "c_delete.c" + diff --git a/efn.h b/efn.h index 9d6775c..02e42ef 100644 --- a/efn.h +++ b/efn.h @@ -16,5 +16,7 @@ void c_save(char*); void c_insertline(char *); void c_indent(char *); void c_unindent(char *); +void c_delete(char *); +