Commit 48ae9867 authored by David Lawrence Ramsey's avatar David Lawrence Ramsey
Browse files

refactor the low-level input routines into main routines that get the

input and state machines that interpret the input


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1773 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
No related merge requests found
Showing with 706 additions and 387 deletions
+706 -387
...@@ -65,6 +65,17 @@ CVS code - ...@@ -65,6 +65,17 @@ CVS code -
suggested by Stephan T. Lavavej) suggested by Stephan T. Lavavej)
- Minor tweaks to the punctuation in some statusbar messages. - Minor tweaks to the punctuation in some statusbar messages.
(DLR) (DLR)
- Overhaul the low-level input routines into main routines that
actually get the input and state machines that interpret the
input. This allows better handling of the input (e.g. ignored
keys are now always ignored instead of just being ignored when
there are no escapes prefixing them) and will make it easier
to port to interfaces that don't have blocking input. New
functions reset_kbinput(), get_translated_kbinput(),
get_control_kbinput(), and get_untranslated_kbinput(); changes
to do_verbatim_input(), handle_sigwinch(), get_kbinput(),
get_ascii_kbinput(), get_escape_seq_kbinput(), and
get_verbatim_kbinput(). (DLR)
- files.c: - files.c:
add_open_file() add_open_file()
- Rearrange the NANO_SMALL #ifdef so that the code to set the - Rearrange the NANO_SMALL #ifdef so that the code to set the
......
...@@ -982,22 +982,23 @@ void do_char(char ch) ...@@ -982,22 +982,23 @@ void do_char(char ch)
int do_verbatim_input(void) int do_verbatim_input(void)
{ {
int *verbatim_kbinput; /* Used to hold verbatim input. */ int *v_kbinput = NULL; /* Used to hold verbatim input. */
size_t verbatim_len; /* Length of verbatim input. */ size_t v_len; /* Length of verbatim input. */
size_t i; size_t i;
statusbar(_("Verbatim input")); statusbar(_("Verbatim input"));
verbatim_kbinput = get_verbatim_kbinput(edit, &verbatim_len, 1);
v_kbinput = get_verbatim_kbinput(edit, v_kbinput, &v_len, TRUE);
/* Turn on DISABLE_CURPOS while inserting character(s) and turn it /* Turn on DISABLE_CURPOS while inserting character(s) and turn it
* off afterwards, so that if constant cursor position display is * off afterwards, so that if constant cursor position display is
* on, it will be updated properly. */ * on, it will be updated properly. */
SET(DISABLE_CURPOS); SET(DISABLE_CURPOS);
for (i = 0; i < verbatim_len; i++) for (i = 0; i < v_len; i++)
do_char((char)verbatim_kbinput[i]); do_char((char)v_kbinput[i]);
UNSET(DISABLE_CURPOS); UNSET(DISABLE_CURPOS);
free(verbatim_kbinput); free(v_kbinput);
return 1; return 1;
} }
...@@ -2876,6 +2877,9 @@ void handle_sigwinch(int s) ...@@ -2876,6 +2877,9 @@ void handle_sigwinch(int s)
/* Restore the terminal to its previously saved state. */ /* Restore the terminal to its previously saved state. */
resetty(); resetty();
/* Reset all the input routines that rely on character sequences. */
reset_kbinput();
/* Jump back to the main loop. */ /* Jump back to the main loop. */
siglongjmp(jmpbuf, 1); siglongjmp(jmpbuf, 1);
} }
......
...@@ -467,15 +467,31 @@ int check_wildcard_match(const char *text, const char *pattern); ...@@ -467,15 +467,31 @@ int check_wildcard_match(const char *text, const char *pattern);
#endif #endif
/* Public functions in winio.c */ /* Public functions in winio.c */
#ifndef NANO_SMALL
void reset_kbinput(void);
#endif
int get_kbinput(WINDOW *win, int *meta_key); int get_kbinput(WINDOW *win, int *meta_key);
int *get_verbatim_kbinput(WINDOW *win, size_t *kbinput_len, int int get_translated_kbinput(int kbinput, int *es
allow_ascii); #ifndef NANO_SMALL
int get_ignored_kbinput(WINDOW *win); , int reset
int get_accepted_kbinput(WINDOW *win, int kbinput, int *meta_key); #endif
int get_ascii_kbinput(WINDOW *win, int kbinput); );
int get_escape_seq_kbinput(WINDOW *win, int *escape_seq, size_t int get_ascii_kbinput(int kbinput, size_t ascii_digits
escape_seq_len); #ifndef NANO_SMALL
, int reset
#endif
);
int get_control_kbinput(int kbinput);
int get_escape_seq_kbinput(int *escape_seq, size_t es_len);
int get_escape_seq_abcd(int kbinput); int get_escape_seq_abcd(int kbinput);
int *get_verbatim_kbinput(WINDOW *win, int *verbatim_kbinput, size_t
*verbatim_len, int allow_ascii);
int get_untranslated_kbinput(int kbinput, size_t position, int
allow_ascii
#ifndef NANO_SMALL
, int reset
#endif
);
#ifndef DISABLE_MOUSE #ifndef DISABLE_MOUSE
int get_mouseinput(int *mouse_x, int *mouse_y, int shortcut); int get_mouseinput(int *mouse_x, int *mouse_y, int shortcut);
#endif #endif
......
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment