version 1.15, 2012/10/26 14:35:42 |
version 1.16, 2013/01/17 00:11:22 |
|
|
#include <sys/types.h> |
#include <sys/types.h> |
|
|
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
|
|
|
#include "tmux.h" |
#include "tmux.h" |
|
|
|
|
layout_fix_panes(wp->window, wp->window->sx, wp->window->sy); |
layout_fix_panes(wp->window, wp->window->sx, wp->window->sy); |
} |
} |
notify_window_layout_changed(wp->window); |
notify_window_layout_changed(wp->window); |
} |
|
|
|
/* Add layout to list. */ |
|
void |
|
layout_list_add(struct window *w) |
|
{ |
|
struct last_layout *ll, *ll_last; |
|
char *layout; |
|
u_int limit; |
|
|
|
layout = layout_dump(w); |
|
|
|
ll_last = w->layout_list_last; |
|
if (ll_last != NULL && strcmp(ll_last->layout, layout) == 0) { |
|
free(layout); |
|
return; |
|
} |
|
|
|
ll = xmalloc(sizeof *ll); |
|
ll->layout = layout; |
|
if (ll_last == NULL) |
|
TAILQ_INSERT_TAIL(&w->layout_list, ll, entry); |
|
else |
|
TAILQ_INSERT_AFTER(&w->layout_list, ll_last, ll, entry); |
|
w->layout_list_size++; |
|
w->layout_list_last = ll; |
|
|
|
limit = options_get_number(&w->options, "layout-history-limit"); |
|
while (w->layout_list_size > limit) { |
|
ll = TAILQ_LAST(&w->layout_list, last_layouts); |
|
if (ll == w->layout_list_last) |
|
ll = TAILQ_FIRST(&w->layout_list); |
|
|
|
TAILQ_REMOVE(&w->layout_list, ll, entry); |
|
w->layout_list_size--; |
|
|
|
free(ll->layout); |
|
free(ll); |
|
} |
|
} |
|
|
|
/* Apply next layout from list. */ |
|
const char * |
|
layout_list_redo(struct window *w) |
|
{ |
|
struct last_layout *ll, *ll_last; |
|
|
|
ll_last = w->layout_list_last; |
|
if (ll_last == NULL) |
|
return (NULL); |
|
ll = TAILQ_NEXT(ll_last, entry); |
|
if (ll == NULL) |
|
return (NULL); |
|
w->layout_list_last = ll; |
|
return (ll->layout); |
|
} |
|
|
|
/* Apply previous layout from list. */ |
|
const char * |
|
layout_list_undo(struct window *w) |
|
{ |
|
struct last_layout *ll, *ll_last; |
|
|
|
ll_last = w->layout_list_last; |
|
if (ll_last == NULL) |
|
return (NULL); |
|
ll = TAILQ_PREV(ll_last, last_layouts, entry); |
|
if (ll == NULL) |
|
return (NULL); |
|
w->layout_list_last = ll; |
|
return (ll->layout); |
|
} |
} |