mirror of
https://github.com/MidnightCommander/mc
synced 2025-03-11 18:32:53 +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>
|
||||
|
||||
* 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;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
if (strlen (seq) > sizeof (seq_buffer)-1)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
for (base = keys; (base != 0) && *seq; ){
|
||||
if (*seq == base->ch){
|
||||
if (base->child == 0){
|
||||
if (*(seq+1)){
|
||||
base->child = create_sequence (seq+1, code, action);
|
||||
return;
|
||||
return 1;
|
||||
} else {
|
||||
/* The sequence clashes */
|
||||
/* The sequence matches an existing one. */
|
||||
base->code = code;
|
||||
base->action = action;
|
||||
return;
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
base = base->child;
|
||||
@ -398,11 +402,18 @@ void define_sequence (int code, char *seq, int action)
|
||||
base = base->next;
|
||||
else {
|
||||
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);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int *pending_keys;
|
||||
|
@ -63,7 +63,7 @@ int is_quit_char (int c);
|
||||
#define MCKEY_MOUSE -2
|
||||
|
||||
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 */
|
||||
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
|
||||
* regular characters
|
||||
*/
|
||||
int seq_ok;
|
||||
|
||||
if (*seq && strcmp (seq, "\\e") && strcmp (seq, "\\e\\e")
|
||||
&& strcmp (seq, "^m" )
|
||||
&& (seq [1] || (*seq < ' ' || *seq > '~'))){
|
||||
@ -114,9 +116,13 @@ _("Please press the %s\n"
|
||||
learnchanged = 1;
|
||||
learnkeys [action - B_USER].sequence = seq;
|
||||
seq = convert_controls (seq);
|
||||
define_sequence (key_name_conv_tab [action - B_USER].code, seq,
|
||||
MCKEY_NOACTION);
|
||||
seq_ok = define_sequence (key_name_conv_tab [action - B_USER].code,
|
||||
seq, MCKEY_NOACTION);
|
||||
} else {
|
||||
seq_ok = 0;
|
||||
}
|
||||
|
||||
if (!seq_ok) {
|
||||
message (0, _(" Cannot accept this key "),
|
||||
_(" You have entered \"%s\""), seq);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user