mirror of
https://github.com/weechat/weechat.git
synced 2026-06-27 21:36:37 +02:00
Add new keys to move into last visited buffers (alt + "<", alt + ">"), come back to last visited buffer when closing a buffer
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
WeeChat ChangeLog
|
||||
=================
|
||||
FlashCode <flashcode@flashtux.org>
|
||||
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-"
|
||||
|
||||
@@ -245,6 +245,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<entry>Strg + K</entry>
|
||||
<entry>
|
||||
Lösche vom Cursor bis zum Ende der Kommandozeile
|
||||
<!-- TRANSLATION NEEDED -->
|
||||
(deleted string is copied to clipboard)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -277,12 +279,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<entry>Strg + U</entry>
|
||||
<entry>
|
||||
Lösche vom Cursor bis zum Aanfang der Kommandozeile
|
||||
<!-- TRANSLATION NEEDED -->
|
||||
(deleted string is copied to clipboard)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Strg + W</entry>
|
||||
<entry>
|
||||
Lösche das vorhergehende Wort in der Kommandozeile
|
||||
<!-- TRANSLATION NEEDED -->
|
||||
(deleted string is copied to clipboard)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -422,6 +428,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<entry>Alt + D</entry>
|
||||
<entry>
|
||||
Lösche das nächste Wort in der Kommandozeile
|
||||
<!-- TRANSLATION NEEDED -->
|
||||
(deleted string is copied to clipboard)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -449,13 +457,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
Schalte zum letzten Puffer
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + J dann Alt + P</entry>
|
||||
<entry>
|
||||
<!-- TRANSLATION NEEDED -->
|
||||
Switch to buffer previously displayed
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + J dann Alt + R</entry>
|
||||
<entry>
|
||||
@@ -526,6 +527,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
Zoom on current window
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + <</entry>
|
||||
<entry>
|
||||
<!-- TRANSLATION NEEDED -->
|
||||
Switch to previous buffer in list of visited buffers
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + ></entry>
|
||||
<entry>
|
||||
<!-- TRANSLATION NEEDED -->
|
||||
Switch to next buffer in list of visited buffers
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + =</entry>
|
||||
<entry>
|
||||
|
||||
@@ -229,6 +229,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<entry>Ctrl + K</entry>
|
||||
<entry>
|
||||
Delete from cursor until end of command line
|
||||
(deleted string is copied to clipboard)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -260,12 +261,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<entry>Ctrl + U</entry>
|
||||
<entry>
|
||||
Delete from cursor until beginning of command line
|
||||
(deleted string is copied to clipboard)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Ctrl + W</entry>
|
||||
<entry>
|
||||
Delete previous word of command line
|
||||
(deleted string is copied to clipboard)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -404,6 +407,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<entry>Alt + D</entry>
|
||||
<entry>
|
||||
Delete next word in command line
|
||||
(deleted string is copied to clipboard)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -425,12 +429,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
Switch to last buffer
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + J then Alt + P</entry>
|
||||
<entry>
|
||||
Switch to buffer previously displayed
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + J then Alt + R</entry>
|
||||
<entry>
|
||||
@@ -498,6 +496,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
Zoom on current window
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + <</entry>
|
||||
<entry>
|
||||
Switch to previous buffer in list of visited buffers
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + ></entry>
|
||||
<entry>
|
||||
Switch to next buffer in list of visited buffers
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + =</entry>
|
||||
<entry>
|
||||
|
||||
@@ -248,6 +248,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<entry>Ctrl + K</entry>
|
||||
<entry>
|
||||
Effacer du curseur jusqu'à la fin de la ligne de commande
|
||||
(la chaîne supprimée est copiée dans le presse-papiers)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -280,12 +281,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<entry>Ctrl + U</entry>
|
||||
<entry>
|
||||
Effacer du curseur jusqu'au début de la ligne de commande
|
||||
(la chaîne supprimée est copiée dans le presse-papiers)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Ctrl + W</entry>
|
||||
<entry>
|
||||
Effacer le mot précédent sur la ligne de commande
|
||||
(la chaîne supprimée est copiée dans le presse-papiers)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -427,6 +430,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<entry>Alt + D</entry>
|
||||
<entry>
|
||||
Effacer le mot suivant
|
||||
(la chaîne supprimée est copiée dans le presse-papiers)
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -454,12 +458,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
Sauter au dernier tampon
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + J puis Alt + P</entry>
|
||||
<entry>
|
||||
Sauter au tampon affiché précédemment
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + J puis Alt + R</entry>
|
||||
<entry>
|
||||
@@ -528,6 +526,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
Zoom sur la fenêtre courante
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + <</entry>
|
||||
<entry>
|
||||
Sauter au tampon précédent dans la liste des tampons visités
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + ></entry>
|
||||
<entry>
|
||||
Sauter au tampon suivant dans la liste des tampons visités
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Alt + =</entry>
|
||||
<entry>
|
||||
|
||||
+15
-10
@@ -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"),
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
+246
-11
@@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
+20
-1
@@ -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,
|
||||
|
||||
+54
-7
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -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 ();
|
||||
|
||||
Reference in New Issue
Block a user