Refactor cut and paste registers

Register REG_BLACK_HOLE can neither be copied into nor pasted from and
has been removed from the input routine.

Register 36 was not used.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
Lars Henriksen 2020-01-10 20:39:19 +01:00 committed by Lukas Fleischer
parent 002cf305a5
commit 12863ff7c0
4 changed files with 25 additions and 16 deletions

View File

@ -161,8 +161,11 @@
#define KEYS_LABELEN 8 /* length of command description */ #define KEYS_LABELEN 8 /* length of command description */
#define KEYS_CMDS_PER_LINE 6 /* max number of commands per line */ #define KEYS_CMDS_PER_LINE 6 /* max number of commands per line */
/* Register definitions. */ /*
#define REG_BLACK_HOLE 37 * Register definitions, see ui_day.c.
* Index 0-35 is used for '0'-'9' and 'a'-'z', see keys_get().
*/
#define REG_BLACK_HOLE 36
/* Size of the hash table the note garbage collector uses. */ /* Size of the hash table the note garbage collector uses. */
#define NOTE_GC_HSIZE 1024 #define NOTE_GC_HSIZE 1024
@ -1115,6 +1118,7 @@ void ui_day_item_delete(unsigned);
void ui_day_item_edit(void); void ui_day_item_edit(void);
void ui_day_item_pipe(void); void ui_day_item_pipe(void);
void ui_day_item_repeat(void); void ui_day_item_repeat(void);
void ui_day_item_cut(unsigned);
void ui_day_item_cut_free(unsigned); void ui_day_item_cut_free(unsigned);
void ui_day_item_copy(unsigned); void ui_day_item_copy(unsigned);
void ui_day_item_paste(unsigned); void ui_day_item_paste(unsigned);

View File

@ -297,8 +297,6 @@ enum key keys_get(WINDOW *win, int *count, int *reg)
*reg = ch - '1' + 1; *reg = ch - '1' + 1;
} else if (ch >= 'a' && ch <= 'z') { } else if (ch >= 'a' && ch <= 'z') {
*reg = ch - 'a' + 10; *reg = ch - 'a' + 10;
} else if (ch == '_') {
*reg = REG_BLACK_HOLE;
} }
ch = keys_wgetch(win); ch = keys_wgetch(win);
} }

View File

@ -36,7 +36,8 @@
#include "calcurse.h" #include "calcurse.h"
struct day_item day_cut[38] = { {0, 0, 0, {NULL}} }; /* Cut & paste registers. */
static struct day_item day_cut[REG_BLACK_HOLE + 1];
/* /*
* Set the selected day in the calendar from the selected item in the APP panel. * Set the selected day in the calendar from the selected item in the APP panel.
@ -834,11 +835,7 @@ void ui_day_item_delete(unsigned reg)
return; return;
} }
} }
ui_day_item_cut(reg);
ui_day_item_cut_free(reg);
p = day_cut_item(listbox_get_sel(&lb_apt));
day_cut[reg].type = p->type;
day_cut[reg].item = p->item;
/* Keep the selection on the same day. */ /* Keep the selection on the same day. */
day_set_sel_data(day_get_item(listbox_get_sel(&lb_apt) - 1)); day_set_sel_data(day_get_item(listbox_get_sel(&lb_apt) - 1));
io_set_modified(); io_set_modified();
@ -995,11 +992,7 @@ void ui_day_item_repeat(void)
/* NOTREACHED */ /* NOTREACHED */
} }
day_set_sel_data(&d); day_set_sel_data(&d);
ui_day_item_cut(REG_BLACK_HOLE);
ui_day_item_cut_free(REG_BLACK_HOLE);
p = day_cut_item(item_nb);
day_cut[REG_BLACK_HOLE].type = p->type;
day_cut[REG_BLACK_HOLE].item = p->item;
io_set_modified(); io_set_modified();
ui_calendar_monthly_view_cache_set_invalid(); ui_calendar_monthly_view_cache_set_invalid();
@ -1008,9 +1001,23 @@ cleanup:
mem_free(msg_asktype); mem_free(msg_asktype);
} }
/* Delete an item and save it in a register. */
void ui_day_item_cut(unsigned reg)
{
struct day_item *p;
ui_day_item_cut_free(reg);
p = day_cut_item(listbox_get_sel(&lb_apt));
day_cut[reg].type = p->type;
day_cut[reg].item = p->item;
}
/* Free the current cut item, if any. */ /* Free the current cut item, if any. */
void ui_day_item_cut_free(unsigned reg) void ui_day_item_cut_free(unsigned reg)
{ {
EXIT_IF(reg > REG_BLACK_HOLE, "illegal register");
if (!day_cut[reg].type) { if (!day_cut[reg].type) {
/* No previously cut item, don't free anything. */ /* No previously cut item, don't free anything. */
return; return;

View File

@ -112,7 +112,7 @@ void free_user_data(void)
apoint_llist_free(); apoint_llist_free();
recur_apoint_llist_free(); recur_apoint_llist_free();
recur_event_llist_free(); recur_event_llist_free();
for (i = 0; i <= 37; i++) for (i = 0; i <= REG_BLACK_HOLE; i++)
ui_day_item_cut_free(i); ui_day_item_cut_free(i);
todo_free_list(); todo_free_list();
notify_free_app(); notify_free_app();