diff options
| author | Albert Cervin <albert@acervin.com> | 2023-05-09 13:38:21 +0200 |
|---|---|---|
| committer | Albert Cervin <albert@acervin.com> | 2023-05-09 13:38:21 +0200 |
| commit | 1d8b5da24db92f9598cd6aeb59d283ae39024349 (patch) | |
| tree | f3b3017b6e7a48ebfd1ad359336172fdbfa4781b /src/main | |
| parent | 24cff0ec31970d5d57f61ba99ba7bfdda725cf94 (diff) | |
| download | dged-1d8b5da24db92f9598cd6aeb59d283ae39024349.tar.gz dged-1d8b5da24db92f9598cd6aeb59d283ae39024349.tar.xz dged-1d8b5da24db92f9598cd6aeb59d283ae39024349.zip | |
Start of buflist implementation
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/bindings.c | 1 | ||||
| -rw-r--r-- | src/main/cmds.c | 34 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/main/bindings.c b/src/main/bindings.c index 7ea75eb..ec608fd 100644 --- a/src/main/bindings.c +++ b/src/main/bindings.c @@ -83,6 +83,7 @@ struct keymap *register_bindings() { BINDING(Ctrl, 'F', "find-file"), BINDING(Ctrl, 'W', "write-file"), BINDING(None, 'b', "switch-buffer"), + BINDING(Ctrl, 'B', "buffer-list"), BINDING(None, '0', "window-close"), BINDING(None, '1', "window-close-others"), diff --git a/src/main/cmds.c b/src/main/cmds.c index 4cbb00f..63a7e01 100644 --- a/src/main/cmds.c +++ b/src/main/cmds.c @@ -269,6 +269,39 @@ int32_t timers(struct command_ctx ctx, int argc, const char *argv[]) { return 0; } +void buffer_to_list_line(struct buffer *buffer, void *userdata) { + struct buffer_view *listbuf = (struct buffer_view *)userdata; + char buf[1024]; + size_t written = snprintf(buf, 1024, "%-16s %s\n", buffer->name, + buffer->filename != NULL ? buffer->filename : "<no-file>"); + + if (written > 0) { + buffer_add_text(listbuf, (uint8_t *)buf, written); + } +} + +int32_t buffer_list(struct command_ctx ctx, int argc, const char *argv[]) { + struct buffer *b = buffers_find(ctx.buffers, "buffers"); + if (b == NULL) { + b = buffers_add(ctx.buffers, buffer_create("buffers")); + } + + struct window *new_window_a, *new_window_b; + window_split(ctx.active_window, &new_window_a, &new_window_b); + + window_set_buffer(new_window_b, b); + + struct buffer_view *bv = window_buffer_view(new_window_b); + buffer_set_readonly(b, false); + buffer_clear(bv); + buffers_for_each(ctx.buffers, buffer_to_list_line, bv); + + buffer_goto_beginning(bv); + buffer_set_readonly(b, true); + + return 0; +} + void register_global_commands(struct commands *commands, void (*terminate_cb)()) { @@ -281,6 +314,7 @@ void register_global_commands(struct commands *commands, {.name = "find-next", .fn = find, .userdata = "forward"}, {.name = "find-prev", .fn = find, .userdata = "backward"}, {.name = "timers", .fn = timers}, + {.name = "buffer-list", .fn = buffer_list}, {.name = "exit", .fn = exit_editor, .userdata = terminate_cb}}; register_commands(commands, global_commands, |
