summaryrefslogtreecommitdiff
path: root/src/buffer.h
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2023-01-31 00:07:54 +0100
committerAlbert Cervin <albert@acervin.com>2023-01-31 00:12:56 +0100
commit689ceeca3d25cb2f738a6c52776c53912abb797f (patch)
treed61a96445beccae2c5b99c7aa9dee77738a14379 /src/buffer.h
parentf90d5e1f07fdc9dea7c24b11107049b613a5be7a (diff)
downloaddged-689ceeca3d25cb2f738a6c52776c53912abb797f.tar.gz
dged-689ceeca3d25cb2f738a6c52776c53912abb797f.tar.xz
dged-689ceeca3d25cb2f738a6c52776c53912abb797f.zip
Implement mark and copy-paste
Also fix some memory leaks
Diffstat (limited to 'src/buffer.h')
-rw-r--r--src/buffer.h33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/buffer.h b/src/buffer.h
index a565a6e..14389e7 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -74,6 +74,11 @@ struct update_hooks {
uint32_t nhooks;
};
+struct buffer_location {
+ uint32_t line;
+ uint32_t col;
+};
+
/**
* A buffer of text that can be modified, read from and written to disk.
*
@@ -81,13 +86,18 @@ struct update_hooks {
* implemented on top of it.
*/
struct buffer {
+
+ /** Buffer name */
char *name;
+ /** Associated filename, this is where the buffer will be saved to */
char *filename;
+ /** Text data structure */
struct text *text;
- uint32_t dot_line;
- uint32_t dot_col;
+ struct buffer_location dot;
+ struct buffer_location mark;
+ bool mark_set;
// local keymaps
struct keymap *keymaps;
@@ -124,6 +134,15 @@ void buffer_beginning_of_line(struct buffer *buffer);
void buffer_newline(struct buffer *buffer);
void buffer_indent(struct buffer *buffer);
+void buffer_set_mark(struct buffer *buffer);
+void buffer_clear_mark(struct buffer *buffer);
+void buffer_set_mark_at(struct buffer *buffer, uint32_t line, uint32_t col);
+
+void buffer_copy(struct buffer *buffer);
+void buffer_paste(struct buffer *buffer);
+void buffer_paste_older(struct buffer *buffer);
+void buffer_cut(struct buffer *buffer);
+
struct text_chunk buffer_get_line(struct buffer *buffer, uint32_t line);
uint32_t buffer_add_update_hook(struct buffer *buffer, update_hook_cb hook,
@@ -158,6 +177,11 @@ BUFFER_WRAPCMD(buffer_beginning_of_line);
BUFFER_WRAPCMD(buffer_newline);
BUFFER_WRAPCMD(buffer_indent);
BUFFER_WRAPCMD(buffer_to_file);
+BUFFER_WRAPCMD(buffer_set_mark);
+BUFFER_WRAPCMD(buffer_clear_mark);
+BUFFER_WRAPCMD(buffer_copy);
+BUFFER_WRAPCMD(buffer_cut);
+BUFFER_WRAPCMD(buffer_paste);
static struct command BUFFER_COMMANDS[] = {
{.name = "kill-line", .fn = buffer_kill_line_cmd},
@@ -174,4 +198,9 @@ static struct command BUFFER_COMMANDS[] = {
{.name = "newline", .fn = buffer_newline_cmd},
{.name = "indent", .fn = buffer_indent_cmd},
{.name = "buffer-write-to-file", .fn = buffer_to_file_cmd},
+ {.name = "set-mark", .fn = buffer_set_mark_cmd},
+ {.name = "clear-mark", .fn = buffer_clear_mark_cmd},
+ {.name = "copy", .fn = buffer_copy_cmd},
+ {.name = "cut", .fn = buffer_cut_cmd},
+ {.name = "paste", .fn = buffer_paste_cmd},
};