summaryrefslogtreecommitdiff
path: root/src/main/cmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/cmds.c')
-rw-r--r--src/main/cmds.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/main/cmds.c b/src/main/cmds.c
index 6505e01..989f28e 100644
--- a/src/main/cmds.c
+++ b/src/main/cmds.c
@@ -398,6 +398,23 @@ int32_t buflist_save_cmd(struct command_ctx ctx, int argc, const char *argv[]) {
return 0;
}
+static void save_buffer(struct buffer *buffer, void *userdata) {
+ (void)userdata;
+ if (buffer->filename == NULL || !buffer->modified) {
+ return;
+ }
+
+ buffer_to_file(buffer);
+}
+
+int32_t buflist_save_all_cmd(struct command_ctx ctx, int argc,
+ const char *argv[]) {
+ (void)argc;
+ (void)argv;
+ buffers_for_each(ctx.buffers, save_buffer, NULL);
+ return 0;
+}
+
int32_t buffer_list(struct command_ctx ctx, int argc, const char *argv[]) {
(void)argc;
(void)argv;
@@ -433,11 +450,17 @@ int32_t buffer_list(struct command_ctx ctx, int argc, const char *argv[]) {
.fn = buflist_save_cmd,
};
+ static struct command buflist_save_all = {
+ .name = "buflist-save-all",
+ .fn = buflist_save_all_cmd,
+ };
+
struct binding bindings[] = {
ANONYMOUS_BINDING(ENTER, &buflist_visit),
ANONYMOUS_BINDING(None, 'k', &buflist_kill),
ANONYMOUS_BINDING(None, 'q', &buflist_close),
ANONYMOUS_BINDING(None, 's', &buflist_save),
+ ANONYMOUS_BINDING(None, 'S', &buflist_save_all),
ANONYMOUS_BINDING(None, 'g', &buflist_refresh_command),
};
struct keymap km = keymap_create("buflist", 8);