Building configuration menu to assign keybindings
This commit is contained in:
parent
9d4899110a
commit
eb88eaecb3
34
ChangeLog
34
ChangeLog
@ -1,5 +1,39 @@
|
|||||||
|
2008-11-23 Frederic Culot <frederic@culot.org>
|
||||||
|
|
||||||
|
* src/keys.c (keys_popup_info, keys_action_count_keys): new
|
||||||
|
function
|
||||||
|
|
||||||
|
* src/utils.c (popup): updated to take a message to be displayed
|
||||||
|
as extra argument
|
||||||
|
|
||||||
|
2008-11-22 Frederic Culot <frederic@culot.org>
|
||||||
|
|
||||||
|
* src/custom.c (custom_keys_config_bar): new function
|
||||||
|
|
||||||
|
* src/keys.c (keys_display_bindings_bar)
|
||||||
|
(keys_action_nkey): new functions
|
||||||
|
|
||||||
|
* src/utils.c (format_key): moved to keys_format_label
|
||||||
|
|
||||||
2008-11-16 Frederic Culot <frederic@culot.org>
|
2008-11-16 Frederic Culot <frederic@culot.org>
|
||||||
|
|
||||||
|
* src/custom.c (config_bar): renamed into custom_config_bar and
|
||||||
|
updated to display key configuration menu
|
||||||
|
|
||||||
|
* src/custom.c (general_conf_set_scrsize): renamed into
|
||||||
|
conf_set_scrsize
|
||||||
|
|
||||||
|
* src/custom.c (custom_keys_config, print_keys_bindings)
|
||||||
|
(print_key_incolor, print_key_reverse): new functions
|
||||||
|
|
||||||
|
* src/utils.c (print_option_incolor): renamed into
|
||||||
|
print_bool_option_incolor
|
||||||
|
|
||||||
|
* src/wins.c (wins_scrollwin_up, wins_scrollwin_down): amount of
|
||||||
|
lines to be scrolled can now be specified
|
||||||
|
|
||||||
|
2008-11-15 Frederic Culot <frederic@culot.org>
|
||||||
|
|
||||||
* src/keys.c (keys_dump_defaults, dump_intro, keys_str2int)
|
* src/keys.c (keys_dump_defaults, dump_intro, keys_str2int)
|
||||||
(keys_int2str, keys_init, add_key_str, del_key_str): new functions
|
(keys_int2str, keys_init, add_key_str, del_key_str): new functions
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: calcurse.c,v 1.70 2008/11/16 17:42:53 culot Exp $ */
|
/* $calcurse: calcurse.c,v 1.71 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -243,7 +243,7 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
case KEY_GENERIC_CONFIG_MENU:
|
case KEY_GENERIC_CONFIG_MENU:
|
||||||
erase_status_bar ();
|
erase_status_bar ();
|
||||||
config_bar ();
|
custom_config_bar ();
|
||||||
while ((key = wgetch (win[STA].p)) != 'q')
|
while ((key = wgetch (win[STA].p)) != 'q')
|
||||||
{
|
{
|
||||||
switch (key)
|
switch (key)
|
||||||
@ -272,12 +272,16 @@ main (int argc, char **argv)
|
|||||||
case 'n':
|
case 'n':
|
||||||
notify_config_bar ();
|
notify_config_bar ();
|
||||||
break;
|
break;
|
||||||
|
case 'K':
|
||||||
|
case 'k':
|
||||||
|
custom_keys_config ();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
wins_reset ();
|
wins_reset ();
|
||||||
wins_update ();
|
wins_update ();
|
||||||
do_storage = true;
|
do_storage = true;
|
||||||
erase_status_bar ();
|
erase_status_bar ();
|
||||||
config_bar ();
|
custom_config_bar ();
|
||||||
}
|
}
|
||||||
wins_update ();
|
wins_update ();
|
||||||
break;
|
break;
|
||||||
|
241
src/custom.c
241
src/custom.c
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: custom.c,v 1.25 2008/11/16 17:42:53 culot Exp $ */
|
/* $calcurse: custom.c,v 1.26 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "custom.h"
|
#include "custom.h"
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
@ -352,7 +353,7 @@ custom_load_conf (conf_t *conf, int background)
|
|||||||
|
|
||||||
/* Draws the configuration bar */
|
/* Draws the configuration bar */
|
||||||
void
|
void
|
||||||
config_bar (void)
|
custom_config_bar (void)
|
||||||
{
|
{
|
||||||
int smlspc, spc;
|
int smlspc, spc;
|
||||||
|
|
||||||
@ -365,6 +366,7 @@ config_bar (void)
|
|||||||
mvwprintw (win[STA].p, 0, 2 + spc, "L");
|
mvwprintw (win[STA].p, 0, 2 + spc, "L");
|
||||||
mvwprintw (win[STA].p, 1, 2 + spc, "C");
|
mvwprintw (win[STA].p, 1, 2 + spc, "C");
|
||||||
mvwprintw (win[STA].p, 0, 2 + 2 * spc, "N");
|
mvwprintw (win[STA].p, 0, 2 + 2 * spc, "N");
|
||||||
|
mvwprintw (win[STA].p, 1, 2 + 2 * spc, "K");
|
||||||
custom_remove_attr (win[STA].p, ATTR_HIGHEST);
|
custom_remove_attr (win[STA].p, ATTR_HIGHEST);
|
||||||
|
|
||||||
mvwprintw (win[STA].p, 0, 2 + smlspc, _("Exit"));
|
mvwprintw (win[STA].p, 0, 2 + smlspc, _("Exit"));
|
||||||
@ -372,6 +374,7 @@ config_bar (void)
|
|||||||
mvwprintw (win[STA].p, 0, 2 + spc + smlspc, _("Layout"));
|
mvwprintw (win[STA].p, 0, 2 + spc + smlspc, _("Layout"));
|
||||||
mvwprintw (win[STA].p, 1, 2 + spc + smlspc, _("Color"));
|
mvwprintw (win[STA].p, 1, 2 + spc + smlspc, _("Color"));
|
||||||
mvwprintw (win[STA].p, 0, 2 + 2 * spc + smlspc, _("Notify"));
|
mvwprintw (win[STA].p, 0, 2 + 2 * spc + smlspc, _("Notify"));
|
||||||
|
mvwprintw (win[STA].p, 1, 2 + 2 * spc + smlspc, _("Keys"));
|
||||||
|
|
||||||
wnoutrefresh (win[STA].p);
|
wnoutrefresh (win[STA].p);
|
||||||
wmove (win[STA].p, 0, 0);
|
wmove (win[STA].p, 0, 0);
|
||||||
@ -720,37 +723,40 @@ print_general_options (WINDOW *win, conf_t *conf)
|
|||||||
|
|
||||||
y = 0;
|
y = 0;
|
||||||
mvwprintw (win, y, XPOS, "[1] %s ", opt1);
|
mvwprintw (win, y, XPOS, "[1] %s ", opt1);
|
||||||
print_option_incolor (win, conf->auto_save, y, XPOS + 4 + strlen (opt1));
|
print_bool_option_incolor (win, conf->auto_save, y,
|
||||||
|
XPOS + 4 + strlen (opt1));
|
||||||
mvwprintw (win, y + 1, XPOS,
|
mvwprintw (win, y + 1, XPOS,
|
||||||
_("(if set to YES, automatic save is done when quitting)"));
|
_("(if set to YES, automatic save is done when quitting)"));
|
||||||
y += YOFF;
|
y += YOFF;
|
||||||
mvwprintw (win, y, XPOS, "[2] %s ", opt2);
|
mvwprintw (win, y, XPOS, "[2] %s ", opt2);
|
||||||
print_option_incolor (win, conf->confirm_quit, y, XPOS + 4 + strlen (opt2));
|
print_bool_option_incolor (win, conf->confirm_quit, y,
|
||||||
|
XPOS + 4 + strlen (opt2));
|
||||||
mvwprintw (win, y + 1, XPOS,
|
mvwprintw (win, y + 1, XPOS,
|
||||||
_("(if set to YES, confirmation is required before quitting)"));
|
_("(if set to YES, confirmation is required before quitting)"));
|
||||||
y += YOFF;
|
y += YOFF;
|
||||||
mvwprintw (win, y, XPOS, "[3] %s ", opt3);
|
mvwprintw (win, y, XPOS, "[3] %s ", opt3);
|
||||||
print_option_incolor (win, conf->confirm_delete, y, XPOS + 4 + strlen (opt3));
|
print_bool_option_incolor (win, conf->confirm_delete, y,
|
||||||
|
XPOS + 4 + strlen (opt3));
|
||||||
mvwprintw (win, y + 1, XPOS,
|
mvwprintw (win, y + 1, XPOS,
|
||||||
_("(if set to YES, confirmation is required "
|
_("(if set to YES, confirmation is required "
|
||||||
"before deleting an event)"));
|
"before deleting an event)"));
|
||||||
y += YOFF;
|
y += YOFF;
|
||||||
mvwprintw (win, y, XPOS, "[4] %s ", opt4);
|
mvwprintw (win, y, XPOS, "[4] %s ", opt4);
|
||||||
print_option_incolor (win, conf->skip_system_dialogs, y,
|
print_bool_option_incolor (win, conf->skip_system_dialogs, y,
|
||||||
XPOS + 4 + strlen (opt4));
|
XPOS + 4 + strlen (opt4));
|
||||||
mvwprintw (win, y + 1, XPOS,
|
mvwprintw (win, y + 1, XPOS,
|
||||||
_("(if set to YES, messages about loaded "
|
_("(if set to YES, messages about loaded "
|
||||||
"and saved data will not be displayed)"));
|
"and saved data will not be displayed)"));
|
||||||
y += YOFF;
|
y += YOFF;
|
||||||
mvwprintw (win, y, XPOS, "[5] %s ", opt5);
|
mvwprintw (win, y, XPOS, "[5] %s ", opt5);
|
||||||
print_option_incolor (win, conf->skip_progress_bar, y,
|
print_bool_option_incolor (win, conf->skip_progress_bar, y,
|
||||||
XPOS + 4 + strlen (opt5));
|
XPOS + 4 + strlen (opt5));
|
||||||
mvwprintw (win, y + 1, XPOS,
|
mvwprintw (win, y + 1, XPOS,
|
||||||
_("(if set to YES, progress bar will not be displayed "
|
_("(if set to YES, progress bar will not be displayed "
|
||||||
"when saving data)"));
|
"when saving data)"));
|
||||||
y += YOFF;
|
y += YOFF;
|
||||||
mvwprintw (win, y, XPOS, "[6] %s ", opt6);
|
mvwprintw (win, y, XPOS, "[6] %s ", opt6);
|
||||||
print_option_incolor (win, calendar_week_begins_on_monday (), y,
|
print_bool_option_incolor (win, calendar_week_begins_on_monday (), y,
|
||||||
XPOS + 4 + strlen (opt6));
|
XPOS + 4 + strlen (opt6));
|
||||||
mvwprintw (win, y + 1, XPOS,
|
mvwprintw (win, y + 1, XPOS,
|
||||||
_("(if set to YES, monday is the first day of the week, "
|
_("(if set to YES, monday is the first day of the week, "
|
||||||
@ -770,11 +776,11 @@ print_general_options (WINDOW *win, conf_t *conf)
|
|||||||
mvwprintw (win, y + 1, XPOS, _("(Format to be used when entering a date: "));
|
mvwprintw (win, y + 1, XPOS, _("(Format to be used when entering a date: "));
|
||||||
mvwprintw (win, y + 2, XPOS, _(" 1-mm/dd/yyyy, 2-dd/mm/yyyy, 3-yyyy/mm/dd)"));
|
mvwprintw (win, y + 2, XPOS, _(" 1-mm/dd/yyyy, 2-dd/mm/yyyy, 3-yyyy/mm/dd)"));
|
||||||
|
|
||||||
return (y + 3);
|
return y + YOFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
general_conf_set_scrsize (scrollwin_t *sw)
|
conf_set_scrsize (scrollwin_t *sw)
|
||||||
{
|
{
|
||||||
sw->win.x = 0;
|
sw->win.x = 0;
|
||||||
sw->win.y = 0;
|
sw->win.y = 0;
|
||||||
@ -802,7 +808,7 @@ custom_general_config (conf_t *conf)
|
|||||||
char *buf = (char *) malloc (BUFSIZ);
|
char *buf = (char *) malloc (BUFSIZ);
|
||||||
|
|
||||||
clear ();
|
clear ();
|
||||||
general_conf_set_scrsize (&cwin);
|
conf_set_scrsize (&cwin);
|
||||||
snprintf (cwin.label, BUFSIZ, _("CalCurse %s | general options"), VERSION);
|
snprintf (cwin.label, BUFSIZ, _("CalCurse %s | general options"), VERSION);
|
||||||
wins_scrollwin_init (&cwin);
|
wins_scrollwin_init (&cwin);
|
||||||
wins_show (cwin.win.p, cwin.label);
|
wins_show (cwin.win.p, cwin.label);
|
||||||
@ -819,7 +825,7 @@ custom_general_config (conf_t *conf)
|
|||||||
wins_reset ();
|
wins_reset ();
|
||||||
wins_scrollwin_delete (&cwin);
|
wins_scrollwin_delete (&cwin);
|
||||||
wins_scrollwin_init (&cwin);
|
wins_scrollwin_init (&cwin);
|
||||||
general_conf_set_scrsize (&cwin);
|
conf_set_scrsize (&cwin);
|
||||||
wins_show (cwin.win.p, cwin.label);
|
wins_show (cwin.win.p, cwin.label);
|
||||||
cwin.first_visible_line = 0;
|
cwin.first_visible_line = 0;
|
||||||
delwin (win[STA].p);
|
delwin (win[STA].p);
|
||||||
@ -833,10 +839,10 @@ custom_general_config (conf_t *conf)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_MOVE_DOWN:
|
case KEY_MOVE_DOWN:
|
||||||
wins_scrollwin_down (&cwin);
|
wins_scrollwin_down (&cwin, 1);
|
||||||
break;
|
break;
|
||||||
case KEY_MOVE_UP:
|
case KEY_MOVE_UP:
|
||||||
wins_scrollwin_up (&cwin);
|
wins_scrollwin_up (&cwin, 1);
|
||||||
break;
|
break;
|
||||||
case '1':
|
case '1':
|
||||||
conf->auto_save = !conf->auto_save;
|
conf->auto_save = !conf->auto_save;
|
||||||
@ -884,3 +890,210 @@ custom_general_config (conf_t *conf)
|
|||||||
free (buf);
|
free (buf);
|
||||||
wins_scrollwin_delete (&cwin);
|
wins_scrollwin_delete (&cwin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_key_incolor (WINDOW *win, char *option, int pos_y, int pos_x)
|
||||||
|
{
|
||||||
|
const int color = ATTR_HIGHEST;
|
||||||
|
|
||||||
|
RETURN_IF (!option, _("Undefined option!"));
|
||||||
|
custom_apply_attr (win, color);
|
||||||
|
mvwprintw (win, pos_y, pos_x, "%s ", option);
|
||||||
|
custom_remove_attr (win, color);
|
||||||
|
wnoutrefresh (win);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
print_keys_bindings (WINDOW *win, int selected_row, int selected_elm, int yoff)
|
||||||
|
{
|
||||||
|
const int XPOS = 1;
|
||||||
|
const int EQUALPOS = 23;
|
||||||
|
const int KEYPOS = 25;
|
||||||
|
int noelm, action, y;
|
||||||
|
|
||||||
|
noelm = y = 0;
|
||||||
|
for (action = 0; action < NBKEYS; action++)
|
||||||
|
{
|
||||||
|
char actionstr[BUFSIZ];
|
||||||
|
int nbkeys;
|
||||||
|
|
||||||
|
nbkeys = keys_action_count_keys (action);
|
||||||
|
snprintf (actionstr, BUFSIZ, "%s", keys_get_label (action));
|
||||||
|
if (action == selected_row)
|
||||||
|
custom_apply_attr (win, ATTR_HIGHEST);
|
||||||
|
mvwprintw (win, y, XPOS, "%s ", actionstr);
|
||||||
|
mvwprintw (win, y, EQUALPOS, "=");
|
||||||
|
if (nbkeys == 0)
|
||||||
|
mvwprintw (win, y, KEYPOS, _("undefined"));
|
||||||
|
if (action == selected_row)
|
||||||
|
custom_remove_attr (win, ATTR_HIGHEST);
|
||||||
|
if (nbkeys > 0)
|
||||||
|
{
|
||||||
|
if (action == selected_row)
|
||||||
|
{
|
||||||
|
char *key;
|
||||||
|
int pos;
|
||||||
|
|
||||||
|
pos = KEYPOS;
|
||||||
|
while ((key = keys_action_nkey (action, noelm)) != 0)
|
||||||
|
{
|
||||||
|
if (noelm == selected_elm)
|
||||||
|
print_key_incolor (win, key, y, pos);
|
||||||
|
else
|
||||||
|
mvwprintw (win, y, pos, "%s ", key);
|
||||||
|
noelm++;
|
||||||
|
pos += strlen (key) + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mvwprintw (win, y, KEYPOS, "%s", keys_action_allkeys (action));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
y += yoff;
|
||||||
|
}
|
||||||
|
|
||||||
|
return noelm;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
custom_keys_config_bar (void)
|
||||||
|
{
|
||||||
|
binding_t quit = {_("Exit"), KEY_GENERIC_QUIT};
|
||||||
|
binding_t info = {_("Key info"), KEY_GENERIC_HELP};
|
||||||
|
binding_t add = {_("Add key"), KEY_ADD_ITEM};
|
||||||
|
binding_t del = {_("Del key"), KEY_DEL_ITEM};
|
||||||
|
binding_t edit = {_("Edit key"), KEY_EDIT_ITEM};
|
||||||
|
binding_t up = {_("Up"), KEY_MOVE_UP};
|
||||||
|
binding_t down = {_("Down"), KEY_MOVE_DOWN};
|
||||||
|
binding_t left = {_("Prev Key"), KEY_MOVE_LEFT};
|
||||||
|
binding_t right = {_("Next Key"), KEY_MOVE_RIGHT};
|
||||||
|
|
||||||
|
binding_t *binding[] = {
|
||||||
|
&quit, &info, &add, &del, &edit, &up, &down, &left, &right
|
||||||
|
};
|
||||||
|
int binding_size = sizeof (binding) / sizeof (binding[0]);
|
||||||
|
|
||||||
|
keys_display_bindings_bar (win[STA].p, binding, 0, binding_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
custom_keys_config (void)
|
||||||
|
{
|
||||||
|
scrollwin_t kwin;
|
||||||
|
int selrow, selelm, firstrow, lastrow, nbrowelm, nbdisplayed;
|
||||||
|
int keyval, used;
|
||||||
|
char *keystr;
|
||||||
|
WINDOW *grabwin;
|
||||||
|
const int LINESPERKEY = 2;
|
||||||
|
const int LABELLINES = 3;
|
||||||
|
|
||||||
|
clear ();
|
||||||
|
conf_set_scrsize (&kwin);
|
||||||
|
nbdisplayed = (kwin.win.h - LABELLINES) / LINESPERKEY;
|
||||||
|
snprintf (kwin.label, BUFSIZ, _("CalCurse %s | keys configuration"), VERSION);
|
||||||
|
wins_scrollwin_init (&kwin);
|
||||||
|
wins_show (kwin.win.p, kwin.label);
|
||||||
|
custom_keys_config_bar ();
|
||||||
|
selrow = selelm = 0;
|
||||||
|
nbrowelm = print_keys_bindings (kwin.pad.p, selrow, selelm, LINESPERKEY);
|
||||||
|
kwin.total_lines = NBKEYS * LINESPERKEY;
|
||||||
|
wins_scrollwin_display (&kwin);
|
||||||
|
firstrow = 0;
|
||||||
|
lastrow = firstrow + nbdisplayed - 1;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
int ch;
|
||||||
|
|
||||||
|
ch = keys_getch (win[STA].p);
|
||||||
|
switch (ch)
|
||||||
|
{
|
||||||
|
case KEY_MOVE_UP:
|
||||||
|
if (selrow > 0)
|
||||||
|
{
|
||||||
|
selrow--;
|
||||||
|
selelm = 0;
|
||||||
|
if (selrow == firstrow)
|
||||||
|
{
|
||||||
|
firstrow--;
|
||||||
|
lastrow--;
|
||||||
|
wins_scrollwin_up (&kwin, LINESPERKEY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case KEY_MOVE_DOWN:
|
||||||
|
if (selrow < NBKEYS - 1)
|
||||||
|
{
|
||||||
|
selrow++;
|
||||||
|
selelm = 0;
|
||||||
|
if (selrow == lastrow)
|
||||||
|
{
|
||||||
|
firstrow++;
|
||||||
|
lastrow++;
|
||||||
|
wins_scrollwin_down (&kwin, LINESPERKEY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case KEY_MOVE_LEFT:
|
||||||
|
if (selelm > 0)
|
||||||
|
selelm--;
|
||||||
|
break;
|
||||||
|
case KEY_MOVE_RIGHT:
|
||||||
|
if (selelm < nbrowelm - 1)
|
||||||
|
selelm++;
|
||||||
|
break;
|
||||||
|
case KEY_GENERIC_HELP:
|
||||||
|
keys_popup_info (selrow);
|
||||||
|
break;
|
||||||
|
case KEY_ADD_ITEM:
|
||||||
|
#define WINROW 10
|
||||||
|
#define WINCOL 50
|
||||||
|
do
|
||||||
|
{
|
||||||
|
grabwin = popup (WINROW, WINCOL, (row - WINROW) / 2,
|
||||||
|
(col - WINCOL) / 2,
|
||||||
|
_("Press the key you want to assign to:"),
|
||||||
|
keys_get_label (selrow), 0);
|
||||||
|
keyval = wgetch (grabwin);
|
||||||
|
used = keys_assign_binding (keyval, selrow);
|
||||||
|
if (used)
|
||||||
|
{
|
||||||
|
keys_e action;
|
||||||
|
|
||||||
|
action = keys_get_action (keyval);
|
||||||
|
ERROR_MSG (
|
||||||
|
_("This key is already in use for %s, "
|
||||||
|
"please choose another one."),
|
||||||
|
keys_get_label (action));
|
||||||
|
werase (kwin.pad.p);
|
||||||
|
nbrowelm = print_keys_bindings (kwin.pad.p, selrow, selelm,
|
||||||
|
LINESPERKEY);
|
||||||
|
wins_scrollwin_display (&kwin);
|
||||||
|
}
|
||||||
|
delwin (grabwin);
|
||||||
|
}
|
||||||
|
while (used);
|
||||||
|
selelm++;
|
||||||
|
#undef WINROW
|
||||||
|
#undef WINCOL
|
||||||
|
break;
|
||||||
|
case KEY_DEL_ITEM:
|
||||||
|
keystr = keys_action_nkey (selrow, selelm);
|
||||||
|
keyval = keys_str2int (keystr);
|
||||||
|
keys_remove_binding (keyval, selrow);
|
||||||
|
if (selelm > 0)
|
||||||
|
selelm--;
|
||||||
|
break;
|
||||||
|
case KEY_EDIT_ITEM:
|
||||||
|
break;
|
||||||
|
case KEY_GENERIC_QUIT:
|
||||||
|
wins_scrollwin_delete (&kwin);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
custom_keys_config_bar ();
|
||||||
|
werase (kwin.pad.p);
|
||||||
|
nbrowelm = print_keys_bindings (kwin.pad.p, selrow, selelm, LINESPERKEY);
|
||||||
|
wins_scrollwin_display (&kwin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: custom.h,v 1.12 2008/04/12 21:14:03 culot Exp $ */
|
/* $calcurse: custom.h,v 1.13 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -76,11 +76,12 @@ void custom_init_attr (void);
|
|||||||
void custom_apply_attr (WINDOW *, int);
|
void custom_apply_attr (WINDOW *, int);
|
||||||
void custom_remove_attr (WINDOW *, int);
|
void custom_remove_attr (WINDOW *, int);
|
||||||
void custom_load_conf (conf_t *, int);
|
void custom_load_conf (conf_t *, int);
|
||||||
void config_bar (void);
|
void custom_config_bar (void);
|
||||||
void layout_config (void);
|
void layout_config (void);
|
||||||
void custom_color_config (void);
|
void custom_color_config (void);
|
||||||
void custom_color_theme_name (char *);
|
void custom_color_theme_name (char *);
|
||||||
void custom_confwin_init (window_t *, char *);
|
void custom_confwin_init (window_t *, char *);
|
||||||
void custom_general_config (conf_t *);
|
void custom_general_config (conf_t *);
|
||||||
|
void custom_keys_config (void);
|
||||||
|
|
||||||
#endif /* CALCURSE_CUSTOM_H */
|
#endif /* CALCURSE_CUSTOM_H */
|
||||||
|
44
src/help.c
44
src/help.c
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: help.c,v 1.30 2008/11/16 17:42:53 culot Exp $ */
|
/* $calcurse: help.c,v 1.31 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -82,19 +82,19 @@ get_help_lines (char *text)
|
|||||||
* Write the desired help text inside the help pad, and return the number
|
* Write the desired help text inside the help pad, and return the number
|
||||||
* of lines that were written.
|
* of lines that were written.
|
||||||
*/
|
*/
|
||||||
static int
|
int
|
||||||
write_help_pad (window_t *win, help_page_t *hpage)
|
help_write_pad (window_t *win, char *title, char *text)
|
||||||
{
|
{
|
||||||
int nl_title = 0;
|
int nl_title = 0;
|
||||||
int nl_text = 0;
|
int nl_text = 0;
|
||||||
|
|
||||||
nl_text = get_help_lines (hpage->text);
|
nl_text = get_help_lines (text);
|
||||||
nl_title = get_help_lines (hpage->title);
|
nl_title = get_help_lines (title);
|
||||||
erase_window_part (win->p, 0, 0, BUFSIZ, win->w);
|
erase_window_part (win->p, 0, 0, BUFSIZ, win->w);
|
||||||
custom_apply_attr (win->p, ATTR_HIGHEST);
|
custom_apply_attr (win->p, ATTR_HIGHEST);
|
||||||
mvwprintw (win->p, 0, 0, "%s", hpage->title);
|
mvwprintw (win->p, 0, 0, "%s", title);
|
||||||
custom_remove_attr (win->p, ATTR_HIGHEST);
|
custom_remove_attr (win->p, ATTR_HIGHEST);
|
||||||
mvwprintw (win->p, nl_title, 0, "%s", hpage->text);
|
mvwprintw (win->p, nl_title, 0, "%s", text);
|
||||||
return (nl_text + nl_title);
|
return (nl_text + nl_title);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,21 +102,21 @@ write_help_pad (window_t *win, help_page_t *hpage)
|
|||||||
* Create and init help screen and its pad, which is used to make the scrolling
|
* Create and init help screen and its pad, which is used to make the scrolling
|
||||||
* faster.
|
* faster.
|
||||||
*/
|
*/
|
||||||
static void
|
void
|
||||||
help_wins_init (scrollwin_t *hwin)
|
help_wins_init (scrollwin_t *hwin, int x, int y, int h, int w)
|
||||||
{
|
{
|
||||||
const int PADOFFSET = 4;
|
const int PADOFFSET = 4;
|
||||||
const int TITLELINES = 3;
|
const int TITLELINES = 3;
|
||||||
|
|
||||||
hwin->win.x = 0;
|
hwin->win.x = x;
|
||||||
hwin->win.y = 0;
|
hwin->win.y = y;
|
||||||
hwin->win.h = (notify_bar ()) ? row - 3 : row - 2;
|
hwin->win.h = h;
|
||||||
hwin->win.w = col;
|
hwin->win.w = w;
|
||||||
|
|
||||||
hwin->pad.x = PADOFFSET;
|
hwin->pad.x = PADOFFSET;
|
||||||
hwin->pad.y = TITLELINES;
|
hwin->pad.y = TITLELINES;
|
||||||
hwin->pad.h = BUFSIZ;
|
hwin->pad.h = BUFSIZ;
|
||||||
hwin->pad.w = col - 2 * PADOFFSET + 1;
|
hwin->pad.w = hwin->win.w - 2 * PADOFFSET + 1;
|
||||||
|
|
||||||
snprintf (hwin->label, BUFSIZ, _("Calcurse %s | help"), VERSION);
|
snprintf (hwin->label, BUFSIZ, _("Calcurse %s | help"), VERSION);
|
||||||
wins_scrollwin_init (hwin);
|
wins_scrollwin_init (hwin);
|
||||||
@ -132,11 +132,11 @@ help_wins_reinit (scrollwin_t *hwin)
|
|||||||
{
|
{
|
||||||
wins_scrollwin_delete (hwin);
|
wins_scrollwin_delete (hwin);
|
||||||
wins_get_config ();
|
wins_get_config ();
|
||||||
help_wins_init (hwin);
|
help_wins_init (hwin, 0, 0, (notify_bar ()) ? row - 3 : row - 2, col);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset the screen, needed when resizing terminal for example. */
|
/* Reset the screen, needed when resizing terminal for example. */
|
||||||
static void
|
void
|
||||||
help_wins_reset (scrollwin_t *hwin)
|
help_wins_reset (scrollwin_t *hwin)
|
||||||
{
|
{
|
||||||
endwin ();
|
endwin ();
|
||||||
@ -596,7 +596,7 @@ help_screen (void)
|
|||||||
"Send your feedback or comments to : calcurse@culot.org\n"
|
"Send your feedback or comments to : calcurse@culot.org\n"
|
||||||
"Calcurse home page : http://culot.org/calcurse");
|
"Calcurse home page : http://culot.org/calcurse");
|
||||||
|
|
||||||
help_wins_init (&hwin);
|
help_wins_init (&hwin, 0, 0, (notify_bar ()) ? row - 3 : row - 2, col);
|
||||||
page = oldpage = HELP_MAIN;
|
page = oldpage = HELP_MAIN;
|
||||||
need_resize = 0;
|
need_resize = 0;
|
||||||
|
|
||||||
@ -611,16 +611,17 @@ help_screen (void)
|
|||||||
wins_get_config ();
|
wins_get_config ();
|
||||||
help_wins_reset (&hwin);
|
help_wins_reset (&hwin);
|
||||||
hwin.first_visible_line = 0;
|
hwin.first_visible_line = 0;
|
||||||
hwin.total_lines = write_help_pad (&hwin.pad, &hscr[oldpage]);
|
hwin.total_lines = help_write_pad (&hwin.pad, hscr[oldpage].title,
|
||||||
|
hscr[oldpage].text);
|
||||||
need_resize = 1;
|
need_resize = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_GENERIC_SCROLL_DOWN:
|
case KEY_GENERIC_SCROLL_DOWN:
|
||||||
wins_scrollwin_down (&hwin);
|
wins_scrollwin_down (&hwin, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_GENERIC_SCROLL_UP:
|
case KEY_GENERIC_SCROLL_UP:
|
||||||
wins_scrollwin_up (&hwin);
|
wins_scrollwin_up (&hwin, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -628,7 +629,8 @@ help_screen (void)
|
|||||||
if (page != NOPAGE)
|
if (page != NOPAGE)
|
||||||
{
|
{
|
||||||
hwin.first_visible_line = 0;
|
hwin.first_visible_line = 0;
|
||||||
hwin.total_lines = write_help_pad (&hwin.pad, &hscr[page]);
|
hwin.total_lines = help_write_pad (&hwin.pad, hscr[page].title,
|
||||||
|
hscr[page].text);
|
||||||
oldpage = page;
|
oldpage = page;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: help.h,v 1.5 2008/04/12 21:14:03 culot Exp $ */
|
/* $calcurse: help.h,v 1.6 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -27,6 +27,8 @@
|
|||||||
#ifndef CALCURSE_HELP_H
|
#ifndef CALCURSE_HELP_H
|
||||||
#define CALCURSE_HELP_H
|
#define CALCURSE_HELP_H
|
||||||
|
|
||||||
|
#include "wins.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char *title;
|
char *title;
|
||||||
@ -35,5 +37,8 @@ typedef struct
|
|||||||
help_page_t;
|
help_page_t;
|
||||||
|
|
||||||
void help_screen (void);
|
void help_screen (void);
|
||||||
|
void help_wins_init (scrollwin_t *, int, int, int, int);
|
||||||
|
void help_wins_reset (scrollwin_t *);
|
||||||
|
int help_write_pad (window_t *, char *, char *);
|
||||||
|
|
||||||
#endif /* CALCURSE_HELP_H */
|
#endif /* CALCURSE_HELP_H */
|
||||||
|
224
src/keys.c
224
src/keys.c
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: keys.c,v 1.3 2008/11/16 17:42:53 culot Exp $ */
|
/* $calcurse: keys.c,v 1.4 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -25,9 +25,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "custom.h"
|
||||||
#include "keys.h"
|
#include "keys.h"
|
||||||
|
|
||||||
#define MAXKEYVAL 256
|
#define MAXKEYVAL 256
|
||||||
@ -104,7 +106,9 @@ dump_intro (FILE *fd)
|
|||||||
"# To define bindings which use the CONTROL key, prefix the key with "
|
"# To define bindings which use the CONTROL key, prefix the key with "
|
||||||
"'C-'.\n"
|
"'C-'.\n"
|
||||||
"# The escape and horizontal Tab key can be specified using the 'ESC'\n"
|
"# The escape and horizontal Tab key can be specified using the 'ESC'\n"
|
||||||
"# and 'TAB' keyword, respectively.\n");
|
"# and 'TAB' keyword, respectively.\n#\n"
|
||||||
|
"# A description of what each ACTION keyword is used for is available\n"
|
||||||
|
"# from calcurse online configuration menu.\n");
|
||||||
|
|
||||||
fprintf (fd, "%s\n", intro);
|
fprintf (fd, "%s\n", intro);
|
||||||
}
|
}
|
||||||
@ -144,7 +148,7 @@ keys_get_label (keys_e key)
|
|||||||
return keydef[key].label;
|
return keydef[key].label;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
keys_e
|
||||||
keys_get_action (int pressed)
|
keys_get_action (int pressed)
|
||||||
{
|
{
|
||||||
if (pressed < 0 || pressed > MAXKEYVAL)
|
if (pressed < 0 || pressed > MAXKEYVAL)
|
||||||
@ -256,7 +260,9 @@ keys_str2int (char *key)
|
|||||||
return (int)key[0];
|
return (int)key[0];
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!strncmp (key, CONTROL_KEY.str, CONTROL_KEY.len))
|
if (key[0] == '^')
|
||||||
|
return CTRL ((int)key[1]);
|
||||||
|
else if (!strncmp (key, CONTROL_KEY.str, CONTROL_KEY.len))
|
||||||
return CTRL ((int)key[CONTROL_KEY.len]);
|
return CTRL ((int)key[CONTROL_KEY.len]);
|
||||||
else if (!strncmp (key, TAB_KEY.str, TAB_KEY.len))
|
else if (!strncmp (key, TAB_KEY.str, TAB_KEY.len))
|
||||||
return TAB;
|
return TAB;
|
||||||
@ -270,13 +276,50 @@ keys_str2int (char *key)
|
|||||||
char *
|
char *
|
||||||
keys_int2str (int key)
|
keys_int2str (int key)
|
||||||
{
|
{
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case TAB:
|
||||||
|
return "TAB";
|
||||||
|
case ESCAPE:
|
||||||
|
return "ESC";
|
||||||
|
default:
|
||||||
return keyname (key);
|
return keyname (key);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
keys_action_count_keys (keys_e action)
|
||||||
|
{
|
||||||
|
struct key_str_s *key;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
for (key = keys[action]; key; key = key->next)
|
||||||
|
i++;
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
keys_action_firstkey (keys_e action)
|
keys_action_firstkey (keys_e action)
|
||||||
{
|
{
|
||||||
return (keys[action] != NULL) ? keys[action]->str : NULL;
|
return (keys[action] != NULL) ? keys[action]->str : "XXX";
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
keys_action_nkey (keys_e action, int keynum)
|
||||||
|
{
|
||||||
|
struct key_str_s *key;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
for (key = keys[action]; key; key = key->next)
|
||||||
|
{
|
||||||
|
if (i == keynum)
|
||||||
|
return key->str;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return (char *)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
@ -298,3 +341,174 @@ keys_action_allkeys (keys_e action)
|
|||||||
|
|
||||||
return keystr;
|
return keystr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Need this to display keys properly inside status bar. */
|
||||||
|
static char *
|
||||||
|
keys_format_label (char *key, int keylen)
|
||||||
|
{
|
||||||
|
static char fmtkey[BUFSIZ];
|
||||||
|
const int len = strlen (key);
|
||||||
|
char *dot = ".";
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (keylen > BUFSIZ)
|
||||||
|
return (char *)0;
|
||||||
|
|
||||||
|
bzero (fmtkey, sizeof (fmtkey));
|
||||||
|
if (len == 0)
|
||||||
|
snprintf (fmtkey, sizeof (fmtkey), "?");
|
||||||
|
else if (len <= keylen)
|
||||||
|
{
|
||||||
|
for (i = 0; i < keylen - len; i++)
|
||||||
|
fmtkey[i] = ' ';
|
||||||
|
strncat (fmtkey, key, keylen);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < keylen - 1; i++)
|
||||||
|
fmtkey[i] = key[i];
|
||||||
|
strncat (fmtkey, dot, strlen (dot));
|
||||||
|
}
|
||||||
|
return fmtkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
keys_display_bindings_bar (WINDOW *win, binding_t **binding, int first_key,
|
||||||
|
int last_key)
|
||||||
|
{
|
||||||
|
int i, j, cmdlen, space_between_cmds;
|
||||||
|
|
||||||
|
/* Total length of a command. */
|
||||||
|
cmdlen = KEYS_KEYLEN + 1 + KEYS_LABELEN;
|
||||||
|
space_between_cmds = floor (col / KEYS_CMDS_PER_LINE - cmdlen);
|
||||||
|
cmdlen += space_between_cmds;
|
||||||
|
|
||||||
|
j = 0;
|
||||||
|
erase_status_bar ();
|
||||||
|
for (i = first_key; i < last_key; i += 2)
|
||||||
|
{
|
||||||
|
char key[KEYS_KEYLEN + 1], *fmtkey;
|
||||||
|
const int KEY_POS = j * cmdlen;
|
||||||
|
const int LABEL_POS = j * cmdlen + KEYS_KEYLEN + 1;
|
||||||
|
|
||||||
|
strncpy (key, keys_action_firstkey (binding[i]->action), KEYS_KEYLEN);
|
||||||
|
fmtkey = keys_format_label (key, KEYS_KEYLEN);
|
||||||
|
custom_apply_attr (win, ATTR_HIGHEST);
|
||||||
|
mvwprintw (win, 0, KEY_POS, fmtkey);
|
||||||
|
if (i + 1 != last_key)
|
||||||
|
{
|
||||||
|
strncpy (key, keys_action_firstkey (binding[i + 1]->action),
|
||||||
|
KEYS_KEYLEN);
|
||||||
|
fmtkey = keys_format_label (key, KEYS_KEYLEN);
|
||||||
|
mvwprintw (win, 1, KEY_POS, fmtkey);
|
||||||
|
}
|
||||||
|
custom_remove_attr (win, ATTR_HIGHEST);
|
||||||
|
mvwprintw (win, 0, LABEL_POS, binding[i]->label);
|
||||||
|
if (i + 1 != last_key)
|
||||||
|
mvwprintw (win, 1, LABEL_POS, binding[i + 1]->label);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
wnoutrefresh (win);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display information about the given key.
|
||||||
|
* (could not add the keys descriptions to keydef variable, because of i18n).
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
keys_popup_info (keys_e key)
|
||||||
|
{
|
||||||
|
char *info[NBKEYS];
|
||||||
|
WINDOW *infowin;
|
||||||
|
|
||||||
|
info[KEY_GENERIC_ESCAPE] =
|
||||||
|
_("Cancel the ongoing action.");
|
||||||
|
info[KEY_GENERIC_CREDITS] =
|
||||||
|
_("Print general information about calcurse's authors, license, etc.");
|
||||||
|
info[KEY_GENERIC_HELP] =
|
||||||
|
_("Display hints whenever some help screens are available.");
|
||||||
|
info[KEY_GENERIC_QUIT] =
|
||||||
|
_("Exit from the current menu, or quit calcurse.");
|
||||||
|
info[KEY_GENERIC_SAVE] =
|
||||||
|
_("Save calcurse data.");
|
||||||
|
info[KEY_GENERIC_CHANGE_VIEW] =
|
||||||
|
_("Select next panel in calcurse main screen.");
|
||||||
|
info[KEY_GENERIC_IMPORT] =
|
||||||
|
_("Import data from an external file.");
|
||||||
|
info[KEY_GENERIC_EXPORT] =
|
||||||
|
_("Export data to a new file format.");
|
||||||
|
info[KEY_GENERIC_GOTO] =
|
||||||
|
_("Select the day to go to.");
|
||||||
|
info[KEY_GENERIC_OTHER_CMD] =
|
||||||
|
_("Show next possible actions inside status bar.");
|
||||||
|
info[KEY_GENERIC_CONFIG_MENU] =
|
||||||
|
_("Enter the configuration menu.");
|
||||||
|
info[KEY_GENERIC_REDRAW] =
|
||||||
|
_("Redraw calcurse's screen.");
|
||||||
|
info[KEY_GENERIC_ADD_APPT] =
|
||||||
|
_("Add an appointment, whichever panel is currently selected.");
|
||||||
|
info[KEY_GENERIC_ADD_TODO] =
|
||||||
|
_("Add a todo item, whichever panel is currently selected.");
|
||||||
|
info[KEY_GENERIC_NEXT_DAY] =
|
||||||
|
_("Move to next day in calendar, whichever panel is currently selected.");
|
||||||
|
info[KEY_GENERIC_PREV_DAY] =
|
||||||
|
_("Move to previous day in calendar, whichever panel is currently "
|
||||||
|
"selected.");
|
||||||
|
info[KEY_GENERIC_NEXT_WEEK] =
|
||||||
|
_("Move to next week in calendar, whichever panel is currently selected.");
|
||||||
|
info[KEY_GENERIC_PREV_WEEK] =
|
||||||
|
_("Move to previous week in calendar, whichever panel is currently "
|
||||||
|
"selected");
|
||||||
|
info[KEY_GENERIC_SCROLL_DOWN] =
|
||||||
|
_("Scroll window down (e.g. when displaying text inside a popup window).");
|
||||||
|
info[KEY_GENERIC_SCROLL_UP] =
|
||||||
|
_("Scroll window up (e.g. when displaying text inside a popup window).");
|
||||||
|
info[KEY_GENERIC_GOTO_TODAY] =
|
||||||
|
_("Go to today, whichever panel is selected.");
|
||||||
|
info[KEY_MOVE_RIGHT] =
|
||||||
|
_("Move to the right.");
|
||||||
|
info[KEY_MOVE_LEFT] =
|
||||||
|
_("Move to the left.");
|
||||||
|
info[KEY_MOVE_DOWN] =
|
||||||
|
_("Move down.");
|
||||||
|
info[KEY_MOVE_UP] =
|
||||||
|
_("Move up.");
|
||||||
|
info[KEY_START_OF_WEEK] =
|
||||||
|
_("Select the first day of the current week when inside the calendar "
|
||||||
|
"panel.");
|
||||||
|
info[KEY_END_OF_WEEK] =
|
||||||
|
_("Select the last day of the current week when inside the calendar "
|
||||||
|
"panel.");
|
||||||
|
info[KEY_ADD_ITEM] =
|
||||||
|
_("Add an item to the currently selected panel.");
|
||||||
|
info[KEY_DEL_ITEM] =
|
||||||
|
_("Delete the currently selected item.");
|
||||||
|
info[KEY_EDIT_ITEM] =
|
||||||
|
_("Edit the currently seleted item.");
|
||||||
|
info[KEY_VIEW_ITEM] =
|
||||||
|
_("Display the currently selected item inside a popup window.");
|
||||||
|
info[KEY_FLAG_ITEM] =
|
||||||
|
_("Flag the currently selected item as important.");
|
||||||
|
info[KEY_REPEAT_ITEM] =
|
||||||
|
_("Repeat an item");
|
||||||
|
info[KEY_EDIT_NOTE] =
|
||||||
|
_("Attach (or edit if one exists) a note to the currently selected item");
|
||||||
|
info[KEY_VIEW_NOTE] =
|
||||||
|
_("View the note attached to the currently selected item.");
|
||||||
|
info[KEY_RAISE_PRIORITY] =
|
||||||
|
_("Raise a task priority inside the todo panel.");
|
||||||
|
info[KEY_LOWER_PRIORITY] =
|
||||||
|
_("Lower a task priority inside the todo panel.");
|
||||||
|
|
||||||
|
if (key < 0 || key > NBKEYS)
|
||||||
|
return;
|
||||||
|
|
||||||
|
#define WINROW 10
|
||||||
|
#define WINCOL (col - 4)
|
||||||
|
infowin = popup (WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2,
|
||||||
|
keydef[key].label, info[key], 1);
|
||||||
|
keys_getch (infowin);
|
||||||
|
delwin (infowin);
|
||||||
|
#undef WINROW
|
||||||
|
#undef WINCOL
|
||||||
|
}
|
||||||
|
19
src/keys.h
19
src/keys.h
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: keys.h,v 1.3 2008/11/16 17:42:53 culot Exp $ */
|
/* $calcurse: keys.h,v 1.4 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -28,10 +28,13 @@
|
|||||||
#define CALCURSE_KEYS_H
|
#define CALCURSE_KEYS_H
|
||||||
|
|
||||||
#define CTRLVAL 0x1F
|
#define CTRLVAL 0x1F
|
||||||
#define TAB 9
|
|
||||||
|
|
||||||
#define CTRL(x) ((x) & CTRLVAL)
|
#define CTRL(x) ((x) & CTRLVAL)
|
||||||
#define ESCAPE 27
|
#define ESCAPE 27
|
||||||
|
#define TAB 9
|
||||||
|
|
||||||
|
#define KEYS_KEYLEN 3 /* length of each keybinding */
|
||||||
|
#define KEYS_LABELEN 8 /* length of command description */
|
||||||
|
#define KEYS_CMDS_PER_LINE 6 /* max number of commands per line */
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
@ -79,15 +82,25 @@ typedef enum
|
|||||||
}
|
}
|
||||||
keys_e;
|
keys_e;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *label;
|
||||||
|
keys_e action;
|
||||||
|
} binding_t;
|
||||||
|
|
||||||
void keys_init (void);
|
void keys_init (void);
|
||||||
void keys_dump_defaults (char *);
|
void keys_dump_defaults (char *);
|
||||||
char *keys_get_label (keys_e);
|
char *keys_get_label (keys_e);
|
||||||
|
keys_e keys_get_action (int);
|
||||||
keys_e keys_getch (WINDOW *win);
|
keys_e keys_getch (WINDOW *win);
|
||||||
int keys_assign_binding (int, keys_e);
|
int keys_assign_binding (int, keys_e);
|
||||||
void keys_remove_binding (int, keys_e);
|
void keys_remove_binding (int, keys_e);
|
||||||
int keys_str2int (char *);
|
int keys_str2int (char *);
|
||||||
char *keys_int2str (int);
|
char *keys_int2str (int);
|
||||||
|
int keys_action_count_keys (keys_e);
|
||||||
char *keys_action_firstkey (keys_e);
|
char *keys_action_firstkey (keys_e);
|
||||||
|
char *keys_action_nkey (keys_e, int);
|
||||||
char *keys_action_allkeys (keys_e);
|
char *keys_action_allkeys (keys_e);
|
||||||
|
void keys_display_bindings_bar (WINDOW *, binding_t **, int, int);
|
||||||
|
void keys_popup_info (keys_e);
|
||||||
|
|
||||||
#endif /* CALCURSE_KEYS_H */
|
#endif /* CALCURSE_KEYS_H */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: notify.c,v 1.28 2008/11/16 17:42:53 culot Exp $ */
|
/* $calcurse: notify.c,v 1.29 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -479,7 +479,7 @@ notify_print_options (WINDOW *optwin, int col)
|
|||||||
x = x_pos + x_offset + l;
|
x = x_pos + x_offset + l;
|
||||||
mvwprintw (optwin, y_pos, x_pos, "[1] %s", opt[SHOW].name);
|
mvwprintw (optwin, y_pos, x_pos, "[1] %s", opt[SHOW].name);
|
||||||
erase_window_part (optwin, x, y_pos, maxcol, y_pos);
|
erase_window_part (optwin, x, y_pos, maxcol, y_pos);
|
||||||
print_option_incolor (optwin, nbar->show, y_pos, x);
|
print_bool_option_incolor (optwin, nbar->show, y_pos, x);
|
||||||
mvwprintw (optwin, y_pos + 1, x_pos, opt[SHOW].desc);
|
mvwprintw (optwin, y_pos + 1, x_pos, opt[SHOW].desc);
|
||||||
|
|
||||||
for (i = 1; i < NB_OPT; i++)
|
for (i = 1; i < NB_OPT; i++)
|
||||||
|
104
src/utils.c
104
src/utils.c
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: utils.c,v 1.53 2008/11/16 17:42:53 culot Exp $ */
|
/* $calcurse: utils.c,v 1.54 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -45,12 +45,6 @@
|
|||||||
#define NB_TOD_CMDS 30 /* same thing while in todo view */
|
#define NB_TOD_CMDS 30 /* same thing while in todo view */
|
||||||
#define TOTAL_CMDS NB_CAL_CMDS + NB_APP_CMDS + NB_TOD_CMDS
|
#define TOTAL_CMDS NB_CAL_CMDS + NB_APP_CMDS + NB_TOD_CMDS
|
||||||
#define CMDS_PER_LINE 6 /* max number of commands per line */
|
#define CMDS_PER_LINE 6 /* max number of commands per line */
|
||||||
#define KEY_LENGTH 4 /* length of each keybinding + one space */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
char *label;
|
|
||||||
keys_e action;
|
|
||||||
} binding_t;
|
|
||||||
|
|
||||||
static unsigned status_page;
|
static unsigned status_page;
|
||||||
|
|
||||||
@ -122,10 +116,7 @@ warnbox (const char *msg)
|
|||||||
return;
|
return;
|
||||||
strncpy (displmsg, msg, MSGLEN);
|
strncpy (displmsg, msg, MSGLEN);
|
||||||
warnwin = popup (WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2,
|
warnwin = popup (WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2,
|
||||||
"/!\\");
|
"/!\\", displmsg, 1);
|
||||||
custom_apply_attr (warnwin, ATTR_HIGHEST);
|
|
||||||
mvwprintw (warnwin, 5, (WINCOL - strlen (displmsg)) / 2, "%s", displmsg);
|
|
||||||
custom_remove_attr (warnwin, ATTR_HIGHEST);
|
|
||||||
wrefresh (warnwin);
|
wrefresh (warnwin);
|
||||||
keys_getch (warnwin);
|
keys_getch (warnwin);
|
||||||
delwin (warnwin);
|
delwin (warnwin);
|
||||||
@ -172,24 +163,30 @@ erase_window_part (WINDOW *win, int first_col, int first_row, int last_col,
|
|||||||
|
|
||||||
/* draws a popup window */
|
/* draws a popup window */
|
||||||
WINDOW *
|
WINDOW *
|
||||||
popup (int pop_row, int pop_col, int pop_y, int pop_x, char *pop_lab)
|
popup (int pop_row, int pop_col, int pop_y, int pop_x, char *title, char *msg,
|
||||||
|
int hint)
|
||||||
{
|
{
|
||||||
char *txt_pop = _("Press any key to continue...");
|
char *any_key = _("Press any key to continue...");
|
||||||
char label[BUFSIZ];
|
char label[BUFSIZ];
|
||||||
WINDOW *popup_win;
|
WINDOW *popup_win;
|
||||||
|
const int MSGXPOS = 5;
|
||||||
|
|
||||||
popup_win = newwin (pop_row, pop_col, pop_y, pop_x);
|
popup_win = newwin (pop_row, pop_col, pop_y, pop_x);
|
||||||
keypad (popup_win, TRUE);
|
keypad (popup_win, TRUE);
|
||||||
custom_apply_attr (popup_win, ATTR_HIGHEST);
|
custom_apply_attr (popup_win, ATTR_HIGHEST);
|
||||||
box (popup_win, 0, 0);
|
box (popup_win, 0, 0);
|
||||||
snprintf (label, BUFSIZ, "%s", pop_lab);
|
snprintf (label, BUFSIZ, "%s", title);
|
||||||
wins_show (popup_win, label);
|
wins_show (popup_win, label);
|
||||||
mvwprintw (popup_win, pop_row - 2, pop_col - (strlen (txt_pop) + 1), "%s",
|
if (msg)
|
||||||
txt_pop);
|
mvwprintw (popup_win, MSGXPOS, (pop_col - strlen (msg)) / 2, "%s", msg);
|
||||||
|
if (hint)
|
||||||
|
mvwprintw (popup_win, pop_row - 2, pop_col - (strlen (any_key) + 1), "%s",
|
||||||
|
any_key);
|
||||||
custom_remove_attr (popup_win, ATTR_HIGHEST);
|
custom_remove_attr (popup_win, ATTR_HIGHEST);
|
||||||
wnoutrefresh (popup_win);
|
wrefresh (popup_win);
|
||||||
doupdate ();
|
doupdate ();
|
||||||
return (popup_win);
|
|
||||||
|
return popup_win;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* prints in middle of a panel */
|
/* prints in middle of a panel */
|
||||||
@ -442,32 +439,6 @@ is_all_digit (char *string)
|
|||||||
return (all_digit);
|
return (all_digit);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Need this to display keys properly inside status bar. */
|
|
||||||
static char *
|
|
||||||
format_key (char *key)
|
|
||||||
{
|
|
||||||
static char fmtkey[KEY_LENGTH];
|
|
||||||
|
|
||||||
switch (strlen (key))
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
snprintf (fmtkey, KEY_LENGTH, " ?");
|
|
||||||
case 1:
|
|
||||||
snprintf (fmtkey, KEY_LENGTH, " %s", key);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
snprintf (fmtkey, KEY_LENGTH, " %s", key);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
snprintf (fmtkey, KEY_LENGTH, "%s", key);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
snprintf (fmtkey, KEY_LENGTH, "%c%c.", key[0], key[1]);
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
|
||||||
return fmtkey;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Draws the status bar.
|
* Draws the status bar.
|
||||||
* To add a keybinding, insert a new binding_t item, add it in the *binding
|
* To add a keybinding, insert a new binding_t item, add it in the *binding
|
||||||
@ -479,7 +450,7 @@ status_bar (void)
|
|||||||
{
|
{
|
||||||
#define NB_PANELS 3 /* 3 panels: CALENDAR, APPOINTMENT, TODO */
|
#define NB_PANELS 3 /* 3 panels: CALENDAR, APPOINTMENT, TODO */
|
||||||
window_e which_pan;
|
window_e which_pan;
|
||||||
int cmd_length, space_between_cmds, start, end, i, j;
|
int start, end;
|
||||||
const int pos[NB_PANELS + 1] =
|
const int pos[NB_PANELS + 1] =
|
||||||
{ 0, NB_CAL_CMDS, NB_CAL_CMDS + NB_APP_CMDS, TOTAL_CMDS };
|
{ 0, NB_CAL_CMDS, NB_CAL_CMDS + NB_APP_CMDS, TOTAL_CMDS };
|
||||||
|
|
||||||
@ -533,44 +504,11 @@ status_bar (void)
|
|||||||
&gnweek, &gpweek, &togo, &othr, &today, &conf, &appt, &todo, &crdts, &othr
|
&gnweek, &gpweek, &togo, &othr, &today, &conf, &appt, &todo, &crdts, &othr
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LABEL_LENGTH 8 /* length of command description */
|
|
||||||
/* Total length of a command. */
|
|
||||||
cmd_length = KEY_LENGTH + LABEL_LENGTH;
|
|
||||||
space_between_cmds = floor (col / CMDS_PER_LINE - cmd_length);
|
|
||||||
cmd_length += space_between_cmds;
|
|
||||||
|
|
||||||
/* Drawing the keybinding with attribute and label without. */
|
/* Drawing the keybinding with attribute and label without. */
|
||||||
erase_status_bar ();
|
|
||||||
which_pan = wins_slctd ();
|
which_pan = wins_slctd ();
|
||||||
start = pos[which_pan] + 2 * CMDS_PER_LINE * (status_page - 1);
|
start = pos[which_pan] + 2 * KEYS_CMDS_PER_LINE * (status_page - 1);
|
||||||
end = MIN (start + 2 * CMDS_PER_LINE, pos[which_pan + 1]);
|
end = MIN (start + 2 * KEYS_CMDS_PER_LINE, pos[which_pan + 1]);
|
||||||
j = 0;
|
keys_display_bindings_bar (win[STA].p, binding, start, end);
|
||||||
for (i = start; i < end; i += 2)
|
|
||||||
{
|
|
||||||
char key[KEY_LENGTH], *fmtkey;
|
|
||||||
|
|
||||||
strncpy (key, keys_action_firstkey (binding[i]->action), KEY_LENGTH);
|
|
||||||
fmtkey = format_key (key);
|
|
||||||
custom_apply_attr (win[STA].p, ATTR_HIGHEST);
|
|
||||||
mvwprintw (win[STA].p, 0, j * cmd_length, fmtkey);
|
|
||||||
if (i + 1 != end)
|
|
||||||
{
|
|
||||||
strncpy (key, keys_action_firstkey (binding[i + 1]->action),
|
|
||||||
KEY_LENGTH);
|
|
||||||
fmtkey = format_key (key);
|
|
||||||
mvwprintw (win[STA].p, 1, j * cmd_length, fmtkey);
|
|
||||||
}
|
|
||||||
custom_remove_attr (win[STA].p, ATTR_HIGHEST);
|
|
||||||
mvwprintw (win[STA].p, 0, j * cmd_length + KEY_LENGTH,
|
|
||||||
binding[i]->label);
|
|
||||||
if (i + 1 != end)
|
|
||||||
mvwprintw (win[STA].p, 1, j * cmd_length + KEY_LENGTH,
|
|
||||||
binding[i + 1]->label);
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
wnoutrefresh (win[STA].p);
|
|
||||||
#undef LABEL_LENGTH
|
|
||||||
#undef NB_PANELS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
long
|
long
|
||||||
@ -810,7 +748,7 @@ item_in_popup (char *saved_a_start, char *saved_a_end, char *msg,
|
|||||||
const int padl = winl - 2, padw = winw - margin_left;
|
const int padl = winl - 2, padw = winw - margin_left;
|
||||||
|
|
||||||
pad = newpad (padl, padw);
|
pad = newpad (padl, padw);
|
||||||
popup_win = popup (winl, winw, 1, 2, pop_title);
|
popup_win = popup (winl, winw, 1, 2, pop_title, (char *)0, 1);
|
||||||
if (strncmp (pop_title, _("Appointment"), 11) == 0)
|
if (strncmp (pop_title, _("Appointment"), 11) == 0)
|
||||||
{
|
{
|
||||||
mvwprintw (popup_win, margin_top, margin_left, "- %s -> %s",
|
mvwprintw (popup_win, margin_top, margin_left, "- %s -> %s",
|
||||||
@ -923,7 +861,7 @@ mystrtol (const char *str)
|
|||||||
|
|
||||||
/* Print the given option value with appropriate color. */
|
/* Print the given option value with appropriate color. */
|
||||||
void
|
void
|
||||||
print_option_incolor (WINDOW *win, bool option, int pos_y, int pos_x)
|
print_bool_option_incolor (WINDOW *win, bool option, int pos_y, int pos_x)
|
||||||
{
|
{
|
||||||
int color = 0;
|
int color = 0;
|
||||||
char option_value[BUFSIZ] = "";
|
char option_value[BUFSIZ] = "";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: utils.h,v 1.38 2008/11/16 17:42:53 culot Exp $ */
|
/* $calcurse: utils.h,v 1.39 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -118,7 +118,7 @@ void warnbox (const char *);
|
|||||||
void status_mesg (char *, char *);
|
void status_mesg (char *, char *);
|
||||||
void erase_status_bar (void);
|
void erase_status_bar (void);
|
||||||
void erase_window_part (WINDOW *, int, int, int, int);
|
void erase_window_part (WINDOW *, int, int, int, int);
|
||||||
WINDOW *popup (int, int, int, int, char *);
|
WINDOW *popup (int, int, int, int, char *, char *, int);
|
||||||
void print_in_middle (WINDOW *, int, int, int, char *);
|
void print_in_middle (WINDOW *, int, int, int, char *);
|
||||||
int getstring (WINDOW *, char *, int, int, int);
|
int getstring (WINDOW *, char *, int, int, int);
|
||||||
int updatestring (WINDOW *, char **, int, int);
|
int updatestring (WINDOW *, char **, int, int);
|
||||||
@ -141,7 +141,7 @@ long get_today (void);
|
|||||||
long now (void);
|
long now (void);
|
||||||
char *mycpy (const char *);
|
char *mycpy (const char *);
|
||||||
long mystrtol (const char *);
|
long mystrtol (const char *);
|
||||||
void print_option_incolor (WINDOW *, bool, int, int);
|
void print_bool_option_incolor (WINDOW *, bool, int, int);
|
||||||
char *new_tempfile (const char *, int);
|
char *new_tempfile (const char *, int);
|
||||||
void erase_note (char **, erase_flag_e);
|
void erase_note (char **, erase_flag_e);
|
||||||
int parse_date (char *, int, int *, int *, int *);
|
int parse_date (char *, int, int *, int *, int *);
|
||||||
|
10
src/wins.c
10
src/wins.c
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: wins.c,v 1.17 2008/09/20 12:47:06 culot Exp $ */
|
/* $calcurse: wins.c,v 1.18 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -170,18 +170,18 @@ wins_scrollwin_display (scrollwin_t *sw)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
wins_scrollwin_up (scrollwin_t *sw)
|
wins_scrollwin_up (scrollwin_t *sw, int amount)
|
||||||
{
|
{
|
||||||
if (sw->first_visible_line > 0)
|
if (sw->first_visible_line > 0)
|
||||||
sw->first_visible_line--;
|
sw->first_visible_line -= amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
wins_scrollwin_down (scrollwin_t *sw)
|
wins_scrollwin_down (scrollwin_t *sw, int amount)
|
||||||
{
|
{
|
||||||
if (sw->total_lines
|
if (sw->total_lines
|
||||||
> (sw->first_visible_line + sw->win.h - sw->pad.y - 1))
|
> (sw->first_visible_line + sw->win.h - sw->pad.y - 1))
|
||||||
sw->first_visible_line++;
|
sw->first_visible_line += amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: wins.h,v 1.9 2008/04/19 09:22:14 culot Exp $ */
|
/* $calcurse: wins.h,v 1.10 2008/11/23 20:38:56 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -72,8 +72,8 @@ void wins_init (void);
|
|||||||
void wins_scrollwin_init (scrollwin_t *);
|
void wins_scrollwin_init (scrollwin_t *);
|
||||||
void wins_scrollwin_delete (scrollwin_t *);
|
void wins_scrollwin_delete (scrollwin_t *);
|
||||||
void wins_scrollwin_display (scrollwin_t *);
|
void wins_scrollwin_display (scrollwin_t *);
|
||||||
void wins_scrollwin_up (scrollwin_t *);
|
void wins_scrollwin_up (scrollwin_t *, int);
|
||||||
void wins_scrollwin_down (scrollwin_t *);
|
void wins_scrollwin_down (scrollwin_t *, int);
|
||||||
void wins_reinit (void);
|
void wins_reinit (void);
|
||||||
void wins_show (WINDOW *, char *);
|
void wins_show (WINDOW *, char *);
|
||||||
void wins_get_config (void);
|
void wins_get_config (void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user