summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/bindings.c1
-rw-r--r--src/main/cmds.c34
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,