summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2022-12-25 17:57:59 +0100
committerSébastien Helleu <flashcode@flashtux.org>2022-12-25 17:57:59 +0100
commit574a4c88346dacf1945fad827d90843c66e4e1a6 (patch)
tree2ed6c83816667040b3568927790dc913067189d2
parentc9796a31415dee3ac3745f6b4c0792d7a9da313b (diff)
downloadweechat-574a4c88346dacf1945fad827d90843c66e4e1a6.zip
core: add function gui_buffer_jump_last_visible_number
-rw-r--r--src/core/wee-command.c14
-rw-r--r--src/gui/gui-buffer.c27
-rw-r--r--src/gui/gui-buffer.h1
-rw-r--r--tests/unit/gui/test-gui-buffer.cpp10
4 files changed, 40 insertions, 12 deletions
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index e59a91f7f..449d94442 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -1358,17 +1358,7 @@ COMMAND_CALLBACK(buffer)
{
if (strcmp (argv[1], "+") == 0)
{
- /* search last non-hidden buffer */
- for (ptr_buffer = last_gui_buffer; ptr_buffer;
- ptr_buffer = ptr_buffer->prev_buffer)
- {
- if (!ptr_buffer->hidden)
- break;
- }
- number = (ptr_buffer) ?
- ptr_buffer->number : ((last_gui_buffer) ? last_gui_buffer->number : -1);
- if (number > 0)
- gui_buffer_switch_by_number (gui_current_window, number);
+ gui_buffer_jump_last_visible_number (gui_current_window);
}
else
{
@@ -3412,7 +3402,7 @@ COMMAND_CALLBACK(input)
gui_buffer_jump_smart (gui_current_window);
/* since WeeChat 1.0: "/buffer +" */
else if (string_strcasecmp (argv[1], "jump_last_buffer") == 0)
- (void) input_data (buffer, "/buffer +", NULL);
+ gui_buffer_jump_last_visible_number (gui_current_window);
/* since WeeChat 3.8: "/buffer jump last_displayed" */
else if (string_strcasecmp (argv[1], "jump_last_buffer_displayed") == 0)
gui_buffer_jump_last_buffer_displayed (gui_current_window);
diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c
index 9e32c7f23..e9fca3933 100644
--- a/src/gui/gui-buffer.c
+++ b/src/gui/gui-buffer.c
@@ -4494,6 +4494,33 @@ gui_buffer_jump_smart (struct t_gui_window *window)
}
/*
+ * Jumps to last buffer that is visible (not hidden).
+ */
+
+void
+gui_buffer_jump_last_visible_number (struct t_gui_window *window)
+{
+ struct t_gui_buffer *ptr_buffer;
+ int number;
+
+ if (!window)
+ return;
+
+ /* search last non-hidden buffer */
+ for (ptr_buffer = last_gui_buffer; ptr_buffer;
+ ptr_buffer = ptr_buffer->prev_buffer)
+ {
+ if (!ptr_buffer->hidden)
+ break;
+ }
+
+ number = (ptr_buffer) ?
+ ptr_buffer->number : ((last_gui_buffer) ? last_gui_buffer->number : -1);
+ if (number > 0)
+ gui_buffer_switch_by_number (gui_current_window, number);
+}
+
+/*
* Jumps to last buffer displayed (before last jump to a buffer).
*/
diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h
index 9fc329929..0dc1c3b6b 100644
--- a/src/gui/gui-buffer.h
+++ b/src/gui/gui-buffer.h
@@ -386,6 +386,7 @@ extern struct t_gui_buffer_visited *gui_buffer_visited_add (struct t_gui_buffer
extern int gui_buffer_visited_get_index_previous ();
extern int gui_buffer_visited_get_index_next ();
extern void gui_buffer_jump_smart (struct t_gui_window *window);
+extern void gui_buffer_jump_last_visible_number (struct t_gui_window *window);
extern void gui_buffer_jump_last_buffer_displayed (struct t_gui_window *window);
extern void gui_buffer_jump_previously_visited_buffer (struct t_gui_window *window);
extern void gui_buffer_jump_next_visited_buffer (struct t_gui_window *window);
diff --git a/tests/unit/gui/test-gui-buffer.cpp b/tests/unit/gui/test-gui-buffer.cpp
index 4c056cfe3..7f86c33c8 100644
--- a/tests/unit/gui/test-gui-buffer.cpp
+++ b/tests/unit/gui/test-gui-buffer.cpp
@@ -1399,6 +1399,16 @@ TEST(GuiBuffer, JumpSmart)
/*
* Tests functions:
+ * gui_buffer_jump_last_visible_number
+ */
+
+TEST(GuiBuffer, JumpLastVisibleNumber)
+{
+ /* TODO: write tests */
+}
+
+/*
+ * Tests functions:
* gui_buffer_jump_last_buffer_displayed
*/