version 1.21, 2019/05/29 20:05:15 |
version 1.22, 2019/08/16 11:49:12 |
|
|
"name", |
"name", |
"size" |
"size" |
}; |
}; |
|
static struct mode_tree_sort_criteria *window_buffer_sort; |
|
|
struct window_buffer_itemdata { |
struct window_buffer_itemdata { |
const char *name; |
const char *name; |
|
|
} |
} |
|
|
static int |
static int |
window_buffer_cmp_name(const void *a0, const void *b0) |
window_buffer_cmp(const void *a0, const void *b0) |
{ |
{ |
const struct window_buffer_itemdata *const *a = a0; |
const struct window_buffer_itemdata *const *a = a0; |
const struct window_buffer_itemdata *const *b = b0; |
const struct window_buffer_itemdata *const *b = b0; |
|
int result = 0; |
|
|
return (strcmp((*a)->name, (*b)->name)); |
if (window_buffer_sort->field == WINDOW_BUFFER_BY_TIME) |
} |
result = (*b)->order - (*a)->order; |
|
else if (window_buffer_sort->field == WINDOW_BUFFER_BY_SIZE) |
|
result = (*b)->size - (*a)->size; |
|
|
static int |
/* Use WINDOW_BUFFER_BY_NAME as default order and tie breaker. */ |
window_buffer_cmp_time(const void *a0, const void *b0) |
if (result == 0) |
{ |
result = strcmp((*a)->name, (*b)->name); |
const struct window_buffer_itemdata *const *a = a0; |
|
const struct window_buffer_itemdata *const *b = b0; |
|
|
|
if ((*a)->order > (*b)->order) |
if (window_buffer_sort->reversed) |
return (-1); |
result = -result; |
if ((*a)->order < (*b)->order) |
return (result); |
return (1); |
|
return (strcmp((*a)->name, (*b)->name)); |
|
} |
} |
|
|
static int |
|
window_buffer_cmp_size(const void *a0, const void *b0) |
|
{ |
|
const struct window_buffer_itemdata *const *a = a0; |
|
const struct window_buffer_itemdata *const *b = b0; |
|
|
|
if ((*a)->size > (*b)->size) |
|
return (-1); |
|
if ((*a)->size < (*b)->size) |
|
return (1); |
|
return (strcmp((*a)->name, (*b)->name)); |
|
} |
|
|
|
static void |
static void |
window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag, |
window_buffer_build(void *modedata, struct mode_tree_sort_criteria *sort_crit, |
const char *filter) |
__unused uint64_t *tag, const char *filter) |
{ |
{ |
struct window_buffer_modedata *data = modedata; |
struct window_buffer_modedata *data = modedata; |
struct window_buffer_itemdata *item; |
struct window_buffer_itemdata *item; |
|
|
item->order = paste_buffer_order(pb); |
item->order = paste_buffer_order(pb); |
} |
} |
|
|
switch (sort_type) { |
window_buffer_sort = sort_crit; |
case WINDOW_BUFFER_BY_NAME: |
qsort(data->item_list, data->item_size, sizeof *data->item_list, |
qsort(data->item_list, data->item_size, sizeof *data->item_list, |
window_buffer_cmp); |
window_buffer_cmp_name); |
|
break; |
|
case WINDOW_BUFFER_BY_TIME: |
|
qsort(data->item_list, data->item_size, sizeof *data->item_list, |
|
window_buffer_cmp_time); |
|
break; |
|
case WINDOW_BUFFER_BY_SIZE: |
|
qsort(data->item_list, data->item_size, sizeof *data->item_list, |
|
window_buffer_cmp_size); |
|
break; |
|
} |
|
|
|
if (cmd_find_valid_state(&data->fs)) { |
if (cmd_find_valid_state(&data->fs)) { |
s = data->fs.s; |
s = data->fs.s; |