1 /* readline.c -- a general facility for reading lines of input
2 with emacs style editing and completion. */
4 /* Copyright (C) 1987-2005 Free Software Foundation, Inc.
6 This file is part of the GNU Readline Library, a library for
7 reading lines of text with interactive input and history editing.
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.
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.
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
25 #if defined (HAVE_CONFIG_H)
29 #include <sys/types.h>
30 #include "posixstat.h"
32 #if defined (HAVE_SYS_FILE_H)
33 # include <sys/file.h>
34 #endif /* HAVE_SYS_FILE_H */
36 #if defined (HAVE_UNISTD_H)
38 #endif /* HAVE_UNISTD_H */
40 #if defined (HAVE_STDLIB_H)
43 # include "ansi_stdlib.h"
44 #endif /* HAVE_STDLIB_H */
46 #if defined (HAVE_LOCALE_H)
53 /* System-specific feature definitions and include files. */
58 # define INCL_DOSPROCESS
62 /* Some standard library routines. */
66 #include "rlprivate.h"
70 #ifndef RL_LIBRARY_VERSION
71 # define RL_LIBRARY_VERSION "5.1"
74 #ifndef RL_READLINE_VERSION
75 # define RL_READLINE_VERSION 0x0501
78 extern void _rl_free_history_entry
PARAMS((HIST_ENTRY
*));
80 /* Forward declarations used in this file. */
81 static char *readline_internal
PARAMS((void));
82 static void readline_initialize_everything
PARAMS((void));
84 static void bind_arrow_keys_internal
PARAMS((Keymap
));
85 static void bind_arrow_keys
PARAMS((void));
87 static void readline_default_bindings
PARAMS((void));
88 static void reset_default_bindings
PARAMS((void));
90 static int _rl_subseq_result
PARAMS((int, Keymap
, int, int));
91 static int _rl_subseq_getchar
PARAMS((int));
93 /* **************************************************************** */
95 /* Line editing input utility */
97 /* **************************************************************** */
99 const char *rl_library_version
= RL_LIBRARY_VERSION
;
101 int rl_readline_version
= RL_READLINE_VERSION
;
103 /* True if this is `real' readline as opposed to some stub substitute. */
104 int rl_gnu_readline_p
= 1;
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
;
111 /* The current style of editing. */
112 int rl_editing_mode
= emacs_mode
;
114 /* The current insert mode: input (the default) or overwrite */
115 int rl_insert_mode
= RL_IM_DEFAULT
;
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. */
122 /* Non-zero if the previous command was a kill command. */
123 int _rl_last_command_was_kill
= 0;
125 /* The current value of the numeric argument specified by the user. */
126 int rl_numeric_arg
= 1;
128 /* Non-zero if an argument was typed. */
129 int rl_explicit_arg
= 0;
131 /* Temporary value used while generating the argument. */
134 /* Non-zero means we have been called at least once before. */
135 static int rl_initialized
;
138 /* If non-zero, this program is running in an EMACS buffer. */
139 static int running_in_emacs
;
142 /* Flags word encapsulating the current readline state. */
143 int rl_readline_state
= RL_STATE_NONE
;
145 /* The current offset in the current input line. */
148 /* Mark in the current input line. */
151 /* Length of the current input line. */
154 /* Make this non-zero to return the current input_line. */
157 /* The last function executed by readline. */
158 rl_command_func_t
*rl_last_func
= (rl_command_func_t
*)NULL
;
160 /* Top level environment for readline_internal (). */
161 procenv_t readline_top_level
;
163 /* The streams we interact with. */
164 FILE *_rl_in_stream
, *_rl_out_stream
;
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
;
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;
176 /* Current prompt. */
177 char *rl_prompt
= (char *)NULL
;
178 int rl_visible_prompt_length
= 0;
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;
184 /* The number of characters read in order to type this complete command. */
185 int rl_key_sequence_length
= 0;
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
;
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
;
196 /* What we use internally. You should always refer to RL_LINE_BUFFER. */
197 static char *the_line
;
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');
203 /* Non-zero makes this the next keystroke to read. */
204 int rl_pending_input
= 0;
206 /* Pointer to a useful terminal name. */
207 const char *rl_terminal_name
= (const char *)NULL
;
209 /* Non-zero means to always use horizontal scrolling in line display. */
210 int _rl_horizontal_scroll_mode
= 0;
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;
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
;
220 /* String inserted into the line by rl_insert_comment (). */
221 char *_rl_comment_begin
;
223 /* Keymap holding the function currently being executed. */
224 Keymap rl_executing_keymap
;
226 /* Keymap we're currently using to dispatch. */
227 Keymap _rl_dispatching_keymap
;
229 /* Non-zero means to erase entire line, including prompt, on empty input lines. */
230 int rl_erase_empty_line
= 0;
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
;
236 /* Line buffer and maintenence. */
237 char *rl_line_buffer
= (char *)NULL
;
238 int rl_line_buffer_len
= 0;
240 /* Key sequence `contexts' */
241 _rl_keyseq_cxt
*_rl_kscxt
= 0;
243 /* Forward declarations used by the display, termcap, and history code. */
245 /* **************************************************************** */
247 /* `Forward' declarations */
249 /* **************************************************************** */
251 /* Non-zero means do not parse any lines other than comments and
252 parser directives. */
253 unsigned char _rl_parsing_conditionalized_out
= 0;
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;
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;
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;
268 /* **************************************************************** */
270 /* Top Level Functions */
272 /* **************************************************************** */
274 /* Non-zero means treat 0200 bit in terminal input as Meta bit. */
275 int _rl_meta_flag
= 0; /* Forward declaration */
277 /* Set up the prompt and expand it. Called from readline() and
278 rl_callback_handler_install (). */
280 rl_set_prompt (prompt
)
284 rl_prompt
= prompt
? savestring (prompt
) : (char *)NULL
;
286 rl_visible_prompt_length
= rl_expand_prompt (rl_prompt
);
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. */
298 /* If we are at EOF return a NULL string. */
299 if (rl_pending_input
== EOF
)
301 rl_clear_pending_input ();
302 return ((char *)NULL
);
305 rl_set_prompt (prompt
);
308 if (rl_prep_term_function
)
309 (*rl_prep_term_function
) (_rl_meta_flag
);
311 #if defined (HANDLE_SIGNALS)
315 value
= readline_internal ();
316 if (rl_deprep_term_function
)
317 (*rl_deprep_term_function
) ();
319 #if defined (HANDLE_SIGNALS)
326 #if defined (READLINE_CALLBACKS)
327 # define STATIC_CALLBACK
329 # define STATIC_CALLBACK static
333 readline_internal_setup ()
337 _rl_in_stream
= rl_instream
;
338 _rl_out_stream
= rl_outstream
;
341 (*rl_startup_hook
) ();
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
)
348 if (rl_prompt
&& rl_already_prompted
== 0)
350 nprompt
= _rl_strip_prompt (rl_prompt
);
351 fprintf (_rl_out_stream
, "%s", nprompt
);
352 fflush (_rl_out_stream
);
358 if (rl_prompt
&& rl_already_prompted
)
359 rl_on_new_line_with_prompt ();
362 (*rl_redisplay_function
) ();
365 #if defined (VI_MODE)
366 if (rl_editing_mode
== vi_mode
)
367 rl_vi_insertion_mode (1, 'i');
370 if (rl_pre_input_hook
)
371 (*rl_pre_input_hook
) ();
374 STATIC_CALLBACK
char *
375 readline_internal_teardown (eof
)
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 ();
385 if (entry
&& rl_undo_list
)
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
);
392 strcpy (the_line
, temp
);
396 /* At any rate, it is highly likely that this line has an undo list. Get
399 rl_free_undo_list ();
401 /* Restore normal cursor, if available. */
402 _rl_set_insert_mode (RL_IM_INSERT
, 0);
404 return (eof
? (char *)NULL
: savestring (the_line
));
408 _rl_internal_char_cleanup ()
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
)
417 if (rl_num_chars_to_read
&& rl_end
>= rl_num_chars_to_read
)
419 (*rl_redisplay_function
) ();
420 _rl_want_redisplay
= 0;
421 rl_newline (1, '\n');
426 (*rl_redisplay_function
) ();
427 _rl_want_redisplay
= 0;
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 ();
438 #if defined (READLINE_CALLBACKS)
439 readline_internal_char ()
441 readline_internal_charloop ()
444 static int lastc
, eof_found
;
450 #if !defined (READLINE_CALLBACKS)
454 lk
= _rl_last_command_was_kill
;
456 code
= setjmp (readline_top_level
);
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
))
470 if (rl_pending_input
== 0)
472 /* Then initialize the argument and number of keys read. */
473 _rl_reset_argument ();
474 rl_key_sequence_length
= 0;
477 RL_SETSTATE(RL_STATE_READCMD
);
479 RL_UNSETSTATE(RL_STATE_READCMD
);
481 /* EOF typed to a non-blank line is a <NL>. */
482 if (c
== EOF
&& rl_end
)
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
)
489 #if defined (READLINE_CALLBACKS)
490 RL_SETSTATE(RL_STATE_DONE
);
491 return (rl_done
= 1);
499 _rl_dispatch ((unsigned char)c
, _rl_keymap
);
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;
507 _rl_internal_char_cleanup ();
509 #if defined (READLINE_CALLBACKS)
518 #if defined (READLINE_CALLBACKS)
520 readline_internal_charloop ()
525 eof
= readline_internal_char ();
528 #endif /* READLINE_CALLBACKS */
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. */
538 readline_internal_setup ();
539 eof
= readline_internal_charloop ();
540 return (readline_internal_teardown (eof
));
544 _rl_init_line_state ()
546 rl_point
= rl_end
= rl_mark
= 0;
547 the_line
= rl_line_buffer
;
554 the_line
= rl_line_buffer
;
557 #if defined (READLINE_CALLBACKS)
559 _rl_keyseq_cxt_alloc ()
563 cxt
= (_rl_keyseq_cxt
*)xmalloc (sizeof (_rl_keyseq_cxt
));
565 cxt
->flags
= cxt
->subseq_arg
= cxt
->subseq_retval
= 0;
568 cxt
->ocxt
= _rl_kscxt
;
569 cxt
->childval
= 42; /* sentinel value */
575 _rl_keyseq_cxt_dispose (cxt
)
582 _rl_keyseq_chain_dispose ()
589 _rl_kscxt
= _rl_kscxt
->ocxt
;
590 _rl_keyseq_cxt_dispose (cxt
);
596 _rl_subseq_getchar (key
)
602 RL_SETSTATE(RL_STATE_METANEXT
);
603 RL_SETSTATE(RL_STATE_MOREINPUT
);
605 RL_UNSETSTATE(RL_STATE_MOREINPUT
);
607 RL_UNSETSTATE(RL_STATE_METANEXT
);
612 #if defined (READLINE_CALLBACKS)
614 _rl_dispatch_callback (cxt
)
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)
627 nkey
= _rl_subseq_getchar (cxt
->okey
);
628 r
= _rl_dispatch_subseq (nkey
, cxt
->dmap
, cxt
->subseq_arg
);
629 cxt
->flags
|= KSEQ_DISPATCHED
;
634 r
= _rl_dispatch_subseq (nkey
, cxt
->dmap
, cxt
->subseq_arg
);
638 r
= _rl_subseq_result (r
, cxt
->oldmap
, cxt
->okey
, (cxt
->flags
& KSEQ_SUBSEQ
));
640 if (r
== 0) /* success! */
642 _rl_keyseq_chain_dispose ();
643 RL_UNSETSTATE (RL_STATE_MULTIKEY
);
647 if (r
!= -3) /* magic value that says we added to the chain */
648 _rl_kscxt
= cxt
->ocxt
;
650 _rl_kscxt
->childval
= r
;
652 _rl_keyseq_cxt_dispose (cxt
);
656 #endif /* READLINE_CALLBACKS */
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. */
662 _rl_dispatch (key
, map
)
666 _rl_dispatching_keymap
= map
;
667 return _rl_dispatch_subseq (key
, map
, 0);
671 _rl_dispatch_subseq (key
, map
, got_subseq
)
678 rl_command_func_t
*func
;
679 #if defined (READLINE_CALLBACKS)
683 if (META_CHAR (key
) && _rl_convert_meta_chars_to_ascii
)
685 if (map
[ESC
].type
== ISKMAP
)
687 if (RL_ISSTATE (RL_STATE_MACRODEF
))
688 _rl_add_macro_char (ESC
);
689 map
= FUNCTION_TO_KEYMAP (map
, ESC
);
691 rl_key_sequence_length
+= 2;
692 return (_rl_dispatch (key
, map
));
699 if (RL_ISSTATE (RL_STATE_MACRODEF
))
700 _rl_add_macro_char (key
);
703 switch (map
[key
].type
)
706 func
= map
[key
].function
;
709 /* Special case rl_do_lowercase_version (). */
710 if (func
== rl_do_lowercase_version
)
711 return (_rl_dispatch (_rl_to_lower (key
), map
));
713 rl_executing_keymap
= map
;
716 RL_SETSTATE(RL_STATE_DISPATCHING
);
717 r
= (*map
[key
].function
)(rl_numeric_arg
* rl_arg_sign
, key
);
718 RL_UNSETSTATE(RL_STATE_DISPATCHING
);
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
;
727 else if (map
[ANYOTHERKEY
].function
)
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
);
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
);
746 #if defined (READLINE_CALLBACKS)
747 RL_UNSETSTATE (RL_STATE_MULTIKEY
);
748 _rl_keyseq_chain_dispose ();
750 _rl_abort_internal ();
756 if (map
[key
].function
!= 0)
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
)));
770 rl_key_sequence_length
++;
771 _rl_dispatching_keymap
= FUNCTION_TO_KEYMAP (map
, key
);
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
))
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 ();
786 cxt
->flags
|= KSEQ_SUBSEQ
;
789 cxt
->dmap
= _rl_dispatching_keymap
;
790 cxt
->subseq_arg
= got_subseq
|| cxt
->dmap
[ANYOTHERKEY
].function
;
792 RL_SETSTATE (RL_STATE_MULTIKEY
);
795 return r
; /* don't indicate immediate success */
799 newkey
= _rl_subseq_getchar (key
);
802 _rl_abort_internal ();
806 r
= _rl_dispatch_subseq (newkey
, _rl_dispatching_keymap
, got_subseq
|| map
[ANYOTHERKEY
].function
);
807 return _rl_subseq_result (r
, map
, key
, got_subseq
);
811 _rl_abort_internal ();
817 if (map
[key
].function
!= 0)
819 macro
= savestring ((char *)map
[key
].function
);
820 _rl_with_macro_input (macro
);
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
);
836 _rl_subseq_result (r
, map
, key
, got_subseq
)
843 rl_command_func_t
*func
, *nf
;
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. */
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
)
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. */
863 nf
= m
[key
].function
;
866 m
[key
].function
= func
;
867 r
= _rl_dispatch (key
, m
);
869 m
[key
].function
= nf
;
872 r
= _rl_dispatch (ANYOTHERKEY
, m
);
874 else if (r
&& map
[ANYOTHERKEY
].function
)
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
;
883 else if (r
&& got_subseq
)
885 /* OK, back up the chain. */
886 _rl_unget_char (key
);
887 _rl_dispatching_keymap
= map
;
894 /* **************************************************************** */
896 /* Initializations */
898 /* **************************************************************** */
900 /* Initialize readline (and terminal if not already). */
904 /* If we have never been called before, initialize the
905 terminal and data structures. */
908 RL_SETSTATE(RL_STATE_INITIALIZING
);
909 readline_initialize_everything ();
910 RL_UNSETSTATE(RL_STATE_INITIALIZING
);
912 RL_SETSTATE(RL_STATE_INITIALIZED
);
915 /* Initalize the current line information. */
916 _rl_init_line_state ();
918 /* We aren't done yet. We haven't even gotten started yet! */
920 RL_UNSETSTATE(RL_STATE_DONE
);
922 /* Tell the history routines what is going on. */
923 _rl_start_using_history ();
925 /* Make the display buffer match the state of the line. */
926 rl_reset_line_state ();
928 /* No such function typed yet. */
929 rl_last_func
= (rl_command_func_t
*)NULL
;
931 /* Parsing of key-bindings begins in an enabled state. */
932 _rl_parsing_conditionalized_out
= 0;
934 #if defined (VI_MODE)
935 if (rl_editing_mode
== vi_mode
)
936 _rl_vi_initialize_line ();
939 /* Each line starts in insert mode (the default). */
940 _rl_set_insert_mode (RL_IM_DEFAULT
, 1);
946 #if defined (__EMX__)
948 _emx_build_environ ()
955 DosGetInfoBlocks (&tibp
, &pibp
);
956 t
= pibp
->pib_pchenv
;
959 tp
= environ
= (char **)xmalloc ((c
+ 1) * sizeof (char *));
960 t
= pibp
->pib_pchenv
;
971 /* Initialize the entire state of the world. */
973 readline_initialize_everything ()
976 #if defined (__EMX__)
978 _emx_build_environ ();
983 /* Find out if we are running in Emacs -- UNUSED. */
984 running_in_emacs
= sh_get_env_value ("EMACS") != (char *)0;
987 /* Set up input and output if they are not already set up. */
992 rl_outstream
= stdout
;
994 /* Bind _rl_in_stream and _rl_out_stream immediately. These values
995 may change, but they may also be used before readline_internal ()
997 _rl_in_stream
= rl_instream
;
998 _rl_out_stream
= rl_outstream
;
1000 /* Allocate data structures. */
1001 if (rl_line_buffer
== 0)
1002 rl_line_buffer
= (char *)xmalloc (rl_line_buffer_len
= DEFAULT_BUFFER_SIZE
);
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
);
1009 /* Bind tty characters to readline functions. */
1010 readline_default_bindings ();
1012 /* Initialize the function names. */
1013 rl_initialize_funmap ();
1015 /* Decide whether we should automatically go into eight-bit mode. */
1016 _rl_init_eightbit ();
1018 /* Read in the init file. */
1019 rl_read_init_file ((char *)NULL
);
1022 if (_rl_horizontal_scroll_mode
&& _rl_term_autowrap
)
1025 _rl_screenchars
-= _rl_screenheight
;
1028 /* Override the effect of any `set keymap' assignments in the
1030 rl_set_keymap_from_edit_mode ();
1032 /* Try to bind a common arrow key prefix, if not already bound. */
1035 /* Enable the meta key, if this terminal has one. */
1036 if (_rl_enable_meta
)
1037 _rl_enable_meta_key ();
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
;
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. */
1049 readline_default_bindings ()
1051 if (_rl_bind_stty_chars
)
1052 rl_tty_set_default_bindings (_rl_keymap
);
1055 /* Reset the default bindings for the terminal special characters we're
1056 interested in back to rl_insert and read the new ones. */
1058 reset_default_bindings ()
1060 if (_rl_bind_stty_chars
)
1062 rl_tty_unset_default_bindings (_rl_keymap
);
1063 rl_tty_set_default_bindings (_rl_keymap
);
1067 /* Bind some common arrow key sequences in MAP. */
1069 bind_arrow_keys_internal (map
)
1074 xkeymap
= _rl_keymap
;
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
);
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
);
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
);
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
);
1105 _rl_keymap
= xkeymap
;
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. */
1114 bind_arrow_keys_internal (emacs_standard_keymap
);
1116 #if defined (VI_MODE)
1117 bind_arrow_keys_internal (vi_movement_keymap
);
1118 bind_arrow_keys_internal (vi_insertion_keymap
);
1122 /* **************************************************************** */
1124 /* Saving and Restoring Readline's state */
1126 /* **************************************************************** */
1130 struct readline_state
*sp
;
1135 sp
->point
= rl_point
;
1138 sp
->buffer
= rl_line_buffer
;
1139 sp
->buflen
= rl_line_buffer_len
;
1140 sp
->ul
= rl_undo_list
;
1141 sp
->prompt
= rl_prompt
;
1143 sp
->rlstate
= rl_readline_state
;
1145 sp
->kmap
= _rl_keymap
;
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
;
1156 sp
->catchsigs
= rl_catch_signals
;
1157 sp
->catchsigwinch
= rl_catch_sigwinch
;
1163 rl_restore_state (sp
)
1164 struct readline_state
*sp
;
1169 rl_point
= sp
->point
;
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
;
1177 rl_readline_state
= sp
->rlstate
;
1179 _rl_keymap
= sp
->kmap
;
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
;
1190 rl_catch_signals
= sp
->catchsigs
;
1191 rl_catch_sigwinch
= sp
->catchsigwinch
;