remove malfunctioning wide character support, and add a few
miscellaneous fixes git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2152 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
63e73cbd14
commit
1483ee3db1
29
ChangeLog
29
ChangeLog
|
@ -58,17 +58,38 @@ CVS code -
|
|||
instead of setting it to 0. (DLR)
|
||||
- winio.c:
|
||||
unget_kbinput()
|
||||
- Free s after the wctomb() call, since we don't need it after
|
||||
that. (DLR)
|
||||
- Remove the wide character handling, as it didn't work properly
|
||||
with respect to function keys. (DLR)
|
||||
get_kbinput(), get_translated_kbinput(), get_ascii_kbinput(),
|
||||
get_untranslated_kbinput()
|
||||
- Make the ascii_digits variables ints instead of size_t's,
|
||||
since they will only hold very small values. (DLR)
|
||||
get_kbinput()
|
||||
- Remove the wide character handling, as it didn't work properly
|
||||
with respect to adding multiple wide characters at once, and
|
||||
ungetting them just caused other problems elsewhere. (DLR)
|
||||
get_translated_kbinput()
|
||||
- Remove the wide character handling, as it didn't work properly
|
||||
with respect to adding multiple wide characters at once, and
|
||||
ungetting them just caused other problems elsewhere. (DLR)
|
||||
- Use if statements instead of switch/case statements to handle
|
||||
ASCII character sequence mode, as they take up less room.
|
||||
get_ascii_kbinput()
|
||||
- Use if statements instead of switch/case statements to handle
|
||||
ASCII character sequence mode, as they take up less room.
|
||||
get_verbatim_kbinput()
|
||||
- Don't pass v_kbinput in as a parameter, since we're
|
||||
dynamically allocating it and then returning it. (DLR)
|
||||
get_shortcut(), get_toggle()
|
||||
- Add debug messages. (DLR)
|
||||
- Remove v_first parameter, and go back to the old behavior of
|
||||
putting back the first character of the escape sequence, as it
|
||||
worked just as well and was less complicated. (DLR)
|
||||
get_shortcut()
|
||||
- Add debug message. (DLR)
|
||||
- Take kbinput as a reference instead of a value, so that it's
|
||||
translated when the key is translated to its equivalent
|
||||
control key or meta key shortcut. (DLR)
|
||||
get_toggle()
|
||||
- Add debug message. (DLR)
|
||||
- configure.ac:
|
||||
- Remove specific references to control key shortcuts. (DLR)
|
||||
|
||||
|
|
|
@ -2583,7 +2583,7 @@ char *do_browser(const char *inpath)
|
|||
selected = numents - 1;
|
||||
else if (selectedbackup == selected)
|
||||
/* Put back the 'select' key */
|
||||
unget_kbinput('s', FALSE, FALSE);
|
||||
unget_kbinput('s', FALSE);
|
||||
} else {
|
||||
/* Must be clicking a shortcut */
|
||||
int mouse_x, mouse_y;
|
||||
|
|
|
@ -1225,7 +1225,7 @@ void do_verbatim_input(void)
|
|||
|
||||
statusbar(_("Verbatim input"));
|
||||
|
||||
v_kbinput = get_verbatim_kbinput(edit, ERR, &v_len, TRUE);
|
||||
v_kbinput = get_verbatim_kbinput(edit, &v_len, TRUE);
|
||||
|
||||
/* Turn on DISABLE_CURPOS while inserting character(s) and turn it
|
||||
* off afterwards, so that if constant cursor position display is
|
||||
|
@ -3082,7 +3082,7 @@ void do_justify(bool full_justify)
|
|||
edit_refresh();
|
||||
}
|
||||
} else {
|
||||
unget_kbinput(kbinput, meta_key, func_key);
|
||||
unget_kbinput(kbinput, meta_key);
|
||||
|
||||
/* Blow away the text in the justify buffer. */
|
||||
free_filestruct(jusbuffer);
|
||||
|
|
|
@ -157,10 +157,6 @@ typedef enum {
|
|||
TOP, CENTER, NONE
|
||||
} topmidnone;
|
||||
|
||||
typedef enum {
|
||||
NO_SEQ, ESCAPE_SEQ, UTF8_SEQ
|
||||
} seq_type;
|
||||
|
||||
/* Structure types. */
|
||||
typedef struct filestruct {
|
||||
char *data;
|
||||
|
|
|
@ -524,9 +524,9 @@ int check_wildcard_match(const char *text, const char *pattern);
|
|||
#ifndef NANO_SMALL
|
||||
void reset_kbinput(void);
|
||||
#endif
|
||||
void unget_kbinput(int kbinput, bool meta_key, bool func_key);
|
||||
void unget_kbinput(int kbinput, bool meta_key);
|
||||
int get_kbinput(WINDOW *win, bool *meta_key, bool *func_key);
|
||||
int get_translated_kbinput(int kbinput, seq_type *seq
|
||||
int get_translated_kbinput(int kbinput, bool *escape_seq
|
||||
#ifndef NANO_SMALL
|
||||
, bool reset
|
||||
#endif
|
||||
|
@ -540,8 +540,7 @@ int get_control_kbinput(int kbinput);
|
|||
int get_escape_seq_kbinput(const int *escape_seq, size_t es_len, bool
|
||||
*ignore_seq);
|
||||
int get_escape_seq_abcd(int kbinput);
|
||||
int *get_verbatim_kbinput(WINDOW *win, int v_first, size_t *v_len, bool
|
||||
allow_ascii);
|
||||
int *get_verbatim_kbinput(WINDOW *win, size_t *v_len, bool allow_ascii);
|
||||
int get_untranslated_kbinput(int kbinput, size_t position, bool
|
||||
allow_ascii
|
||||
#ifndef NANO_SMALL
|
||||
|
@ -551,7 +550,7 @@ int get_untranslated_kbinput(int kbinput, size_t position, bool
|
|||
#ifndef DISABLE_MOUSE
|
||||
bool get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts);
|
||||
#endif
|
||||
const shortcut *get_shortcut(const shortcut *s_list, int kbinput, bool
|
||||
const shortcut *get_shortcut(const shortcut *s_list, int *kbinput, bool
|
||||
*meta_key, bool *func_key);
|
||||
#ifndef NANO_SMALL
|
||||
const toggle *get_toggle(int kbinput, bool meta_key);
|
||||
|
|
371
src/winio.c
371
src/winio.c
|
@ -113,29 +113,9 @@ void reset_kbinput(void)
|
|||
|
||||
/* Put back the input character stored in kbinput. If meta_key is TRUE,
|
||||
* put back the Escape character after putting back kbinput. */
|
||||
void unget_kbinput(int kbinput, bool meta_key, bool func_key)
|
||||
void unget_kbinput(int kbinput, bool meta_key)
|
||||
{
|
||||
/* If this character is outside the ASCII range and func_key is
|
||||
* FALSE, treat it as a wide character and put back its equivalent
|
||||
* UTF-8 sequence. */
|
||||
if (kbinput > 255 && !func_key)
|
||||
{
|
||||
int i;
|
||||
char *s = charalloc(MB_CUR_MAX + 1);
|
||||
wchar_t wc = (wchar_t)kbinput;
|
||||
|
||||
i = wctomb(s, wc);
|
||||
free(s);
|
||||
|
||||
if (i == -1)
|
||||
/* This wide character is unrecognized. Send it back. */
|
||||
ungetch(kbinput);
|
||||
else {
|
||||
for (; i > 0; i--)
|
||||
ungetch(s[i - 1]);
|
||||
}
|
||||
} else
|
||||
ungetch(kbinput);
|
||||
ungetch(kbinput);
|
||||
if (meta_key)
|
||||
ungetch(NANO_CONTROL_3);
|
||||
}
|
||||
|
@ -152,7 +132,7 @@ void unget_kbinput(int kbinput, bool meta_key, bool func_key)
|
|||
int get_kbinput(WINDOW *win, bool *meta_key, bool *func_key)
|
||||
{
|
||||
int kbinput, retval = ERR;
|
||||
seq_type seq;
|
||||
bool escape_seq;
|
||||
|
||||
#ifndef NANO_SMALL
|
||||
allow_pending_sigwinch(TRUE);
|
||||
|
@ -167,83 +147,55 @@ int get_kbinput(WINDOW *win, bool *meta_key, bool *func_key)
|
|||
* to get_translated_kbinput(). Continue until we get a
|
||||
* complete sequence. */
|
||||
kbinput = wgetch(win);
|
||||
retval = get_translated_kbinput(kbinput, &seq
|
||||
retval = get_translated_kbinput(kbinput, &escape_seq
|
||||
#ifndef NANO_SMALL
|
||||
, FALSE
|
||||
#endif
|
||||
);
|
||||
|
||||
/* If we have a complete sequence now, we should interpret its
|
||||
/* If we got a complete non-escape sequence, interpret the
|
||||
* translated value instead of the value of the last character
|
||||
* we got. */
|
||||
if (retval != ERR)
|
||||
* we got. Set func_key to TRUE if the translated value is
|
||||
* outside byte range. */
|
||||
if (retval != ERR) {
|
||||
*func_key = (retval > 255);
|
||||
kbinput = retval;
|
||||
}
|
||||
|
||||
/* If we got a one-character sequence and it's outside the ASCII
|
||||
* range, set func_key to TRUE. */
|
||||
if (seq == NO_SEQ) {
|
||||
if (kbinput > 255)
|
||||
*func_key = TRUE;
|
||||
/* If we got a multi-character sequence, read it in, including
|
||||
* the initial character, as verbatim input. */
|
||||
} else {
|
||||
int *sequence = NULL;
|
||||
/* If we got an incomplete escape sequence, put back the initial
|
||||
* non-escape and then read the entire sequence in as verbatim
|
||||
* input. */
|
||||
if (escape_seq) {
|
||||
int *sequence;
|
||||
size_t seq_len;
|
||||
|
||||
sequence = get_verbatim_kbinput(win, kbinput, &seq_len,
|
||||
FALSE);
|
||||
unget_kbinput(kbinput, FALSE);
|
||||
sequence = get_verbatim_kbinput(win, &seq_len, FALSE);
|
||||
|
||||
/* Handle escape sequences. */
|
||||
if (seq == ESCAPE_SEQ) {
|
||||
/* If the escape sequence is one character long, set
|
||||
* meta_key to TRUE, make the sequence character
|
||||
* lowercase, and save that as the result. */
|
||||
if (seq_len == 1) {
|
||||
*meta_key = TRUE;
|
||||
retval = tolower(kbinput);
|
||||
/* If the escape sequence is more than one character
|
||||
* long, set func_key to TRUE, translate the escape
|
||||
* sequence into the corresponding key value, and save
|
||||
* that as the result. */
|
||||
} else if (seq_len > 1) {
|
||||
bool ignore_seq;
|
||||
/* If the escape sequence is one character long, set
|
||||
* meta_key to TRUE, make the sequence character lowercase,
|
||||
* and save that as the result. */
|
||||
if (seq_len == 1) {
|
||||
*meta_key = TRUE;
|
||||
retval = tolower(kbinput);
|
||||
/* If the escape sequence is more than one character long,
|
||||
* set func_key to TRUE, translate the escape sequence into
|
||||
* the corresponding key value, and save that as the
|
||||
* result. */
|
||||
} else if (seq_len > 1) {
|
||||
bool ignore_seq;
|
||||
|
||||
*func_key = TRUE;
|
||||
retval = get_escape_seq_kbinput(sequence, seq_len,
|
||||
*func_key = TRUE;
|
||||
retval = get_escape_seq_kbinput(sequence, seq_len,
|
||||
&ignore_seq);
|
||||
|
||||
if (retval == ERR && !ignore_seq) {
|
||||
/* This escape sequence is unrecognized. Send
|
||||
* it back. */
|
||||
for (; seq_len > 1; seq_len--)
|
||||
unget_kbinput(sequence[seq_len - 1], FALSE,
|
||||
FALSE);
|
||||
retval = sequence[0];
|
||||
}
|
||||
}
|
||||
/* Handle UTF-8 sequences. */
|
||||
} else if (seq == UTF8_SEQ) {
|
||||
/* If we have a UTF-8 sequence, translate the UTF-8
|
||||
* sequence into the corresponding wide character value,
|
||||
* and save that as the result. */
|
||||
int i = 0;
|
||||
char *s = charalloc(seq_len + 1);
|
||||
wchar_t wc;
|
||||
|
||||
for (; i < seq_len; i++)
|
||||
s[i] = (char)sequence[i];
|
||||
s[seq_len] = '\0';
|
||||
|
||||
if (mbtowc(&wc, s, MB_CUR_MAX) == -1) {
|
||||
/* This UTF-8 sequence is unrecognized. Send it
|
||||
if (retval == ERR && !ignore_seq) {
|
||||
/* This escape sequence is unrecognized. Send it
|
||||
* back. */
|
||||
for (; seq_len > 1; seq_len--)
|
||||
unget_kbinput(sequence[seq_len - 1], FALSE,
|
||||
FALSE);
|
||||
unget_kbinput(sequence[seq_len - 1], FALSE);
|
||||
retval = sequence[0];
|
||||
} else
|
||||
retval = wc;
|
||||
free(s);
|
||||
}
|
||||
}
|
||||
free(sequence);
|
||||
}
|
||||
|
@ -260,11 +212,11 @@ int get_kbinput(WINDOW *win, bool *meta_key, bool *func_key)
|
|||
return retval;
|
||||
}
|
||||
|
||||
/* Translate acceptable ASCII, extended keypad values, and escape and
|
||||
* UTF-8 sequences into their corresponding key values. Set seq to
|
||||
* ESCAPE_SEQ when we get an escape sequence, or UTF8_SEQ when we get a
|
||||
* UTF-8 sequence. Assume nodelay(win) is FALSE. */
|
||||
int get_translated_kbinput(int kbinput, seq_type *seq
|
||||
/* Translate acceptable ASCII, extended keypad values, and escape
|
||||
* sequences into their corresponding key values. Set escape_seq to
|
||||
* TRUE when we get an incomplete escape sequence. Assume nodelay(win)
|
||||
* is FALSE. */
|
||||
int get_translated_kbinput(int kbinput, bool *escape_seq
|
||||
#ifndef NANO_SMALL
|
||||
, bool reset
|
||||
#endif
|
||||
|
@ -282,7 +234,7 @@ int get_translated_kbinput(int kbinput, seq_type *seq
|
|||
}
|
||||
#endif
|
||||
|
||||
*seq = NO_SEQ;
|
||||
*escape_seq = FALSE;
|
||||
|
||||
switch (kbinput) {
|
||||
case ERR:
|
||||
|
@ -420,86 +372,70 @@ int get_translated_kbinput(int kbinput, seq_type *seq
|
|||
case 1:
|
||||
/* One escape followed by a non-escape: escape
|
||||
* sequence mode. Reset the escape counter and set
|
||||
* seq to ESCAPE_SEQ. */
|
||||
* escape_seq to TRUE. */
|
||||
escapes = 0;
|
||||
*seq = ESCAPE_SEQ;
|
||||
*escape_seq = TRUE;
|
||||
break;
|
||||
case 2:
|
||||
switch (kbinput) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
/* Two escapes followed by one or more
|
||||
* digits: ASCII character sequence mode.
|
||||
* If the digit sequence's range is limited
|
||||
* to 2XX (the first digit is in the '0' to
|
||||
* '2' range and it's the first digit, or if
|
||||
* it's in the full digit range and it's not
|
||||
* the first digit), increment the ASCII
|
||||
* digit counter and interpret the digit.
|
||||
* If the digit sequence's range is not
|
||||
* limited to 2XX, fall through. */
|
||||
if (kbinput <= '2' || ascii_digits > 0) {
|
||||
ascii_digits++;
|
||||
kbinput = get_ascii_kbinput(kbinput,
|
||||
ascii_digits
|
||||
if (kbinput >= '0' && kbinput <= '9') {
|
||||
/* Two escapes followed by one or more decimal
|
||||
* digits: ASCII character sequence mode. If
|
||||
* the digit sequence's range is limited to 2XX
|
||||
* (the first digit is in the '0' to '2' range
|
||||
* and it's the first digit, or if it's in the
|
||||
* full digit range and it's not the first
|
||||
* digit), increment the ASCII digit counter and
|
||||
* interpret the digit. If the digit sequence's
|
||||
* range is not limited to 2XX, fall through. */
|
||||
if (kbinput <= '2' || ascii_digits > 0) {
|
||||
ascii_digits++;
|
||||
kbinput = get_ascii_kbinput(kbinput,
|
||||
ascii_digits
|
||||
#ifndef NANO_SMALL
|
||||
, FALSE
|
||||
, FALSE
|
||||
#endif
|
||||
);
|
||||
);
|
||||
|
||||
if (kbinput != ERR) {
|
||||
/* If we've read in a complete ASCII
|
||||
* digit sequence, reset the ASCII
|
||||
* digit counter and the escape
|
||||
* counter and save the corresponding
|
||||
* ASCII character as the result. */
|
||||
ascii_digits = 0;
|
||||
escapes = 0;
|
||||
retval = kbinput;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* Reset the escape counter. */
|
||||
escapes = 0;
|
||||
if (ascii_digits == 0)
|
||||
/* Two escapes followed by a non-decimal
|
||||
* digit or a decimal digit that would
|
||||
* create an ASCII digit sequence
|
||||
* greater than 2XX, and we're not in
|
||||
* the middle of an ASCII character
|
||||
* sequence: control character sequence
|
||||
* mode. Interpret the control sequence
|
||||
* and save the corresponding control
|
||||
if (kbinput != ERR) {
|
||||
/* If we've read in a complete ASCII
|
||||
* digit sequence, reset the ASCII digit
|
||||
* counter and the escape counter and
|
||||
* save the corresponding ASCII
|
||||
* character as the result. */
|
||||
retval = get_control_kbinput(kbinput);
|
||||
else {
|
||||
/* If we were in the middle of an ASCII
|
||||
* character sequence, reset the ASCII
|
||||
* digit counter and save the character
|
||||
* we got as the result. */
|
||||
ascii_digits = 0;
|
||||
escapes = 0;
|
||||
retval = kbinput;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Reset the escape counter. */
|
||||
escapes = 0;
|
||||
if (ascii_digits == 0)
|
||||
/* Two escapes followed by a non-decimal
|
||||
* digit or a decimal digit that would
|
||||
* create an ASCII digit sequence greater
|
||||
* than 2XX, and we're not in the middle of
|
||||
* an ASCII character sequence: control
|
||||
* character sequence mode. Interpret the
|
||||
* control sequence and save the
|
||||
* corresponding control character as the
|
||||
* result. */
|
||||
retval = get_control_kbinput(kbinput);
|
||||
else {
|
||||
/* If we were in the middle of an ASCII
|
||||
* character sequence, reset the ASCII digit
|
||||
* counter and save the character we got as
|
||||
* the result. */
|
||||
ascii_digits = 0;
|
||||
retval = kbinput;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* A character other than ERR with its high bit set: UTF-8 sequence
|
||||
* mode. Set seq to UTF8_SEQ. */
|
||||
if (retval != ERR && 127 < retval && retval <= 255)
|
||||
*seq = UTF8_SEQ;
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "get_translated_kbinput(): kbinput = %d, seq = %d, escapes = %d, ascii_digits = %d, retval = %d\n", kbinput, (int)*seq, escapes, ascii_digits, retval);
|
||||
fprintf(stderr, "get_translated_kbinput(): kbinput = %d, escape_seq = %d, escapes = %d, ascii_digits = %d, retval = %d\n", kbinput, (int)*escape_seq, escapes, ascii_digits, retval);
|
||||
#endif
|
||||
|
||||
/* Return the result. */
|
||||
|
@ -527,70 +463,42 @@ int get_ascii_kbinput(int kbinput, int ascii_digits
|
|||
switch (ascii_digits) {
|
||||
case 1:
|
||||
/* Read in the first of the three ASCII digits. */
|
||||
switch (kbinput) {
|
||||
/* Add the digit we got to the 100's position of the
|
||||
* ASCII character sequence holder. */
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
ascii_kbinput += (kbinput - '0') * 100;
|
||||
break;
|
||||
default:
|
||||
retval = kbinput;
|
||||
}
|
||||
|
||||
/* Add the digit we got to the 100's position of the ASCII
|
||||
* character sequence holder. */
|
||||
if ('0' <= kbinput && kbinput <= '2')
|
||||
ascii_kbinput += (kbinput - '0') * 100;
|
||||
else
|
||||
retval = kbinput;
|
||||
break;
|
||||
case 2:
|
||||
/* Read in the second of the three ASCII digits. */
|
||||
switch (kbinput) {
|
||||
/* Add the digit we got to the 10's position of the
|
||||
* ASCII character sequence holder. */
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
ascii_kbinput += (kbinput - '0') * 10;
|
||||
break;
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
if (ascii_kbinput < 200) {
|
||||
ascii_kbinput += (kbinput - '0') * 10;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
retval = kbinput;
|
||||
}
|
||||
|
||||
/* Add the digit we got to the 10's position of the ASCII
|
||||
* character sequence holder. */
|
||||
if (('0' <= kbinput && kbinput <= '5') ||
|
||||
(ascii_kbinput < 200 && '6' <= kbinput &&
|
||||
kbinput <= '9'))
|
||||
ascii_kbinput += (kbinput - '0') * 10;
|
||||
else
|
||||
retval = kbinput;
|
||||
break;
|
||||
case 3:
|
||||
/* Read in the third of the three ASCII digits. */
|
||||
switch (kbinput) {
|
||||
/* Add the digit we got to the 1's position of the ASCII
|
||||
* character sequence holder, and save the corresponding
|
||||
* ASCII character as the result. */
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
ascii_kbinput += (kbinput - '0');
|
||||
retval = ascii_kbinput;
|
||||
break;
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
if (ascii_kbinput < 250) {
|
||||
ascii_kbinput += (kbinput - '0');
|
||||
retval = ascii_kbinput;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
retval = kbinput;
|
||||
}
|
||||
|
||||
/* Add the digit we got to the 1's position of the ASCII
|
||||
* character sequence holder, and save the corresponding
|
||||
* ASCII character as the result. */
|
||||
if (('0' <= kbinput && kbinput <= '5') ||
|
||||
(ascii_kbinput < 250 && '6' <= kbinput &&
|
||||
kbinput <= '9')) {
|
||||
ascii_kbinput += (kbinput - '0');
|
||||
retval = ascii_kbinput;
|
||||
} else
|
||||
retval = kbinput;
|
||||
break;
|
||||
default:
|
||||
retval = kbinput;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1169,11 +1077,9 @@ int get_escape_seq_abcd(int kbinput)
|
|||
}
|
||||
|
||||
/* Read in a string of input characters (e.g. an escape sequence)
|
||||
* verbatim. If v_first isn't ERR, make it the first character of the
|
||||
* string. Return the length of the string in v_len. Assume
|
||||
* verbatim. Return the length of the string in v_len. Assume
|
||||
* nodelay(win) is FALSE. */
|
||||
int *get_verbatim_kbinput(WINDOW *win, int v_first, size_t *v_len, bool
|
||||
allow_ascii)
|
||||
int *get_verbatim_kbinput(WINDOW *win, size_t *v_len, bool allow_ascii)
|
||||
{
|
||||
int kbinput, *v_kbinput;
|
||||
size_t i = 0, v_newlen = 0;
|
||||
|
@ -1193,15 +1099,12 @@ int *get_verbatim_kbinput(WINDOW *win, int v_first, size_t *v_len, bool
|
|||
keypad(win, FALSE);
|
||||
|
||||
/* If first is ERR, read the first character using blocking input,
|
||||
* since using non-blocking input will eat up all unused CPU.
|
||||
* Otherwise, treat v_first as the first character. Then increment
|
||||
* v_len and save the character in v_kbinput. */
|
||||
if (v_first == ERR)
|
||||
kbinput = wgetch(win);
|
||||
else
|
||||
kbinput = v_first;
|
||||
* since using non-blocking input will eat up all unused CPU. Then
|
||||
* increment v_len and save the character in v_kbinput. */
|
||||
kbinput = wgetch(win);
|
||||
(*v_len)++;
|
||||
v_kbinput[0] = kbinput;
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "get_verbatim_kbinput(): kbinput = %d, v_len = %lu\n", kbinput, (unsigned long)*v_len);
|
||||
#endif
|
||||
|
@ -1422,9 +1325,9 @@ bool get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts)
|
|||
* has, at the very least, an equivalent control key, an
|
||||
* equivalent primary meta key sequence, or both. */
|
||||
if (s->ctrlval != NANO_NO_KEY)
|
||||
unget_kbinput(s->ctrlval, FALSE, FALSE);
|
||||
unget_kbinput(s->ctrlval, FALSE);
|
||||
else if (s->metaval != NANO_NO_KEY)
|
||||
unget_kbinput(s->metaval, TRUE, FALSE);
|
||||
unget_kbinput(s->metaval, TRUE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -1432,14 +1335,14 @@ bool get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts)
|
|||
}
|
||||
#endif /* !DISABLE_MOUSE */
|
||||
|
||||
const shortcut *get_shortcut(const shortcut *s_list, int kbinput, bool
|
||||
const shortcut *get_shortcut(const shortcut *s_list, int *kbinput, bool
|
||||
*meta_key, bool *func_key)
|
||||
{
|
||||
const shortcut *s = s_list;
|
||||
size_t slen = length_of_list(s_list);
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "get_shortcut(): kbinput = %d, meta_key = %d, func_key = %d\n", kbinput, (int)*meta_key, (int)*func_key);
|
||||
fprintf(stderr, "get_shortcut(): kbinput = %d, meta_key = %d, func_key = %d\n", *kbinput, (int)*meta_key, (int)*func_key);
|
||||
#endif
|
||||
|
||||
/* Check for shortcuts. */
|
||||
|
@ -1453,10 +1356,10 @@ const shortcut *get_shortcut(const shortcut *s_list, int kbinput, bool
|
|||
* 4. func_key is TRUE and the key is a function key in the
|
||||
* shortcut list. */
|
||||
|
||||
if (kbinput != NANO_NO_KEY && (kbinput == s->ctrlval ||
|
||||
(*meta_key == TRUE && (kbinput == s->metaval ||
|
||||
kbinput == s->miscval)) || (*func_key == TRUE &&
|
||||
kbinput == s->funcval))) {
|
||||
if (*kbinput != NANO_NO_KEY && (*kbinput == s->ctrlval ||
|
||||
(*meta_key == TRUE && (*kbinput == s->metaval ||
|
||||
*kbinput == s->miscval)) || (*func_key == TRUE &&
|
||||
*kbinput == s->funcval))) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1469,10 +1372,10 @@ const shortcut *get_shortcut(const shortcut *s_list, int kbinput, bool
|
|||
if (slen > 0) {
|
||||
if (s->ctrlval != NANO_NO_KEY) {
|
||||
*meta_key = FALSE;
|
||||
kbinput = s->ctrlval;
|
||||
*kbinput = s->ctrlval;
|
||||
} else if (s->metaval != NANO_NO_KEY) {
|
||||
*meta_key = TRUE;
|
||||
kbinput = s->metaval;
|
||||
*kbinput = s->metaval;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
@ -1538,7 +1441,7 @@ int get_edit_input(bool *meta_key, bool *func_key, bool allow_funcs)
|
|||
}
|
||||
|
||||
/* Check for a shortcut in the main list. */
|
||||
s = get_shortcut(main_list, kbinput, meta_key, func_key);
|
||||
s = get_shortcut(main_list, &kbinput, meta_key, func_key);
|
||||
|
||||
if (s != NULL) {
|
||||
/* We got a shortcut. Run the shortcut's corresponding function
|
||||
|
|
Loading…
Reference in New Issue