mirror of
https://github.com/MidnightCommander/mc
synced 2025-03-12 10:53:23 +03:00
* key.h (define_sequence): Change declaration to return int.
* key.c (define_sequence): Return 1 on success, 0 on error. * learn.c (learn_button): Don't accept sequence if define_sequence() has failed.
This commit is contained in:
parent
2742c4f9d4
commit
403dfdc24b
@ -1,3 +1,10 @@
|
|||||||
|
2001-08-14 Pavel Roskin <proski@gnu.org>
|
||||||
|
|
||||||
|
* key.h (define_sequence): Change declaration to return int.
|
||||||
|
* key.c (define_sequence): Return 1 on success, 0 on error.
|
||||||
|
* learn.c (learn_button): Don't accept sequence if
|
||||||
|
define_sequence() has failed.
|
||||||
|
|
||||||
2001-08-12 Pavel Roskin <proski@gnu.org>
|
2001-08-12 Pavel Roskin <proski@gnu.org>
|
||||||
|
|
||||||
* learn.c (learn_save): Fix memory leak.
|
* learn.c (learn_save): Fix memory leak.
|
||||||
|
23
src/key.c
23
src/key.c
@ -370,24 +370,28 @@ static int push_char (int c)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void define_sequence (int code, char *seq, int action)
|
/*
|
||||||
|
* Return 1 on success, 0 on error.
|
||||||
|
* An error happens if SEQ is a beginning of an existing longer sequence.
|
||||||
|
*/
|
||||||
|
int define_sequence (int code, char *seq, int action)
|
||||||
{
|
{
|
||||||
key_def *base;
|
key_def *base;
|
||||||
|
|
||||||
if (strlen (seq) > sizeof (seq_buffer)-1)
|
if (strlen (seq) > sizeof (seq_buffer)-1)
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
for (base = keys; (base != 0) && *seq; ){
|
for (base = keys; (base != 0) && *seq; ){
|
||||||
if (*seq == base->ch){
|
if (*seq == base->ch){
|
||||||
if (base->child == 0){
|
if (base->child == 0){
|
||||||
if (*(seq+1)){
|
if (*(seq+1)){
|
||||||
base->child = create_sequence (seq+1, code, action);
|
base->child = create_sequence (seq+1, code, action);
|
||||||
return;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
/* The sequence clashes */
|
/* The sequence matches an existing one. */
|
||||||
base->code = code;
|
base->code = code;
|
||||||
base->action = action;
|
base->action = action;
|
||||||
return;
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
base = base->child;
|
base = base->child;
|
||||||
@ -398,11 +402,18 @@ void define_sequence (int code, char *seq, int action)
|
|||||||
base = base->next;
|
base = base->next;
|
||||||
else {
|
else {
|
||||||
base->next = create_sequence (seq, code, action);
|
base->next = create_sequence (seq, code, action);
|
||||||
return;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!*seq) {
|
||||||
|
/* Attempt to redefine a sequence with a shorter sequence. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
keys = create_sequence (seq, code, action);
|
keys = create_sequence (seq, code, action);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int *pending_keys;
|
static int *pending_keys;
|
||||||
|
@ -63,7 +63,7 @@ int is_quit_char (int c);
|
|||||||
#define MCKEY_MOUSE -2
|
#define MCKEY_MOUSE -2
|
||||||
|
|
||||||
void do_define_key (int code, char *strcap);
|
void do_define_key (int code, char *strcap);
|
||||||
void define_sequence (int code, char *seq, int action);
|
int define_sequence (int code, char *seq, int action);
|
||||||
|
|
||||||
/* internally used in key.c, defined in keyxtra.c */
|
/* internally used in key.c, defined in keyxtra.c */
|
||||||
void load_xtra_key_defines (void);
|
void load_xtra_key_defines (void);
|
||||||
|
10
src/learn.c
10
src/learn.c
@ -107,6 +107,8 @@ _("Please press the %s\n"
|
|||||||
/* Esc hides the dialog and do not allow definitions of
|
/* Esc hides the dialog and do not allow definitions of
|
||||||
* regular characters
|
* regular characters
|
||||||
*/
|
*/
|
||||||
|
int seq_ok;
|
||||||
|
|
||||||
if (*seq && strcmp (seq, "\\e") && strcmp (seq, "\\e\\e")
|
if (*seq && strcmp (seq, "\\e") && strcmp (seq, "\\e\\e")
|
||||||
&& strcmp (seq, "^m" )
|
&& strcmp (seq, "^m" )
|
||||||
&& (seq [1] || (*seq < ' ' || *seq > '~'))){
|
&& (seq [1] || (*seq < ' ' || *seq > '~'))){
|
||||||
@ -114,9 +116,13 @@ _("Please press the %s\n"
|
|||||||
learnchanged = 1;
|
learnchanged = 1;
|
||||||
learnkeys [action - B_USER].sequence = seq;
|
learnkeys [action - B_USER].sequence = seq;
|
||||||
seq = convert_controls (seq);
|
seq = convert_controls (seq);
|
||||||
define_sequence (key_name_conv_tab [action - B_USER].code, seq,
|
seq_ok = define_sequence (key_name_conv_tab [action - B_USER].code,
|
||||||
MCKEY_NOACTION);
|
seq, MCKEY_NOACTION);
|
||||||
} else {
|
} else {
|
||||||
|
seq_ok = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!seq_ok) {
|
||||||
message (0, _(" Cannot accept this key "),
|
message (0, _(" Cannot accept this key "),
|
||||||
_(" You have entered \"%s\""), seq);
|
_(" You have entered \"%s\""), seq);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user