mirror of
git://git.sv.gnu.org/nano.git
synced 2024-12-24 19:36:52 +03:00
add UTF-8 support to unget_kbinput(), and fix a minor memory leak in the
UTF-8 support code in get_kbinput() git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2015 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
parent
bf1346f342
commit
c59979f067
@ -53,8 +53,9 @@ CVS code -
|
|||||||
- Add a func_key flag to the low-level input functions and the
|
- Add a func_key flag to the low-level input functions and the
|
||||||
currently existing high-level input functions, to indicate
|
currently existing high-level input functions, to indicate
|
||||||
extended keypad values. This is needed for UTF-8 support.
|
extended keypad values. This is needed for UTF-8 support.
|
||||||
Changes to get_kbinput(), get_translated_kbinput(),
|
Changes to unget_kbinput(), get_kbinput(),
|
||||||
get_shortcut(), get_edit_input(), etc. (DLR)
|
get_translated_kbinput(), get_shortcut(), get_edit_input(),
|
||||||
|
etc. (DLR)
|
||||||
- Add a multibuffer mode toggle to the "Execute Command" prompt,
|
- Add a multibuffer mode toggle to the "Execute Command" prompt,
|
||||||
for consistency with the "Read File" prompt. Changes to
|
for consistency with the "Read File" prompt. Changes to
|
||||||
do_insertfile() and shortcut_init(). (DLR)
|
do_insertfile() and shortcut_init(). (DLR)
|
||||||
|
@ -2624,8 +2624,10 @@ char *do_browser(const char *inpath)
|
|||||||
if (selected > numents - 1)
|
if (selected > numents - 1)
|
||||||
selected = numents - 1;
|
selected = numents - 1;
|
||||||
else if (selectedbackup == selected)
|
else if (selectedbackup == selected)
|
||||||
unget_kbinput('s', FALSE); /* Unget the 'select' key */
|
/* Unget the 'select' key */
|
||||||
} else { /* Must be clicking a shortcut */
|
unget_kbinput('s', FALSE, FALSE);
|
||||||
|
} else {
|
||||||
|
/* Must be clicking a shortcut */
|
||||||
int mouse_x, mouse_y;
|
int mouse_x, mouse_y;
|
||||||
get_mouseinput(&mouse_x, &mouse_y, TRUE);
|
get_mouseinput(&mouse_x, &mouse_y, TRUE);
|
||||||
}
|
}
|
||||||
|
@ -2671,7 +2671,7 @@ void do_justify(bool full_justify)
|
|||||||
edit_refresh();
|
edit_refresh();
|
||||||
} else {
|
} else {
|
||||||
placewewant = 0;
|
placewewant = 0;
|
||||||
unget_kbinput(kbinput, meta_key);
|
unget_kbinput(kbinput, meta_key, func_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
cutbuffer = cutbuffer_save;
|
cutbuffer = cutbuffer_save;
|
||||||
|
@ -502,7 +502,7 @@ int check_wildcard_match(const char *text, const char *pattern);
|
|||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
void reset_kbinput(void);
|
void reset_kbinput(void);
|
||||||
#endif
|
#endif
|
||||||
void unget_kbinput(int kbinput, bool meta_key);
|
void unget_kbinput(int kbinput, bool meta_key, bool func_key);
|
||||||
int get_kbinput(WINDOW *win, bool *meta_key, bool *func_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, seq_type *seq
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
|
35
src/winio.c
35
src/winio.c
@ -104,9 +104,29 @@ void reset_kbinput(void)
|
|||||||
|
|
||||||
/* Put back the input character stored in kbinput. If meta_key is TRUE,
|
/* Put back the input character stored in kbinput. If meta_key is TRUE,
|
||||||
* put back the Escape character after putting back kbinput. */
|
* put back the Escape character after putting back kbinput. */
|
||||||
void unget_kbinput(int kbinput, bool meta_key)
|
void unget_kbinput(int kbinput, bool meta_key, bool func_key)
|
||||||
{
|
{
|
||||||
ungetch(kbinput);
|
/* If this character is outside the ASCII range and func_key is
|
||||||
|
* FALSE, treat it as a wide character and put back its equivalent
|
||||||
|
* multibyte 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);
|
||||||
|
|
||||||
|
if (i == -1)
|
||||||
|
/* This wide character is unrecognized. Send it back. */
|
||||||
|
ungetch(kbinput);
|
||||||
|
else {
|
||||||
|
for (; i > 0; i--)
|
||||||
|
ungetch(s[i - 1]);
|
||||||
|
}
|
||||||
|
free(s);
|
||||||
|
} else
|
||||||
|
ungetch(kbinput);
|
||||||
if (meta_key)
|
if (meta_key)
|
||||||
ungetch(NANO_CONTROL_3);
|
ungetch(NANO_CONTROL_3);
|
||||||
}
|
}
|
||||||
@ -181,7 +201,8 @@ int get_kbinput(WINDOW *win, bool *meta_key, bool *func_key)
|
|||||||
/* This escape sequence is unrecognized. Send
|
/* This escape sequence is unrecognized. Send
|
||||||
* it back. */
|
* it back. */
|
||||||
for (; seq_len > 1; seq_len--)
|
for (; seq_len > 1; seq_len--)
|
||||||
unget_kbinput(sequence[seq_len - 1], FALSE);
|
unget_kbinput(sequence[seq_len - 1], FALSE,
|
||||||
|
FALSE);
|
||||||
retval = sequence[0];
|
retval = sequence[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -203,10 +224,12 @@ int get_kbinput(WINDOW *win, bool *meta_key, bool *func_key)
|
|||||||
/* This UTF-8 sequence is unrecognized. Send it
|
/* This UTF-8 sequence is unrecognized. Send it
|
||||||
* back. */
|
* back. */
|
||||||
for (; seq_len > 1; seq_len--)
|
for (; seq_len > 1; seq_len--)
|
||||||
unget_kbinput(sequence[seq_len - 1], FALSE);
|
unget_kbinput(sequence[seq_len - 1], FALSE,
|
||||||
|
FALSE);
|
||||||
retval = sequence[0];
|
retval = sequence[0];
|
||||||
} else
|
} else
|
||||||
retval = wc;
|
retval = wc;
|
||||||
|
free(s);
|
||||||
}
|
}
|
||||||
free(sequence);
|
free(sequence);
|
||||||
}
|
}
|
||||||
@ -1365,9 +1388,9 @@ bool get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts)
|
|||||||
* has, at the very least, an equivalent control key, an
|
* has, at the very least, an equivalent control key, an
|
||||||
* equivalent primary meta key sequence, or both. */
|
* equivalent primary meta key sequence, or both. */
|
||||||
if (s->ctrlval != NANO_NO_KEY)
|
if (s->ctrlval != NANO_NO_KEY)
|
||||||
unget_kbinput(s->ctrlval, FALSE);
|
unget_kbinput(s->ctrlval, FALSE, FALSE);
|
||||||
else if (s->metaval != NANO_NO_KEY)
|
else if (s->metaval != NANO_NO_KEY)
|
||||||
unget_kbinput(s->metaval, TRUE);
|
unget_kbinput(s->metaval, TRUE, FALSE);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user