summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-04-13 11:26:31 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-04-13 11:26:31 +0100
commit43c03ea412b7bc1391c028a24adda8e8533dafe5 (patch)
tree98e96a9b319770c972bb74b825505cd11f235559
parentbe5ed0e0363e8d07b527b8ce06b02315e2f17819 (diff)
parentba59033935d643f4a7f50da35c7cd033c5790252 (diff)
Merge remote-tracking branch 'jjthrash/next-prev-buffer'
-rw-r--r--src/commands.cc49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/commands.cc b/src/commands.cc
index 682e191b..bc0bbebb 100644
--- a/src/commands.cc
+++ b/src/commands.cc
@@ -375,6 +375,54 @@ const CommandDesc buffer_cmd = {
}
};
+Buffer& next_buffer(Context& context) {
+ auto& buffer_manager = BufferManager::instance();
+ if (buffer_manager.end()->get() == &context.buffer())
+ {
+ return **buffer_manager.begin();
+ }
+ else
+ {
+ bool found_current = false;
+ Buffer& current_buffer = context.buffer();
+ for (auto& it : buffer_manager)
+ {
+ Buffer& buffer = *it;
+ if (&buffer == &current_buffer)
+ {
+ found_current = true;
+ }
+ else if (found_current)
+ {
+ return buffer;
+ }
+ }
+
+ return **buffer_manager.begin();
+ }
+}
+
+const CommandDesc nextbuffer_cmd = {
+ "nextbuffer",
+ "nb",
+ "nextbuffer: move to the next buffer in the list",
+ no_params,
+ CommandFlags::None,
+ CommandHelper{},
+ CommandCompleter{},
+ [](const ParametersParser& parser, Context& context)
+ {
+ Buffer& nb = next_buffer(context);
+ BufferManager::instance().set_last_used_buffer(nb);
+
+ if (&nb != &context.buffer())
+ {
+ context.push_jump();
+ context.change_buffer(nb);
+ }
+ }
+};
+
template<bool force>
void delete_buffer(const ParametersParser& parser, Context& context)
{
@@ -1517,6 +1565,7 @@ void register_commands()
register_command(write_quit_cmd);
register_command(force_write_quit_cmd);
register_command(buffer_cmd);
+ register_command(nextbuffer_cmd);
register_command(delbuf_cmd);
register_command(force_delbuf_cmd);
register_command(namebuf_cmd);