From 4bfc005d9d1ca70a212884e347c0b3394bd97d6a Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Mon, 18 May 2009 17:47:45 +0200 Subject: [PATCH] Add new keys to move into last visited buffers (alt + "<", alt + ">"), come back to last visited buffer when closing a buffer --- ChangeLog | 4 +- doc/de/user/usage.de.xml | 29 ++- doc/en/user/usage.en.xml | 22 ++- doc/fr/user/usage.fr.xml | 22 ++- src/core/wee-command.c | 25 +-- src/gui/curses/gui-curses-keyboard.c | 2 + src/gui/curses/gui-curses-window.c | 6 +- src/gui/gtk/gui-gtk-window.c | 6 +- src/gui/gui-buffer.c | 257 +++++++++++++++++++++++++-- src/gui/gui-buffer.h | 21 ++- src/gui/gui-input.c | 61 ++++++- src/gui/gui-input.h | 3 +- 12 files changed, 406 insertions(+), 52 deletions(-) diff --git a/ChangeLog b/ChangeLog index ca9e16f38..92e3c5000 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,7 @@ WeeChat ChangeLog ================= FlashCode -v0.3.0-dev, 2009-05-16 +v0.3.0-dev, 2009-05-18 Version 0.3.0 (under dev!) @@ -47,6 +47,8 @@ Version 0.3.0 (under dev!) * gui: add tags for lines and custom filtering by tags or regex (task #7674) * gui: add custom bars, with custom items * gui: add key to zoom a window (task #7470) +* gui: add keys to move into last visited buffers: alt + "<" and alt + ">" +* gui: come back to last visited buffer when closing a buffer * gui: add new option scroll_page_percent to choose percent of height to scroll with page_up and page_down keys (task #8702) * gui: add number of lines remaining after last line displayed in "-MORE-" diff --git a/doc/de/user/usage.de.xml b/doc/de/user/usage.de.xml index 45e6ca482..452ea602e 100644 --- a/doc/de/user/usage.de.xml +++ b/doc/de/user/usage.de.xml @@ -245,6 +245,8 @@ along with this program. If not, see . Strg + K Lösche vom Cursor bis zum Ende der Kommandozeile + + (deleted string is copied to clipboard) @@ -277,12 +279,16 @@ along with this program. If not, see . Strg + U Lösche vom Cursor bis zum Aanfang der Kommandozeile + + (deleted string is copied to clipboard) Strg + W Lösche das vorhergehende Wort in der Kommandozeile + + (deleted string is copied to clipboard) @@ -422,6 +428,8 @@ along with this program. If not, see . Alt + D Lösche das nächste Wort in der Kommandozeile + + (deleted string is copied to clipboard) @@ -449,13 +457,6 @@ along with this program. If not, see . Schalte zum letzten Puffer - - Alt + J dann Alt + P - - - Switch to buffer previously displayed - - Alt + J dann Alt + R @@ -526,6 +527,20 @@ along with this program. If not, see . Zoom on current window + + Alt + < + + + Switch to previous buffer in list of visited buffers + + + + Alt + > + + + Switch to next buffer in list of visited buffers + + Alt + = diff --git a/doc/en/user/usage.en.xml b/doc/en/user/usage.en.xml index 60547612a..0fb30bb1f 100644 --- a/doc/en/user/usage.en.xml +++ b/doc/en/user/usage.en.xml @@ -229,6 +229,7 @@ along with this program. If not, see . Ctrl + K Delete from cursor until end of command line + (deleted string is copied to clipboard) @@ -260,12 +261,14 @@ along with this program. If not, see . Ctrl + U Delete from cursor until beginning of command line + (deleted string is copied to clipboard) Ctrl + W Delete previous word of command line + (deleted string is copied to clipboard) @@ -404,6 +407,7 @@ along with this program. If not, see . Alt + D Delete next word in command line + (deleted string is copied to clipboard) @@ -425,12 +429,6 @@ along with this program. If not, see . Switch to last buffer - - Alt + J then Alt + P - - Switch to buffer previously displayed - - Alt + J then Alt + R @@ -498,6 +496,18 @@ along with this program. If not, see . Zoom on current window + + Alt + < + + Switch to previous buffer in list of visited buffers + + + + Alt + > + + Switch to next buffer in list of visited buffers + + Alt + = diff --git a/doc/fr/user/usage.fr.xml b/doc/fr/user/usage.fr.xml index 98e7bd207..25301cf97 100644 --- a/doc/fr/user/usage.fr.xml +++ b/doc/fr/user/usage.fr.xml @@ -248,6 +248,7 @@ along with this program. If not, see . Ctrl + K Effacer du curseur jusqu'à la fin de la ligne de commande + (la chaîne supprimée est copiée dans le presse-papiers) @@ -280,12 +281,14 @@ along with this program. If not, see . Ctrl + U Effacer du curseur jusqu'au début de la ligne de commande + (la chaîne supprimée est copiée dans le presse-papiers) Ctrl + W Effacer le mot précédent sur la ligne de commande + (la chaîne supprimée est copiée dans le presse-papiers) @@ -427,6 +430,7 @@ along with this program. If not, see . Alt + D Effacer le mot suivant + (la chaîne supprimée est copiée dans le presse-papiers) @@ -454,12 +458,6 @@ along with this program. If not, see . Sauter au dernier tampon - - Alt + J puis Alt + P - - Sauter au tampon affiché précédemment - - Alt + J puis Alt + R @@ -528,6 +526,18 @@ along with this program. If not, see . Zoom sur la fenêtre courante + + Alt + < + + Sauter au tampon précédent dans la liste des tampons visités + + + + Alt + > + + Sauter au tampon suivant dans la liste des tampons visités + + Alt + = diff --git a/src/core/wee-command.c b/src/core/wee-command.c index 737afb3c7..d285fd8bc 100644 --- a/src/core/wee-command.c +++ b/src/core/wee-command.c @@ -724,9 +724,10 @@ command_buffer (void *data, struct t_gui_buffer *buffer, /* buffer is currently displayed ? then jump to previous buffer */ if ((number == gui_current_window->buffer->number) && (CONFIG_BOOLEAN(config_look_jump_current_to_previous_buffer)) - && gui_previous_buffer) + && gui_buffers_visited) { - number = gui_previous_buffer->number; + number = last_gui_buffer_visited->buffer->number; + gui_buffer_visited_remove (last_gui_buffer_visited); } if (number != gui_current_window->buffer->number) { @@ -1690,8 +1691,10 @@ command_input (void *data, struct t_gui_buffer *buffer, gui_input_jump_smart (); else if (string_strcasecmp (argv[1], "jump_last_buffer") == 0) gui_input_jump_last_buffer (); - else if (string_strcasecmp (argv[1], "jump_previous_buffer") == 0) - gui_input_jump_previous_buffer (); + else if (string_strcasecmp (argv[1], "jump_previously_visited_buffer") == 0) + gui_input_jump_previously_visited_buffer (); + else if (string_strcasecmp (argv[1], "jump_next_visited_buffer") == 0) + gui_input_jump_next_visited_buffer (); else if (string_strcasecmp (argv[1], "hotlist_clear") == 0) gui_input_hotlist_clear (); else if (string_strcasecmp (argv[1], "grab_key") == 0) @@ -3826,9 +3829,11 @@ command_init () "move_previous_char | move_next_char | move_previous_word | " "move_next_word | history_previous | history_next | " "history_global_previous | history_global_next | " - "jump_smart | jump_last_buffer | jump_previous_buffer | " - "hotlist_clear | grab_key | scroll_unread | set_unread | " - "set_unread_current_buffer | insert [args]", + "jump_smart | jump_last_buffer | " + "jump_previously_visited_buffer | " + "jump_next_visited_buffer | hotlist_clear | grab_key | " + "scroll_unread | set_unread | set_unread_current_buffer | " + "insert [args]", _("This command is used by key bindings or plugins."), "return|complete_next|complete_previous|search_next|" "delete_previous_char|delete_next_char|" @@ -3839,9 +3844,9 @@ command_init () "move_previous_char|move_next_char|move_previous_word|" "move_next_word|history_previous|history_next|" "history_global_previous|history_global_next|" - "jump_smart|jump_last_buffer|jump_previous_buffer|" - "hotlist_clear|grab_key|scroll_unread|set_unread|" - "set_unread_current_buffer|insert", + "jump_smart|jump_last_buffer|jump_previously_visited_buffer|" + "jump_next_visited_buffer|hotlist_clear|grab_key|" + "scroll_unread|set_unread|set_unread_current_buffer|insert", &command_input, NULL); hook_command (NULL, "key", N_("bind/unbind keys"), diff --git a/src/gui/curses/gui-curses-keyboard.c b/src/gui/curses/gui-curses-keyboard.c index cd61c6992..e19365c49 100644 --- a/src/gui/curses/gui-curses-keyboard.c +++ b/src/gui/curses/gui-curses-keyboard.c @@ -174,6 +174,8 @@ gui_keyboard_default_bindings () gui_keyboard_default_bind (/* m-7 */ "meta-7", "/buffer *7"); gui_keyboard_default_bind (/* m-8 */ "meta-8", "/buffer *8"); gui_keyboard_default_bind (/* m-9 */ "meta-9", "/buffer *9"); + gui_keyboard_default_bind (/* m-< */ "meta-<", "/input jump_previously_visited_buffer"); + gui_keyboard_default_bind (/* m-> */ "meta->", "/input jump_next_visited_buffer"); /* bind meta-j + {01..99} to switch to buffers # > 10 */ for (i = 1; i < 100; i++) diff --git a/src/gui/curses/gui-curses-window.c b/src/gui/curses/gui-curses-window.c index acddda956..5bf42f16b 100644 --- a/src/gui/curses/gui-curses-window.c +++ b/src/gui/curses/gui-curses-window.c @@ -497,7 +497,11 @@ gui_window_switch_to_buffer (struct t_gui_window *window, { window->start_line = NULL; window->start_line_pos = 0; - gui_previous_buffer = window->buffer; + if (!gui_buffers_visited_frozen) + { + gui_buffer_visited_add (window->buffer); + gui_buffer_visited_add (buffer); + } if (set_last_read) { if (window->buffer->num_displayed == 0) diff --git a/src/gui/gtk/gui-gtk-window.c b/src/gui/gtk/gui-gtk-window.c index 5d1abe61b..ecb836257 100644 --- a/src/gui/gtk/gui-gtk-window.c +++ b/src/gui/gtk/gui-gtk-window.c @@ -202,7 +202,11 @@ gui_window_switch_to_buffer (struct t_gui_window *window, { window->start_line = NULL; window->start_line_pos = 0; - gui_previous_buffer = window->buffer; + if (!gui_buffers_visited_frozen) + { + gui_buffer_visited_add (window->buffer); + gui_buffer_visited_add (buffer); + } if (set_last_read) { if (window->buffer->num_displayed == 0) diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index 113a4f936..a582d3508 100644 --- a/src/gui/gui-buffer.c +++ b/src/gui/gui-buffer.c @@ -56,7 +56,13 @@ struct t_gui_buffer *gui_buffers = NULL; /* first buffer */ struct t_gui_buffer *last_gui_buffer = NULL; /* last buffer */ -struct t_gui_buffer *gui_previous_buffer = NULL; /* previous buffer */ + +/* history of last visited buffers */ +struct t_gui_buffer_visited *gui_buffers_visited = NULL; +struct t_gui_buffer_visited *last_gui_buffer_visited = NULL; +int gui_buffers_visited_index = -1; /* index of pointer in list */ +int gui_buffers_visited_count = 0; /* number of visited buffers*/ +int gui_buffers_visited_frozen = 0; /* 1 to forbid list updates */ char *gui_buffer_notify_string[GUI_BUFFER_NUM_NOTIFY] = { "none", "highlight", "message", "all" }; @@ -485,8 +491,12 @@ gui_buffer_new (struct t_weechat_plugin *plugin, /* check if this buffer should be assigned to a window, according to windows layout saved */ gui_layout_window_check_buffer (new_buffer); - - if (!first_buffer_creation) + + if (first_buffer_creation) + { + gui_buffer_visited_add (new_buffer); + } + else { hook_signal_send ("buffer_opened", WEECHAT_HOOK_SIGNAL_POINTER, new_buffer); @@ -1377,7 +1387,9 @@ gui_buffer_close (struct t_gui_buffer *buffer) { struct t_gui_window *ptr_window; struct t_gui_buffer *ptr_buffer; - + int index; + struct t_gui_buffer_visited *ptr_buffer_visited; + hook_signal_send ("buffer_closing", WEECHAT_HOOK_SIGNAL_POINTER, buffer); @@ -1388,6 +1400,21 @@ gui_buffer_close (struct t_gui_buffer *buffer) if (!weechat_quit) { + /* find other buffer to display: previously visited buffer if current + window is displaying buffer, or buffer # - 1 */ + ptr_buffer_visited = NULL; + if (gui_current_window->buffer == buffer) + { + index = gui_buffer_visited_get_index_previous (); + if (index >= 0) + { + ptr_buffer_visited = gui_buffer_visited_search_by_number (index); + if (ptr_buffer_visited->buffer == buffer) + ptr_buffer_visited = NULL; + } + } + + /* switch to another buffer in each window that displays buffer */ for (ptr_window = gui_windows; ptr_window; ptr_window = ptr_window->next_window) { @@ -1397,17 +1424,26 @@ gui_buffer_close (struct t_gui_buffer *buffer) /* switch to previous buffer */ if (gui_buffers != last_gui_buffer) { - if (ptr_window->buffer->prev_buffer) + if (ptr_buffer_visited) { gui_window_switch_to_buffer (ptr_window, - ptr_window->buffer->prev_buffer, + ptr_buffer_visited->buffer, 1); } else { - gui_window_switch_to_buffer (ptr_window, - last_gui_buffer, - 1); + if (ptr_window->buffer->prev_buffer) + { + gui_window_switch_to_buffer (ptr_window, + ptr_window->buffer->prev_buffer, + 1); + } + else + { + gui_window_switch_to_buffer (ptr_window, + last_gui_buffer, + 1); + } } } } @@ -1418,8 +1454,7 @@ gui_buffer_close (struct t_gui_buffer *buffer) if (gui_hotlist_initial_buffer == buffer) gui_hotlist_initial_buffer = NULL; - if (gui_previous_buffer == buffer) - gui_previous_buffer = NULL; + gui_buffer_visited_remove_by_buffer (buffer); /* decrease buffer number for all next buffers */ for (ptr_buffer = buffer->next_buffer; ptr_buffer; @@ -1599,6 +1634,192 @@ gui_buffer_move_to_number (struct t_gui_buffer *buffer, int number) WEECHAT_HOOK_SIGNAL_POINTER, buffer); } +/* + * gui_buffer_visited_search: search a visited buffer in list of visited buffers + */ + +struct t_gui_buffer_visited * +gui_buffer_visited_search (struct t_gui_buffer *buffer) +{ + struct t_gui_buffer_visited *ptr_buffer_visited; + + if (!buffer) + return NULL; + + for (ptr_buffer_visited = gui_buffers_visited; ptr_buffer_visited; + ptr_buffer_visited = ptr_buffer_visited->next_buffer) + { + if (ptr_buffer_visited->buffer == buffer) + return ptr_buffer_visited; + } + + /* visited buffer not found */ + return NULL; +} + +/* + * gui_buffer_visited_search_by_number: search a visited buffer in list of + * visited buffers + */ + +struct t_gui_buffer_visited * +gui_buffer_visited_search_by_number (int number) +{ + struct t_gui_buffer_visited *ptr_buffer_visited; + int i; + + if ((number < 0) || (number >= gui_buffers_visited_count)) + return NULL; + + i = 0; + for (ptr_buffer_visited = gui_buffers_visited; ptr_buffer_visited; + ptr_buffer_visited = ptr_buffer_visited->next_buffer) + { + if (i == number) + return ptr_buffer_visited; + i++; + } + + /* visited buffer not found (should never be reached) */ + return NULL; +} + +/* + * gui_buffer_visited_remove: remove a visited buffer from list of visited buffers + */ + +void +gui_buffer_visited_remove (struct t_gui_buffer_visited *buffer_visited) +{ + if (!buffer_visited) + return; + + /* remove visited buffer from list */ + if (buffer_visited->prev_buffer) + (buffer_visited->prev_buffer)->next_buffer = buffer_visited->next_buffer; + if (buffer_visited->next_buffer) + (buffer_visited->next_buffer)->prev_buffer = buffer_visited->prev_buffer; + if (gui_buffers_visited == buffer_visited) + gui_buffers_visited = buffer_visited->next_buffer; + if (last_gui_buffer_visited == buffer_visited) + last_gui_buffer_visited = buffer_visited->prev_buffer; + + free (buffer_visited); + + if (gui_buffers_visited_count > 0) + gui_buffers_visited_count--; + + if (gui_buffers_visited_index >= gui_buffers_visited_count) + gui_buffers_visited_index = -1; +} + +/* + * gui_buffer_visited_remove_by_buffer: remove a visited buffer from list of + * visited buffers + */ + +void +gui_buffer_visited_remove_by_buffer (struct t_gui_buffer *buffer) +{ + struct t_gui_buffer_visited *buffer_visited; + + if (!buffer) + return; + + buffer_visited = gui_buffer_visited_search (buffer); + if (buffer_visited) + gui_buffer_visited_remove (buffer_visited); +} + +/* + * gui_buffer_visited_remove_all: remove all visited buffers from list + */ + +void +gui_buffer_visited_remove_all () +{ + while (gui_buffers_visited) + { + gui_buffer_visited_remove (gui_buffers_visited); + } +} + +/* + * gui_buffer_visited_add: add a visited buffer to list of visited buffers + */ + +struct t_gui_buffer_visited * +gui_buffer_visited_add (struct t_gui_buffer *buffer) +{ + struct t_gui_buffer_visited *new_buffer_visited; + + if (!buffer) + return NULL; + + new_buffer_visited = gui_buffer_visited_search (buffer); + if (new_buffer_visited) + gui_buffer_visited_remove (new_buffer_visited); + + /* remove old buffer(s) visited if list is too long */ + while (gui_buffers_visited_count > GUI_BUFFERS_VISITED_MAX) + { + gui_buffer_visited_remove (gui_buffers_visited); + } + + new_buffer_visited = malloc (sizeof (*new_buffer_visited)); + if (new_buffer_visited) + { + new_buffer_visited->buffer = buffer; + + new_buffer_visited->prev_buffer = last_gui_buffer_visited; + new_buffer_visited->next_buffer = NULL; + if (gui_buffers_visited) + last_gui_buffer_visited->next_buffer = new_buffer_visited; + else + gui_buffers_visited = new_buffer_visited; + last_gui_buffer_visited = new_buffer_visited; + + gui_buffers_visited_count++; + gui_buffers_visited_index = -1; + } + + return new_buffer_visited; +} + +/* + * gui_buffer_visited_get_index_previous: get index for previously visited buffer + * return -1 if there's no previously buffer + * in history, starting from current index + */ + +int +gui_buffer_visited_get_index_previous () +{ + if ((gui_buffers_visited_count < 2) || (gui_buffers_visited_index == 0)) + return -1; + + if (gui_buffers_visited_index < 0) + return gui_buffers_visited_count - 2; + else + return gui_buffers_visited_index - 1; +} + +/* + * gui_buffer_visited_get_index_next: get index for next visited buffer + * return -1 if there's no next buffer + * in history, starting from current index + */ + +int +gui_buffer_visited_get_index_next () +{ + if ((gui_buffers_visited_count < 2) + || (gui_buffers_visited_index >= gui_buffers_visited_count - 1)) + return -1; + + return gui_buffers_visited_index + 1; +} + /* * gui_buffer_add_to_infolist: add a buffer in an infolist * return 1 if ok, 0 if error @@ -1865,6 +2086,7 @@ gui_buffer_print_log () struct t_gui_buffer *ptr_buffer; struct t_gui_buffer_local_var *ptr_local_var; struct t_gui_line *ptr_line; + struct t_gui_buffer_visited *ptr_buffer_visited; char *tags; int num; @@ -1998,4 +2220,17 @@ gui_buffer_print_log () gui_completion_print_log (ptr_buffer->completion); } } + + log_printf (""); + log_printf ("[visited buffers]"); + num = 1; + for (ptr_buffer_visited = gui_buffers_visited; ptr_buffer_visited; + ptr_buffer_visited = ptr_buffer_visited->next_buffer) + { + log_printf (" #%d:", num); + log_printf (" buffer . . . . . . . . : 0x%lx", ptr_buffer_visited->buffer); + log_printf (" prev_buffer. . . . . . : 0x%lx", ptr_buffer_visited->prev_buffer); + log_printf (" next_buffer. . . . . . : 0x%lx", ptr_buffer_visited->next_buffer); + num++; + } } diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h index 737ac0df5..a49b6910f 100644 --- a/src/gui/gui-buffer.h +++ b/src/gui/gui-buffer.h @@ -47,6 +47,8 @@ enum t_gui_buffer_notify #define GUI_BUFFER_INPUT_BLOCK_SIZE 256 +#define GUI_BUFFERS_VISITED_MAX 50 + /* buffer structures */ struct t_gui_line @@ -176,11 +178,22 @@ struct t_gui_buffer struct t_gui_buffer *next_buffer; /* link to next buffer */ }; +struct t_gui_buffer_visited +{ + struct t_gui_buffer *buffer; /* pointer to buffer */ + struct t_gui_buffer_visited *prev_buffer; /* link to previous variable */ + struct t_gui_buffer_visited *next_buffer; /* link to next variable */ +}; + /* buffer variables */ extern struct t_gui_buffer *gui_buffers; extern struct t_gui_buffer *last_gui_buffer; -extern struct t_gui_buffer *gui_previous_buffer; +extern struct t_gui_buffer_visited *gui_buffers_visited; +extern struct t_gui_buffer_visited *last_gui_buffer_visited; +extern int gui_buffers_visited_index; +extern int gui_buffers_visited_count; +extern int gui_buffers_visited_frozen; extern char *gui_buffer_notify_string[]; /* buffer functions */ @@ -232,6 +245,12 @@ extern void gui_buffer_close (struct t_gui_buffer *buffer); extern void gui_buffer_switch_by_number (struct t_gui_window *window, int number); extern void gui_buffer_move_to_number (struct t_gui_buffer *buffer, int number); +extern struct t_gui_buffer_visited *gui_buffer_visited_search_by_number (int number); +extern void gui_buffer_visited_remove (struct t_gui_buffer_visited *buffer_visited); +extern void gui_buffer_visited_remove_by_buffer (struct t_gui_buffer *buffer); +extern struct t_gui_buffer_visited *gui_buffer_visited_add (struct t_gui_buffer *buffer); +extern int gui_buffer_visited_get_index_previous (); +extern int gui_buffer_visited_get_index_next (); extern int gui_buffer_add_to_infolist (struct t_infolist *infolist, struct t_gui_buffer *buffer); extern int gui_buffer_line_add_to_infolist (struct t_infolist *infolist, diff --git a/src/gui/gui-input.c b/src/gui/gui-input.c index d50d8675b..49efa7cc6 100644 --- a/src/gui/gui-input.c +++ b/src/gui/gui-input.c @@ -30,6 +30,7 @@ #include "../core/wee-config.h" #include "../core/wee-hook.h" #include "../core/wee-input.h" +#include "../core/wee-log.h" #include "../core/wee-string.h" #include "../core/wee-utf8.h" #include "../plugins/plugin.h" @@ -1142,19 +1143,65 @@ gui_input_jump_last_buffer () } /* - * gui_input_jump_previous_buffer: jump to previous buffer (the one displayed - * before current one) - * (default key: meta-j, meta-p) + * gui_input_jump_previously_visited_buffer: jump to previously visited buffer + * (buffer displayed before current one) + * (default key: meta-<) */ void -gui_input_jump_previous_buffer () +gui_input_jump_previously_visited_buffer () { + int index; + struct t_gui_buffer_visited *ptr_buffer_visited; + if (gui_current_window->buffer->text_search == GUI_TEXT_SEARCH_DISABLED) { - if (gui_previous_buffer) - gui_buffer_switch_by_number (gui_current_window, - gui_previous_buffer->number); + index = gui_buffer_visited_get_index_previous (); + if (index >= 0) + { + gui_buffers_visited_index = index; + log_printf ("prev: index = %d", index); + + ptr_buffer_visited = gui_buffer_visited_search_by_number (gui_buffers_visited_index); + if (ptr_buffer_visited) + { + gui_buffers_visited_frozen = 1; + gui_buffer_switch_by_number (gui_current_window, + ptr_buffer_visited->buffer->number); + gui_buffers_visited_frozen = 0; + } + } + } +} + +/* + * gui_input_jump_next_visited_buffer: jump to next visited buffer + * (buffer displayed after current one) + * (default key: meta->) + */ + +void +gui_input_jump_next_visited_buffer () +{ + int index; + struct t_gui_buffer_visited *ptr_buffer_visited; + + if (gui_current_window->buffer->text_search == GUI_TEXT_SEARCH_DISABLED) + { + index = gui_buffer_visited_get_index_next (); + if (index >= 0) + { + gui_buffers_visited_index = index; + + ptr_buffer_visited = gui_buffer_visited_search_by_number (gui_buffers_visited_index); + if (ptr_buffer_visited) + { + gui_buffers_visited_frozen = 1; + gui_buffer_switch_by_number (gui_current_window, + ptr_buffer_visited->buffer->number); + gui_buffers_visited_frozen = 0; + } + } } } diff --git a/src/gui/gui-input.h b/src/gui/gui-input.h index 5edceddd7..dcbcc3e67 100644 --- a/src/gui/gui-input.h +++ b/src/gui/gui-input.h @@ -59,7 +59,8 @@ extern void gui_input_history_global_previous (); extern void gui_input_history_global_next (); extern void gui_input_jump_smart (); extern void gui_input_jump_last_buffer (); -extern void gui_input_jump_previous_buffer (); +extern void gui_input_jump_previously_visited_buffer (); +extern void gui_input_jump_next_visited_buffer (); extern void gui_input_hotlist_clear (); extern void gui_input_grab_key (); extern void gui_input_scroll_unread ();