Imported from ../bash-3.1.tar.gz.
[platform/upstream/bash.git] / lib / readline / readline.c
1 /* readline.c -- a general facility for reading lines of input
2    with emacs style editing and completion. */
3
4 /* Copyright (C) 1987-2005 Free Software Foundation, Inc.
5
6    This file is part of the GNU Readline Library, a library for
7    reading lines of text with interactive input and history editing.
8
9    The GNU Readline Library is free software; you can redistribute it
10    and/or modify it under the terms of the GNU General Public License
11    as published by the Free Software Foundation; either version 2, or
12    (at your option) any later version.
13
14    The GNU Readline Library is distributed in the hope that it will be
15    useful, but WITHOUT ANY WARRANTY; without even the implied warranty
16    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    The GNU General Public License is often shipped with GNU software, and
20    is generally kept in a file called COPYING or LICENSE.  If you do not
21    have a copy of the license, write to the Free Software Foundation,
22    59 Temple Place, Suite 330, Boston, MA 02111 USA. */
23 #define READLINE_LIBRARY
24
25 #if defined (HAVE_CONFIG_H)
26 #  include <config.h>
27 #endif
28
29 #include <sys/types.h>
30 #include "posixstat.h"
31 #include <fcntl.h>
32 #if defined (HAVE_SYS_FILE_H)
33 #  include <sys/file.h>
34 #endif /* HAVE_SYS_FILE_H */
35
36 #if defined (HAVE_UNISTD_H)
37 #  include <unistd.h>
38 #endif /* HAVE_UNISTD_H */
39
40 #if defined (HAVE_STDLIB_H)
41 #  include <stdlib.h>
42 #else
43 #  include "ansi_stdlib.h"
44 #endif /* HAVE_STDLIB_H */
45
46 #if defined (HAVE_LOCALE_H)
47 #  include <locale.h>
48 #endif
49
50 #include <stdio.h>
51 #include "posixjmp.h"
52
53 /* System-specific feature definitions and include files. */
54 #include "rldefs.h"
55 #include "rlmbutil.h"
56
57 #if defined (__EMX__)
58 #  define INCL_DOSPROCESS
59 #  include <os2.h>
60 #endif /* __EMX__ */
61
62 /* Some standard library routines. */
63 #include "readline.h"
64 #include "history.h"
65
66 #include "rlprivate.h"
67 #include "rlshell.h"
68 #include "xmalloc.h"
69
70 #ifndef RL_LIBRARY_VERSION
71 #  define RL_LIBRARY_VERSION "5.1"
72 #endif
73
74 #ifndef RL_READLINE_VERSION
75 #  define RL_READLINE_VERSION   0x0501
76 #endif
77
78 extern void _rl_free_history_entry PARAMS((HIST_ENTRY *));
79
80 /* Forward declarations used in this file. */
81 static char *readline_internal PARAMS((void));
82 static void readline_initialize_everything PARAMS((void));
83
84 static void bind_arrow_keys_internal PARAMS((Keymap));
85 static void bind_arrow_keys PARAMS((void));
86
87 static void readline_default_bindings PARAMS((void));
88 static void reset_default_bindings PARAMS((void));
89
90 static int _rl_subseq_result PARAMS((int, Keymap, int, int));
91 static int _rl_subseq_getchar PARAMS((int));
92
93 /* **************************************************************** */
94 /*                                                                  */
95 /*                      Line editing input utility                  */
96 /*                                                                  */
97 /* **************************************************************** */
98
99 const char *rl_library_version = RL_LIBRARY_VERSION;
100
101 int rl_readline_version = RL_READLINE_VERSION;
102
103 /* True if this is `real' readline as opposed to some stub substitute. */
104 int rl_gnu_readline_p = 1;
105
106 /* A pointer to the keymap that is currently in use.
107    By default, it is the standard emacs keymap. */
108 Keymap _rl_keymap = emacs_standard_keymap;
109
110
111 /* The current style of editing. */
112 int rl_editing_mode = emacs_mode;
113
114 /* The current insert mode:  input (the default) or overwrite */
115 int rl_insert_mode = RL_IM_DEFAULT;
116
117 /* Non-zero if we called this function from _rl_dispatch().  It's present
118    so functions can find out whether they were called from a key binding
119    or directly from an application. */
120 int rl_dispatching;
121
122 /* Non-zero if the previous command was a kill command. */
123 int _rl_last_command_was_kill = 0;
124
125 /* The current value of the numeric argument specified by the user. */
126 int rl_numeric_arg = 1;
127
128 /* Non-zero if an argument was typed. */
129 int rl_explicit_arg = 0;
130
131 /* Temporary value used while generating the argument. */
132 int rl_arg_sign = 1;
133
134 /* Non-zero means we have been called at least once before. */
135 static int rl_initialized;
136
137 #if 0
138 /* If non-zero, this program is running in an EMACS buffer. */
139 static int running_in_emacs;
140 #endif
141
142 /* Flags word encapsulating the current readline state. */
143 int rl_readline_state = RL_STATE_NONE;
144
145 /* The current offset in the current input line. */
146 int rl_point;
147
148 /* Mark in the current input line. */
149 int rl_mark;
150
151 /* Length of the current input line. */
152 int rl_end;
153
154 /* Make this non-zero to return the current input_line. */
155 int rl_done;
156
157 /* The last function executed by readline. */
158 rl_command_func_t *rl_last_func = (rl_command_func_t *)NULL;
159
160 /* Top level environment for readline_internal (). */
161 procenv_t readline_top_level;
162
163 /* The streams we interact with. */
164 FILE *_rl_in_stream, *_rl_out_stream;
165
166 /* The names of the streams that we do input and output to. */
167 FILE *rl_instream = (FILE *)NULL;
168 FILE *rl_outstream = (FILE *)NULL;
169
170 /* Non-zero means echo characters as they are read.  Defaults to no echo;
171    set to 1 if there is a controlling terminal, we can get its attributes,
172    and the attributes include `echo'.  Look at rltty.c:prepare_terminal_settings
173    for the code that sets it. */
174 int readline_echoing_p = 0;
175
176 /* Current prompt. */
177 char *rl_prompt = (char *)NULL;
178 int rl_visible_prompt_length = 0;
179
180 /* Set to non-zero by calling application if it has already printed rl_prompt
181    and does not want readline to do it the first time. */
182 int rl_already_prompted = 0;
183
184 /* The number of characters read in order to type this complete command. */
185 int rl_key_sequence_length = 0;
186
187 /* If non-zero, then this is the address of a function to call just
188    before readline_internal_setup () prints the first prompt. */
189 rl_hook_func_t *rl_startup_hook = (rl_hook_func_t *)NULL;
190
191 /* If non-zero, this is the address of a function to call just before
192    readline_internal_setup () returns and readline_internal starts
193    reading input characters. */
194 rl_hook_func_t *rl_pre_input_hook = (rl_hook_func_t *)NULL;
195
196 /* What we use internally.  You should always refer to RL_LINE_BUFFER. */
197 static char *the_line;
198
199 /* The character that can generate an EOF.  Really read from
200    the terminal driver... just defaulted here. */
201 int _rl_eof_char = CTRL ('D');
202
203 /* Non-zero makes this the next keystroke to read. */
204 int rl_pending_input = 0;
205
206 /* Pointer to a useful terminal name. */
207 const char *rl_terminal_name = (const char *)NULL;
208
209 /* Non-zero means to always use horizontal scrolling in line display. */
210 int _rl_horizontal_scroll_mode = 0;
211
212 /* Non-zero means to display an asterisk at the starts of history lines
213    which have been modified. */
214 int _rl_mark_modified_lines = 0;  
215
216 /* The style of `bell' notification preferred.  This can be set to NO_BELL,
217    AUDIBLE_BELL, or VISIBLE_BELL. */
218 int _rl_bell_preference = AUDIBLE_BELL;
219      
220 /* String inserted into the line by rl_insert_comment (). */
221 char *_rl_comment_begin;
222
223 /* Keymap holding the function currently being executed. */
224 Keymap rl_executing_keymap;
225
226 /* Keymap we're currently using to dispatch. */
227 Keymap _rl_dispatching_keymap;
228
229 /* Non-zero means to erase entire line, including prompt, on empty input lines. */
230 int rl_erase_empty_line = 0;
231
232 /* Non-zero means to read only this many characters rather than up to a
233    character bound to accept-line. */
234 int rl_num_chars_to_read;
235
236 /* Line buffer and maintenence. */
237 char *rl_line_buffer = (char *)NULL;
238 int rl_line_buffer_len = 0;
239
240 /* Key sequence `contexts' */
241 _rl_keyseq_cxt *_rl_kscxt = 0;
242
243 /* Forward declarations used by the display, termcap, and history code. */
244
245 /* **************************************************************** */
246 /*                                                                  */
247 /*                      `Forward' declarations                      */
248 /*                                                                  */
249 /* **************************************************************** */
250
251 /* Non-zero means do not parse any lines other than comments and
252    parser directives. */
253 unsigned char _rl_parsing_conditionalized_out = 0;
254
255 /* Non-zero means to convert characters with the meta bit set to
256    escape-prefixed characters so we can indirect through
257    emacs_meta_keymap or vi_escape_keymap. */
258 int _rl_convert_meta_chars_to_ascii = 1;
259
260 /* Non-zero means to output characters with the meta bit set directly
261    rather than as a meta-prefixed escape sequence. */
262 int _rl_output_meta_chars = 0;
263
264 /* Non-zero means to look at the termios special characters and bind
265    them to equivalent readline functions at startup. */
266 int _rl_bind_stty_chars = 1;
267
268 /* **************************************************************** */
269 /*                                                                  */
270 /*                      Top Level Functions                         */
271 /*                                                                  */
272 /* **************************************************************** */
273
274 /* Non-zero means treat 0200 bit in terminal input as Meta bit. */
275 int _rl_meta_flag = 0;  /* Forward declaration */
276
277 /* Set up the prompt and expand it.  Called from readline() and
278    rl_callback_handler_install (). */
279 int
280 rl_set_prompt (prompt)
281      const char *prompt;
282 {
283   FREE (rl_prompt);
284   rl_prompt = prompt ? savestring (prompt) : (char *)NULL;
285
286   rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
287   return 0;
288 }
289   
290 /* Read a line of input.  Prompt with PROMPT.  An empty PROMPT means
291    none.  A return value of NULL means that EOF was encountered. */
292 char *
293 readline (prompt)
294      const char *prompt;
295 {
296   char *value;
297
298   /* If we are at EOF return a NULL string. */
299   if (rl_pending_input == EOF)
300     {
301       rl_clear_pending_input ();
302       return ((char *)NULL);
303     }
304
305   rl_set_prompt (prompt);
306
307   rl_initialize ();
308   if (rl_prep_term_function)
309     (*rl_prep_term_function) (_rl_meta_flag);
310
311 #if defined (HANDLE_SIGNALS)
312   rl_set_signals ();
313 #endif
314
315   value = readline_internal ();
316   if (rl_deprep_term_function)
317     (*rl_deprep_term_function) ();
318
319 #if defined (HANDLE_SIGNALS)
320   rl_clear_signals ();
321 #endif
322
323   return (value);
324 }
325
326 #if defined (READLINE_CALLBACKS)
327 #  define STATIC_CALLBACK
328 #else
329 #  define STATIC_CALLBACK static
330 #endif
331
332 STATIC_CALLBACK void
333 readline_internal_setup ()
334 {
335   char *nprompt;
336
337   _rl_in_stream = rl_instream;
338   _rl_out_stream = rl_outstream;
339
340   if (rl_startup_hook)
341     (*rl_startup_hook) ();
342
343   /* If we're not echoing, we still want to at least print a prompt, because
344      rl_redisplay will not do it for us.  If the calling application has a
345      custom redisplay function, though, let that function handle it. */
346   if (readline_echoing_p == 0 && rl_redisplay_function == rl_redisplay)
347     {
348       if (rl_prompt && rl_already_prompted == 0)
349         {
350           nprompt = _rl_strip_prompt (rl_prompt);
351           fprintf (_rl_out_stream, "%s", nprompt);
352           fflush (_rl_out_stream);
353           free (nprompt);
354         }
355     }
356   else
357     {
358       if (rl_prompt && rl_already_prompted)
359         rl_on_new_line_with_prompt ();
360       else
361         rl_on_new_line ();
362       (*rl_redisplay_function) ();
363     }
364
365 #if defined (VI_MODE)
366   if (rl_editing_mode == vi_mode)
367     rl_vi_insertion_mode (1, 'i');
368 #endif /* VI_MODE */
369
370   if (rl_pre_input_hook)
371     (*rl_pre_input_hook) ();
372 }
373
374 STATIC_CALLBACK char *
375 readline_internal_teardown (eof)
376      int eof;
377 {
378   char *temp;
379   HIST_ENTRY *entry;
380
381   /* Restore the original of this history line, iff the line that we
382      are editing was originally in the history, AND the line has changed. */
383   entry = current_history ();
384
385   if (entry && rl_undo_list)
386     {
387       temp = savestring (the_line);
388       rl_revert_line (1, 0);
389       entry = replace_history_entry (where_history (), the_line, (histdata_t)NULL);
390       _rl_free_history_entry (entry);
391
392       strcpy (the_line, temp);
393       free (temp);
394     }
395
396   /* At any rate, it is highly likely that this line has an undo list.  Get
397      rid of it now. */
398   if (rl_undo_list)
399     rl_free_undo_list ();
400
401   /* Restore normal cursor, if available. */
402   _rl_set_insert_mode (RL_IM_INSERT, 0);
403
404   return (eof ? (char *)NULL : savestring (the_line));
405 }
406
407 void
408 _rl_internal_char_cleanup ()
409 {
410 #if defined (VI_MODE)
411   /* In vi mode, when you exit insert mode, the cursor moves back
412      over the previous character.  We explicitly check for that here. */
413   if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap)
414     rl_vi_check ();
415 #endif /* VI_MODE */
416
417   if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read)
418     {
419       (*rl_redisplay_function) ();
420       _rl_want_redisplay = 0;
421       rl_newline (1, '\n');
422     }
423
424   if (rl_done == 0)
425     {
426       (*rl_redisplay_function) ();
427       _rl_want_redisplay = 0;
428     }
429
430   /* If the application writer has told us to erase the entire line if
431      the only character typed was something bound to rl_newline, do so. */
432   if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline &&
433       rl_point == 0 && rl_end == 0)
434     _rl_erase_entire_line ();
435 }
436
437 STATIC_CALLBACK int
438 #if defined (READLINE_CALLBACKS)
439 readline_internal_char ()
440 #else
441 readline_internal_charloop ()
442 #endif
443 {
444   static int lastc, eof_found;
445   int c, code, lk;
446
447   lastc = -1;
448   eof_found = 0;
449
450 #if !defined (READLINE_CALLBACKS)
451   while (rl_done == 0)
452     {
453 #endif
454       lk = _rl_last_command_was_kill;
455
456       code = setjmp (readline_top_level);
457
458       if (code)
459         {
460           (*rl_redisplay_function) ();
461           _rl_want_redisplay = 0;
462           /* If we get here, we're not being called from something dispatched
463              from _rl_callback_read_char(), which sets up its own value of
464              readline_top_level (saving and restoring the old, of course), so
465              we can just return here. */
466           if (RL_ISSTATE (RL_STATE_CALLBACK))
467             return (0);
468         }
469
470       if (rl_pending_input == 0)
471         {
472           /* Then initialize the argument and number of keys read. */
473           _rl_reset_argument ();
474           rl_key_sequence_length = 0;
475         }
476
477       RL_SETSTATE(RL_STATE_READCMD);
478       c = rl_read_key ();
479       RL_UNSETSTATE(RL_STATE_READCMD);
480
481       /* EOF typed to a non-blank line is a <NL>. */
482       if (c == EOF && rl_end)
483         c = NEWLINE;
484
485       /* The character _rl_eof_char typed to blank line, and not as the
486          previous character is interpreted as EOF. */
487       if (((c == _rl_eof_char && lastc != c) || c == EOF) && !rl_end)
488         {
489 #if defined (READLINE_CALLBACKS)
490           RL_SETSTATE(RL_STATE_DONE);
491           return (rl_done = 1);
492 #else
493           eof_found = 1;
494           break;
495 #endif
496         }
497
498       lastc = c;
499       _rl_dispatch ((unsigned char)c, _rl_keymap);
500
501       /* If there was no change in _rl_last_command_was_kill, then no kill
502          has taken place.  Note that if input is pending we are reading
503          a prefix command, so nothing has changed yet. */
504       if (rl_pending_input == 0 && lk == _rl_last_command_was_kill)
505         _rl_last_command_was_kill = 0;
506
507       _rl_internal_char_cleanup ();
508
509 #if defined (READLINE_CALLBACKS)
510       return 0;
511 #else
512     }
513
514   return (eof_found);
515 #endif
516 }
517
518 #if defined (READLINE_CALLBACKS)
519 static int
520 readline_internal_charloop ()
521 {
522   int eof = 1;
523
524   while (rl_done == 0)
525     eof = readline_internal_char ();
526   return (eof);
527 }
528 #endif /* READLINE_CALLBACKS */
529
530 /* Read a line of input from the global rl_instream, doing output on
531    the global rl_outstream.
532    If rl_prompt is non-null, then that is our prompt. */
533 static char *
534 readline_internal ()
535 {
536   int eof;
537
538   readline_internal_setup ();
539   eof = readline_internal_charloop ();
540   return (readline_internal_teardown (eof));
541 }
542
543 void
544 _rl_init_line_state ()
545 {
546   rl_point = rl_end = rl_mark = 0;
547   the_line = rl_line_buffer;
548   the_line[0] = 0;
549 }
550
551 void
552 _rl_set_the_line ()
553 {
554   the_line = rl_line_buffer;
555 }
556
557 #if defined (READLINE_CALLBACKS)
558 _rl_keyseq_cxt *
559 _rl_keyseq_cxt_alloc ()
560 {
561   _rl_keyseq_cxt *cxt;
562
563   cxt = (_rl_keyseq_cxt *)xmalloc (sizeof (_rl_keyseq_cxt));
564
565   cxt->flags = cxt->subseq_arg = cxt->subseq_retval = 0;
566
567   cxt->okey = 0;
568   cxt->ocxt = _rl_kscxt;
569   cxt->childval = 42;           /* sentinel value */
570
571   return cxt;
572 }
573
574 void
575 _rl_keyseq_cxt_dispose (cxt)
576     _rl_keyseq_cxt *cxt;
577 {
578   free (cxt);
579 }
580
581 void
582 _rl_keyseq_chain_dispose ()
583 {
584   _rl_keyseq_cxt *cxt;
585
586   while (_rl_kscxt)
587     {
588       cxt = _rl_kscxt;
589       _rl_kscxt = _rl_kscxt->ocxt;
590       _rl_keyseq_cxt_dispose (cxt);
591     }
592 }
593 #endif
594
595 static int
596 _rl_subseq_getchar (key)
597      int key;
598 {
599   int k;
600
601   if (key == ESC)
602     RL_SETSTATE(RL_STATE_METANEXT);
603   RL_SETSTATE(RL_STATE_MOREINPUT);
604   k = rl_read_key ();
605   RL_UNSETSTATE(RL_STATE_MOREINPUT);
606   if (key == ESC)
607     RL_UNSETSTATE(RL_STATE_METANEXT);
608
609   return k;
610 }
611
612 #if defined (READLINE_CALLBACKS)
613 int
614 _rl_dispatch_callback (cxt)
615      _rl_keyseq_cxt *cxt;
616 {
617   int nkey, r;
618
619   /* For now */
620 #if 1
621   /* The first time this context is used, we want to read input and dispatch
622      on it.  When traversing the chain of contexts back `up', we want to use
623      the value from the next context down.  We're simulating recursion using
624      a chain of contexts. */
625   if ((cxt->flags & KSEQ_DISPATCHED) == 0)
626     {
627       nkey = _rl_subseq_getchar (cxt->okey);
628       r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
629       cxt->flags |= KSEQ_DISPATCHED;
630     }
631   else
632     r = cxt->childval;
633 #else
634   r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
635 #endif
636
637   /* For now */
638   r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ));
639
640   if (r == 0)                   /* success! */
641     {
642       _rl_keyseq_chain_dispose ();
643       RL_UNSETSTATE (RL_STATE_MULTIKEY);
644       return r;
645     }
646
647   if (r != -3)                  /* magic value that says we added to the chain */
648     _rl_kscxt = cxt->ocxt;
649   if (_rl_kscxt)
650     _rl_kscxt->childval = r;
651   if (r != -3)
652     _rl_keyseq_cxt_dispose (cxt);
653
654   return r;
655 }
656 #endif /* READLINE_CALLBACKS */
657   
658 /* Do the command associated with KEY in MAP.
659    If the associated command is really a keymap, then read
660    another key, and dispatch into that map. */
661 int
662 _rl_dispatch (key, map)
663      register int key;
664      Keymap map;
665 {
666   _rl_dispatching_keymap = map;
667   return _rl_dispatch_subseq (key, map, 0);
668 }
669
670 int
671 _rl_dispatch_subseq (key, map, got_subseq)
672      register int key;
673      Keymap map;
674      int got_subseq;
675 {
676   int r, newkey;
677   char *macro;
678   rl_command_func_t *func;
679 #if defined (READLINE_CALLBACKS)
680   _rl_keyseq_cxt *cxt;
681 #endif
682
683   if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
684     {
685       if (map[ESC].type == ISKMAP)
686         {
687           if (RL_ISSTATE (RL_STATE_MACRODEF))
688             _rl_add_macro_char (ESC);
689           map = FUNCTION_TO_KEYMAP (map, ESC);
690           key = UNMETA (key);
691           rl_key_sequence_length += 2;
692           return (_rl_dispatch (key, map));
693         }
694       else
695         rl_ding ();
696       return 0;
697     }
698
699   if (RL_ISSTATE (RL_STATE_MACRODEF))
700     _rl_add_macro_char (key);
701
702   r = 0;
703   switch (map[key].type)
704     {
705     case ISFUNC:
706       func = map[key].function;
707       if (func)
708         {
709           /* Special case rl_do_lowercase_version (). */
710           if (func == rl_do_lowercase_version)
711             return (_rl_dispatch (_rl_to_lower (key), map));
712
713           rl_executing_keymap = map;
714
715           rl_dispatching = 1;
716           RL_SETSTATE(RL_STATE_DISPATCHING);
717           r = (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
718           RL_UNSETSTATE(RL_STATE_DISPATCHING);
719           rl_dispatching = 0;
720
721           /* If we have input pending, then the last command was a prefix
722              command.  Don't change the state of rl_last_func.  Otherwise,
723              remember the last command executed in this variable. */
724           if (rl_pending_input == 0 && map[key].function != rl_digit_argument)
725             rl_last_func = map[key].function;
726         }
727       else if (map[ANYOTHERKEY].function)
728         {
729           /* OK, there's no function bound in this map, but there is a
730              shadow function that was overridden when the current keymap
731              was created.  Return -2 to note  that. */
732           _rl_unget_char  (key);
733           return -2;
734         }
735       else if (got_subseq)
736         {
737           /* Return -1 to note that we're in a subsequence, but  we don't
738              have a matching key, nor was one overridden.  This means
739              we need to back up the recursion chain and find the last
740              subsequence that is bound to a function. */
741           _rl_unget_char (key);
742           return -1;
743         }
744       else
745         {
746 #if defined (READLINE_CALLBACKS)
747           RL_UNSETSTATE (RL_STATE_MULTIKEY);
748           _rl_keyseq_chain_dispose ();
749 #endif
750           _rl_abort_internal ();
751           return -1;
752         }
753       break;
754
755     case ISKMAP:
756       if (map[key].function != 0)
757         {
758 #if defined (VI_MODE)
759           /* The only way this test will be true is if a subsequence has been
760              bound starting with ESC, generally the arrow keys.  What we do is
761              check whether there's input in the queue, which there generally
762              will be if an arrow key has been pressed, and, if there's not,
763              just dispatch to (what we assume is) rl_vi_movement_mode right
764              away.  This is essentially an input test with a zero timeout. */
765           if (rl_editing_mode == vi_mode && key == ESC && map == vi_insertion_keymap
766               && _rl_input_queued (0) == 0)
767             return (_rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key)));
768 #endif
769
770           rl_key_sequence_length++;
771           _rl_dispatching_keymap = FUNCTION_TO_KEYMAP (map, key);
772
773           /* Allocate new context here.  Use linked contexts (linked through
774              cxt->ocxt) to simulate recursion */
775 #if defined (READLINE_CALLBACKS)
776           if (RL_ISSTATE (RL_STATE_CALLBACK))
777             {
778               /* Return 0 only the first time, to indicate success to
779                  _rl_callback_read_char.  The rest of the time, we're called
780                  from _rl_dispatch_callback, so we return 3 to indicate
781                  special handling is necessary. */
782               r = RL_ISSTATE (RL_STATE_MULTIKEY) ? -3 : 0;
783               cxt = _rl_keyseq_cxt_alloc ();
784
785               if (got_subseq)
786                 cxt->flags |= KSEQ_SUBSEQ;
787               cxt->okey = key;
788               cxt->oldmap = map;
789               cxt->dmap = _rl_dispatching_keymap;
790               cxt->subseq_arg = got_subseq || cxt->dmap[ANYOTHERKEY].function;
791
792               RL_SETSTATE (RL_STATE_MULTIKEY);
793               _rl_kscxt = cxt;
794
795               return r;         /* don't indicate immediate success */
796             }
797 #endif
798
799           newkey = _rl_subseq_getchar (key);
800           if (newkey < 0)
801             {
802               _rl_abort_internal ();
803               return -1;
804             }
805
806           r = _rl_dispatch_subseq (newkey, _rl_dispatching_keymap, got_subseq || map[ANYOTHERKEY].function);
807           return _rl_subseq_result (r, map, key, got_subseq);
808         }
809       else
810         {
811           _rl_abort_internal ();
812           return -1;
813         }
814       break;
815
816     case ISMACR:
817       if (map[key].function != 0)
818         {
819           macro = savestring ((char *)map[key].function);
820           _rl_with_macro_input (macro);
821           return 0;
822         }
823       break;
824     }
825 #if defined (VI_MODE)
826   if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
827       key != ANYOTHERKEY &&
828       _rl_vi_textmod_command (key))
829     _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
830 #endif
831
832   return (r);
833 }
834
835 static int
836 _rl_subseq_result (r, map, key, got_subseq)
837      int r;
838      Keymap map;
839      int key, got_subseq;
840 {
841   Keymap m;
842   int type, nt;
843   rl_command_func_t *func, *nf;
844   
845   if (r == -2)
846     /* We didn't match anything, and the keymap we're indexed into
847        shadowed a function previously bound to that prefix.  Call
848        the function.  The recursive call to _rl_dispatch_subseq has
849        already taken care of pushing any necessary input back onto
850        the input queue with _rl_unget_char. */
851     {
852       m = _rl_dispatching_keymap;
853       type = m[ANYOTHERKEY].type;
854       func = m[ANYOTHERKEY].function;
855       if (type == ISFUNC && func == rl_do_lowercase_version)
856         r = _rl_dispatch (_rl_to_lower (key), map);
857       else if (type == ISFUNC && func == rl_insert)
858         {
859           /* If the function that was shadowed was self-insert, we
860              somehow need a keymap with map[key].func == self-insert.
861              Let's use this one. */
862           nt = m[key].type;
863           nf = m[key].function;
864
865           m[key].type = type;
866           m[key].function = func;
867           r = _rl_dispatch (key, m);
868           m[key].type = nt;
869           m[key].function = nf;
870         }
871       else
872         r = _rl_dispatch (ANYOTHERKEY, m);
873     }
874   else if (r && map[ANYOTHERKEY].function)
875     {
876       /* We didn't match (r is probably -1), so return something to
877          tell the caller that it should try ANYOTHERKEY for an
878          overridden function. */
879       _rl_unget_char (key);
880       _rl_dispatching_keymap = map;
881       return -2;
882     }
883   else if (r && got_subseq)
884     {
885       /* OK, back up the chain. */
886       _rl_unget_char (key);
887       _rl_dispatching_keymap = map;
888       return -1;
889     }
890
891   return r;
892 }
893
894 /* **************************************************************** */
895 /*                                                                  */
896 /*                      Initializations                             */
897 /*                                                                  */
898 /* **************************************************************** */
899
900 /* Initialize readline (and terminal if not already). */
901 int
902 rl_initialize ()
903 {
904   /* If we have never been called before, initialize the
905      terminal and data structures. */
906   if (!rl_initialized)
907     {
908       RL_SETSTATE(RL_STATE_INITIALIZING);
909       readline_initialize_everything ();
910       RL_UNSETSTATE(RL_STATE_INITIALIZING);
911       rl_initialized++;
912       RL_SETSTATE(RL_STATE_INITIALIZED);
913     }
914
915   /* Initalize the current line information. */
916   _rl_init_line_state ();
917
918   /* We aren't done yet.  We haven't even gotten started yet! */
919   rl_done = 0;
920   RL_UNSETSTATE(RL_STATE_DONE);
921
922   /* Tell the history routines what is going on. */
923   _rl_start_using_history ();
924
925   /* Make the display buffer match the state of the line. */
926   rl_reset_line_state ();
927
928   /* No such function typed yet. */
929   rl_last_func = (rl_command_func_t *)NULL;
930
931   /* Parsing of key-bindings begins in an enabled state. */
932   _rl_parsing_conditionalized_out = 0;
933
934 #if defined (VI_MODE)
935   if (rl_editing_mode == vi_mode)
936     _rl_vi_initialize_line ();
937 #endif
938
939   /* Each line starts in insert mode (the default). */
940   _rl_set_insert_mode (RL_IM_DEFAULT, 1);
941
942   return 0;
943 }
944
945 #if 0
946 #if defined (__EMX__)
947 static void
948 _emx_build_environ ()
949 {
950   TIB *tibp;
951   PIB *pibp;
952   char *t, **tp;
953   int c;
954
955   DosGetInfoBlocks (&tibp, &pibp);
956   t = pibp->pib_pchenv;
957   for (c = 1; *t; c++)
958     t += strlen (t) + 1;
959   tp = environ = (char **)xmalloc ((c + 1) * sizeof (char *));
960   t = pibp->pib_pchenv;
961   while (*t)
962     {
963       *tp++ = t;
964       t += strlen (t) + 1;
965     }
966   *tp = 0;
967 }
968 #endif /* __EMX__ */
969 #endif
970
971 /* Initialize the entire state of the world. */
972 static void
973 readline_initialize_everything ()
974 {
975 #if 0
976 #if defined (__EMX__)
977   if (environ == 0)
978     _emx_build_environ ();
979 #endif
980 #endif
981
982 #if 0
983   /* Find out if we are running in Emacs -- UNUSED. */
984   running_in_emacs = sh_get_env_value ("EMACS") != (char *)0;
985 #endif
986
987   /* Set up input and output if they are not already set up. */
988   if (!rl_instream)
989     rl_instream = stdin;
990
991   if (!rl_outstream)
992     rl_outstream = stdout;
993
994   /* Bind _rl_in_stream and _rl_out_stream immediately.  These values
995      may change, but they may also be used before readline_internal ()
996      is called. */
997   _rl_in_stream = rl_instream;
998   _rl_out_stream = rl_outstream;
999
1000   /* Allocate data structures. */
1001   if (rl_line_buffer == 0)
1002     rl_line_buffer = (char *)xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE);
1003
1004   /* Initialize the terminal interface. */
1005   if (rl_terminal_name == 0)
1006     rl_terminal_name = sh_get_env_value ("TERM");
1007   _rl_init_terminal_io (rl_terminal_name);
1008
1009   /* Bind tty characters to readline functions. */
1010   readline_default_bindings ();
1011
1012   /* Initialize the function names. */
1013   rl_initialize_funmap ();
1014
1015   /* Decide whether we should automatically go into eight-bit mode. */
1016   _rl_init_eightbit ();
1017       
1018   /* Read in the init file. */
1019   rl_read_init_file ((char *)NULL);
1020
1021   /* XXX */
1022   if (_rl_horizontal_scroll_mode && _rl_term_autowrap)
1023     {
1024       _rl_screenwidth--;
1025       _rl_screenchars -= _rl_screenheight;
1026     }
1027
1028   /* Override the effect of any `set keymap' assignments in the
1029      inputrc file. */
1030   rl_set_keymap_from_edit_mode ();
1031
1032   /* Try to bind a common arrow key prefix, if not already bound. */
1033   bind_arrow_keys ();
1034
1035   /* Enable the meta key, if this terminal has one. */
1036   if (_rl_enable_meta)
1037     _rl_enable_meta_key ();
1038
1039   /* If the completion parser's default word break characters haven't
1040      been set yet, then do so now. */
1041   if (rl_completer_word_break_characters == (char *)NULL)
1042     rl_completer_word_break_characters = (char *)rl_basic_word_break_characters;
1043 }
1044
1045 /* If this system allows us to look at the values of the regular
1046    input editing characters, then bind them to their readline
1047    equivalents, iff the characters are not bound to keymaps. */
1048 static void
1049 readline_default_bindings ()
1050 {
1051   if (_rl_bind_stty_chars)
1052     rl_tty_set_default_bindings (_rl_keymap);
1053 }
1054
1055 /* Reset the default bindings for the terminal special characters we're
1056    interested in back to rl_insert and read the new ones. */
1057 static void
1058 reset_default_bindings ()
1059 {
1060   if (_rl_bind_stty_chars)
1061     {
1062       rl_tty_unset_default_bindings (_rl_keymap);
1063       rl_tty_set_default_bindings (_rl_keymap);
1064     }
1065 }
1066
1067 /* Bind some common arrow key sequences in MAP. */
1068 static void
1069 bind_arrow_keys_internal (map)
1070      Keymap map;
1071 {
1072   Keymap xkeymap;
1073
1074   xkeymap = _rl_keymap;
1075   _rl_keymap = map;
1076
1077 #if defined (__MSDOS__)
1078   rl_bind_keyseq_if_unbound ("\033[0A", rl_get_previous_history);
1079   rl_bind_keyseq_if_unbound ("\033[0B", rl_backward_char);
1080   rl_bind_keyseq_if_unbound ("\033[0C", rl_forward_char);
1081   rl_bind_keyseq_if_unbound ("\033[0D", rl_get_next_history);
1082 #endif
1083
1084   rl_bind_keyseq_if_unbound ("\033[A", rl_get_previous_history);
1085   rl_bind_keyseq_if_unbound ("\033[B", rl_get_next_history);
1086   rl_bind_keyseq_if_unbound ("\033[C", rl_forward_char);
1087   rl_bind_keyseq_if_unbound ("\033[D", rl_backward_char);
1088   rl_bind_keyseq_if_unbound ("\033[H", rl_beg_of_line);
1089   rl_bind_keyseq_if_unbound ("\033[F", rl_end_of_line);
1090
1091   rl_bind_keyseq_if_unbound ("\033OA", rl_get_previous_history);
1092   rl_bind_keyseq_if_unbound ("\033OB", rl_get_next_history);
1093   rl_bind_keyseq_if_unbound ("\033OC", rl_forward_char);
1094   rl_bind_keyseq_if_unbound ("\033OD", rl_backward_char);
1095   rl_bind_keyseq_if_unbound ("\033OH", rl_beg_of_line);
1096   rl_bind_keyseq_if_unbound ("\033OF", rl_end_of_line);
1097
1098 #if defined (__MINGW32__)
1099   rl_bind_keyseq_if_unbound ("\340H", rl_get_previous_history);
1100   rl_bind_keyseq_if_unbound ("\340P", rl_get_next_history);
1101   rl_bind_keyseq_if_unbound ("\340M", rl_forward_char);
1102   rl_bind_keyseq_if_unbound ("\340K", rl_backward_char);
1103 #endif
1104
1105   _rl_keymap = xkeymap;
1106 }
1107
1108 /* Try and bind the common arrow key prefixes after giving termcap and
1109    the inputrc file a chance to bind them and create `real' keymaps
1110    for the arrow key prefix. */
1111 static void
1112 bind_arrow_keys ()
1113 {
1114   bind_arrow_keys_internal (emacs_standard_keymap);
1115
1116 #if defined (VI_MODE)
1117   bind_arrow_keys_internal (vi_movement_keymap);
1118   bind_arrow_keys_internal (vi_insertion_keymap);
1119 #endif
1120 }
1121
1122 /* **************************************************************** */
1123 /*                                                                  */
1124 /*              Saving and Restoring Readline's state               */
1125 /*                                                                  */
1126 /* **************************************************************** */
1127
1128 int
1129 rl_save_state (sp)
1130      struct readline_state *sp;
1131 {
1132   if (sp == 0)
1133     return -1;
1134
1135   sp->point = rl_point;
1136   sp->end = rl_end;
1137   sp->mark = rl_mark;
1138   sp->buffer = rl_line_buffer;
1139   sp->buflen = rl_line_buffer_len;
1140   sp->ul = rl_undo_list;
1141   sp->prompt = rl_prompt;
1142
1143   sp->rlstate = rl_readline_state;
1144   sp->done = rl_done;
1145   sp->kmap = _rl_keymap;
1146
1147   sp->lastfunc = rl_last_func;
1148   sp->insmode = rl_insert_mode;
1149   sp->edmode = rl_editing_mode;
1150   sp->kseqlen = rl_key_sequence_length;
1151   sp->inf = rl_instream;
1152   sp->outf = rl_outstream;
1153   sp->pendingin = rl_pending_input;
1154   sp->macro = rl_executing_macro;
1155
1156   sp->catchsigs = rl_catch_signals;
1157   sp->catchsigwinch = rl_catch_sigwinch;
1158
1159   return (0);
1160 }
1161
1162 int
1163 rl_restore_state (sp)
1164      struct readline_state *sp;
1165 {
1166   if (sp == 0)
1167     return -1;
1168
1169   rl_point = sp->point;
1170   rl_end = sp->end;
1171   rl_mark = sp->mark;
1172   the_line = rl_line_buffer = sp->buffer;
1173   rl_line_buffer_len = sp->buflen;
1174   rl_undo_list = sp->ul;
1175   rl_prompt = sp->prompt;
1176
1177   rl_readline_state = sp->rlstate;
1178   rl_done = sp->done;
1179   _rl_keymap = sp->kmap;
1180
1181   rl_last_func = sp->lastfunc;
1182   rl_insert_mode = sp->insmode;
1183   rl_editing_mode = sp->edmode;
1184   rl_key_sequence_length = sp->kseqlen;
1185   rl_instream = sp->inf;
1186   rl_outstream = sp->outf;
1187   rl_pending_input = sp->pendingin;
1188   rl_executing_macro = sp->macro;
1189
1190   rl_catch_signals = sp->catchsigs;
1191   rl_catch_sigwinch = sp->catchsigwinch;
1192
1193   return (0);
1194 }