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
;
285 rl_display_prompt
= rl_prompt
? rl_prompt
: "";
287 rl_visible_prompt_length
= rl_expand_prompt (rl_prompt
);
291 /* Read a line of input. Prompt with PROMPT. An empty PROMPT means
292 none. A return value of NULL means that EOF was encountered. */
299 /* If we are at EOF return a NULL string. */
300 if (rl_pending_input
== EOF
)
302 rl_clear_pending_input ();
303 return ((char *)NULL
);
306 rl_set_prompt (prompt
);
309 if (rl_prep_term_function
)
310 (*rl_prep_term_function
) (_rl_meta_flag
);
312 #if defined (HANDLE_SIGNALS)
316 value
= readline_internal ();
317 if (rl_deprep_term_function
)
318 (*rl_deprep_term_function
) ();
320 #if defined (HANDLE_SIGNALS)
327 #if defined (READLINE_CALLBACKS)
328 # define STATIC_CALLBACK
330 # define STATIC_CALLBACK static
334 readline_internal_setup ()
338 _rl_in_stream
= rl_instream
;
339 _rl_out_stream
= rl_outstream
;
342 (*rl_startup_hook
) ();
344 /* If we're not echoing, we still want to at least print a prompt, because
345 rl_redisplay will not do it for us. If the calling application has a
346 custom redisplay function, though, let that function handle it. */
347 if (readline_echoing_p
== 0 && rl_redisplay_function
== rl_redisplay
)
349 if (rl_prompt
&& rl_already_prompted
== 0)
351 nprompt
= _rl_strip_prompt (rl_prompt
);
352 fprintf (_rl_out_stream
, "%s", nprompt
);
353 fflush (_rl_out_stream
);
359 if (rl_prompt
&& rl_already_prompted
)
360 rl_on_new_line_with_prompt ();
363 (*rl_redisplay_function
) ();
366 #if defined (VI_MODE)
367 if (rl_editing_mode
== vi_mode
)
368 rl_vi_insertion_mode (1, 'i');
371 if (rl_pre_input_hook
)
372 (*rl_pre_input_hook
) ();
375 STATIC_CALLBACK
char *
376 readline_internal_teardown (eof
)
382 /* Restore the original of this history line, iff the line that we
383 are editing was originally in the history, AND the line has changed. */
384 entry
= current_history ();
386 if (entry
&& rl_undo_list
)
388 temp
= savestring (the_line
);
389 rl_revert_line (1, 0);
390 entry
= replace_history_entry (where_history (), the_line
, (histdata_t
)NULL
);
391 _rl_free_history_entry (entry
);
393 strcpy (the_line
, temp
);
397 /* At any rate, it is highly likely that this line has an undo list. Get
400 rl_free_undo_list ();
402 /* Restore normal cursor, if available. */
403 _rl_set_insert_mode (RL_IM_INSERT
, 0);
405 return (eof
? (char *)NULL
: savestring (the_line
));
409 _rl_internal_char_cleanup ()
411 #if defined (VI_MODE)
412 /* In vi mode, when you exit insert mode, the cursor moves back
413 over the previous character. We explicitly check for that here. */
414 if (rl_editing_mode
== vi_mode
&& _rl_keymap
== vi_movement_keymap
)
418 if (rl_num_chars_to_read
&& rl_end
>= rl_num_chars_to_read
)
420 (*rl_redisplay_function
) ();
421 _rl_want_redisplay
= 0;
422 rl_newline (1, '\n');
427 (*rl_redisplay_function
) ();
428 _rl_want_redisplay
= 0;
431 /* If the application writer has told us to erase the entire line if
432 the only character typed was something bound to rl_newline, do so. */
433 if (rl_erase_empty_line
&& rl_done
&& rl_last_func
== rl_newline
&&
434 rl_point
== 0 && rl_end
== 0)
435 _rl_erase_entire_line ();
439 #if defined (READLINE_CALLBACKS)
440 readline_internal_char ()
442 readline_internal_charloop ()
445 static int lastc
, eof_found
;
451 #if !defined (READLINE_CALLBACKS)
455 lk
= _rl_last_command_was_kill
;
457 code
= setjmp (readline_top_level
);
461 (*rl_redisplay_function
) ();
462 _rl_want_redisplay
= 0;
463 /* If we get here, we're not being called from something dispatched
464 from _rl_callback_read_char(), which sets up its own value of
465 readline_top_level (saving and restoring the old, of course), so
466 we can just return here. */
467 if (RL_ISSTATE (RL_STATE_CALLBACK
))
471 if (rl_pending_input
== 0)
473 /* Then initialize the argument and number of keys read. */
474 _rl_reset_argument ();
475 rl_key_sequence_length
= 0;
478 RL_SETSTATE(RL_STATE_READCMD
);
480 RL_UNSETSTATE(RL_STATE_READCMD
);
482 /* EOF typed to a non-blank line is a <NL>. */
483 if (c
== EOF
&& rl_end
)
486 /* The character _rl_eof_char typed to blank line, and not as the
487 previous character is interpreted as EOF. */
488 if (((c
== _rl_eof_char
&& lastc
!= c
) || c
== EOF
) && !rl_end
)
490 #if defined (READLINE_CALLBACKS)
491 RL_SETSTATE(RL_STATE_DONE
);
492 return (rl_done
= 1);
500 _rl_dispatch ((unsigned char)c
, _rl_keymap
);
502 /* If there was no change in _rl_last_command_was_kill, then no kill
503 has taken place. Note that if input is pending we are reading
504 a prefix command, so nothing has changed yet. */
505 if (rl_pending_input
== 0 && lk
== _rl_last_command_was_kill
)
506 _rl_last_command_was_kill
= 0;
508 _rl_internal_char_cleanup ();
510 #if defined (READLINE_CALLBACKS)
519 #if defined (READLINE_CALLBACKS)
521 readline_internal_charloop ()
526 eof
= readline_internal_char ();
529 #endif /* READLINE_CALLBACKS */
531 /* Read a line of input from the global rl_instream, doing output on
532 the global rl_outstream.
533 If rl_prompt is non-null, then that is our prompt. */
539 readline_internal_setup ();
540 eof
= readline_internal_charloop ();
541 return (readline_internal_teardown (eof
));
545 _rl_init_line_state ()
547 rl_point
= rl_end
= rl_mark
= 0;
548 the_line
= rl_line_buffer
;
555 the_line
= rl_line_buffer
;
558 #if defined (READLINE_CALLBACKS)
560 _rl_keyseq_cxt_alloc ()
564 cxt
= (_rl_keyseq_cxt
*)xmalloc (sizeof (_rl_keyseq_cxt
));
566 cxt
->flags
= cxt
->subseq_arg
= cxt
->subseq_retval
= 0;
569 cxt
->ocxt
= _rl_kscxt
;
570 cxt
->childval
= 42; /* sentinel value */
576 _rl_keyseq_cxt_dispose (cxt
)
583 _rl_keyseq_chain_dispose ()
590 _rl_kscxt
= _rl_kscxt
->ocxt
;
591 _rl_keyseq_cxt_dispose (cxt
);
597 _rl_subseq_getchar (key
)
603 RL_SETSTATE(RL_STATE_METANEXT
);
604 RL_SETSTATE(RL_STATE_MOREINPUT
);
606 RL_UNSETSTATE(RL_STATE_MOREINPUT
);
608 RL_UNSETSTATE(RL_STATE_METANEXT
);
613 #if defined (READLINE_CALLBACKS)
615 _rl_dispatch_callback (cxt
)
622 /* The first time this context is used, we want to read input and dispatch
623 on it. When traversing the chain of contexts back `up', we want to use
624 the value from the next context down. We're simulating recursion using
625 a chain of contexts. */
626 if ((cxt
->flags
& KSEQ_DISPATCHED
) == 0)
628 nkey
= _rl_subseq_getchar (cxt
->okey
);
629 r
= _rl_dispatch_subseq (nkey
, cxt
->dmap
, cxt
->subseq_arg
);
630 cxt
->flags
|= KSEQ_DISPATCHED
;
635 r
= _rl_dispatch_subseq (nkey
, cxt
->dmap
, cxt
->subseq_arg
);
639 r
= _rl_subseq_result (r
, cxt
->oldmap
, cxt
->okey
, (cxt
->flags
& KSEQ_SUBSEQ
));
641 if (r
== 0) /* success! */
643 _rl_keyseq_chain_dispose ();
644 RL_UNSETSTATE (RL_STATE_MULTIKEY
);
648 if (r
!= -3) /* magic value that says we added to the chain */
649 _rl_kscxt
= cxt
->ocxt
;
651 _rl_kscxt
->childval
= r
;
653 _rl_keyseq_cxt_dispose (cxt
);
657 #endif /* READLINE_CALLBACKS */
659 /* Do the command associated with KEY in MAP.
660 If the associated command is really a keymap, then read
661 another key, and dispatch into that map. */
663 _rl_dispatch (key
, map
)
667 _rl_dispatching_keymap
= map
;
668 return _rl_dispatch_subseq (key
, map
, 0);
672 _rl_dispatch_subseq (key
, map
, got_subseq
)
679 rl_command_func_t
*func
;
680 #if defined (READLINE_CALLBACKS)
684 if (META_CHAR (key
) && _rl_convert_meta_chars_to_ascii
)
686 if (map
[ESC
].type
== ISKMAP
)
688 if (RL_ISSTATE (RL_STATE_MACRODEF
))
689 _rl_add_macro_char (ESC
);
690 map
= FUNCTION_TO_KEYMAP (map
, ESC
);
692 rl_key_sequence_length
+= 2;
693 return (_rl_dispatch (key
, map
));
700 if (RL_ISSTATE (RL_STATE_MACRODEF
))
701 _rl_add_macro_char (key
);
704 switch (map
[key
].type
)
707 func
= map
[key
].function
;
710 /* Special case rl_do_lowercase_version (). */
711 if (func
== rl_do_lowercase_version
)
712 return (_rl_dispatch (_rl_to_lower (key
), map
));
714 rl_executing_keymap
= map
;
717 RL_SETSTATE(RL_STATE_DISPATCHING
);
718 (*map
[key
].function
)(rl_numeric_arg
* rl_arg_sign
, key
);
719 RL_UNSETSTATE(RL_STATE_DISPATCHING
);
722 /* If we have input pending, then the last command was a prefix
723 command. Don't change the state of rl_last_func. Otherwise,
724 remember the last command executed in this variable. */
725 if (rl_pending_input
== 0 && map
[key
].function
!= rl_digit_argument
)
726 rl_last_func
= map
[key
].function
;
728 else if (map
[ANYOTHERKEY
].function
)
730 /* OK, there's no function bound in this map, but there is a
731 shadow function that was overridden when the current keymap
732 was created. Return -2 to note that. */
733 _rl_unget_char (key
);
738 /* Return -1 to note that we're in a subsequence, but we don't
739 have a matching key, nor was one overridden. This means
740 we need to back up the recursion chain and find the last
741 subsequence that is bound to a function. */
742 _rl_unget_char (key
);
747 #if defined (READLINE_CALLBACKS)
748 RL_UNSETSTATE (RL_STATE_MULTIKEY
);
749 _rl_keyseq_chain_dispose ();
751 _rl_abort_internal ();
757 if (map
[key
].function
!= 0)
759 #if defined (VI_MODE)
760 /* The only way this test will be true is if a subsequence has been
761 bound starting with ESC, generally the arrow keys. What we do is
762 check whether there's input in the queue, which there generally
763 will be if an arrow key has been pressed, and, if there's not,
764 just dispatch to (what we assume is) rl_vi_movement_mode right
765 away. This is essentially an input test with a zero timeout. */
766 if (rl_editing_mode
== vi_mode
&& key
== ESC
&& map
== vi_insertion_keymap
767 && _rl_input_queued (0) == 0)
768 return (_rl_dispatch (ANYOTHERKEY
, FUNCTION_TO_KEYMAP (map
, key
)));
771 rl_key_sequence_length
++;
772 _rl_dispatching_keymap
= FUNCTION_TO_KEYMAP (map
, key
);
774 /* Allocate new context here. Use linked contexts (linked through
775 cxt->ocxt) to simulate recursion */
776 #if defined (READLINE_CALLBACKS)
777 if (RL_ISSTATE (RL_STATE_CALLBACK
))
779 /* Return 0 only the first time, to indicate success to
780 _rl_callback_read_char. The rest of the time, we're called
781 from _rl_dispatch_callback, so we return 3 to indicate
782 special handling is necessary. */
783 r
= RL_ISSTATE (RL_STATE_MULTIKEY
) ? -3 : 0;
784 cxt
= _rl_keyseq_cxt_alloc ();
787 cxt
->flags
|= KSEQ_SUBSEQ
;
790 cxt
->dmap
= _rl_dispatching_keymap
;
791 cxt
->subseq_arg
= got_subseq
|| cxt
->dmap
[ANYOTHERKEY
].function
;
793 RL_SETSTATE (RL_STATE_MULTIKEY
);
796 return r
; /* don't indicate immediate success */
800 newkey
= _rl_subseq_getchar (key
);
803 _rl_abort_internal ();
807 r
= _rl_dispatch_subseq (newkey
, _rl_dispatching_keymap
, got_subseq
|| map
[ANYOTHERKEY
].function
);
808 return _rl_subseq_result (r
, map
, key
, got_subseq
);
812 _rl_abort_internal ();
818 if (map
[key
].function
!= 0)
820 macro
= savestring ((char *)map
[key
].function
);
821 _rl_with_macro_input (macro
);
826 #if defined (VI_MODE)
827 if (rl_editing_mode
== vi_mode
&& _rl_keymap
== vi_movement_keymap
&&
828 key
!= ANYOTHERKEY
&&
829 _rl_vi_textmod_command (key
))
830 _rl_vi_set_last (key
, rl_numeric_arg
, rl_arg_sign
);
837 _rl_subseq_result (r
, map
, key
, got_subseq
)
844 rl_command_func_t
*func
, *nf
;
847 /* We didn't match anything, and the keymap we're indexed into
848 shadowed a function previously bound to that prefix. Call
849 the function. The recursive call to _rl_dispatch_subseq has
850 already taken care of pushing any necessary input back onto
851 the input queue with _rl_unget_char. */
853 m
= _rl_dispatching_keymap
;
854 type
= m
[ANYOTHERKEY
].type
;
855 func
= m
[ANYOTHERKEY
].function
;
856 if (type
== ISFUNC
&& func
== rl_do_lowercase_version
)
857 r
= _rl_dispatch (_rl_to_lower (key
), map
);
858 else if (type
== ISFUNC
&& func
== rl_insert
)
860 /* If the function that was shadowed was self-insert, we
861 somehow need a keymap with map[key].func == self-insert.
862 Let's use this one. */
864 nf
= m
[key
].function
;
867 m
[key
].function
= func
;
868 r
= _rl_dispatch (key
, m
);
870 m
[key
].function
= nf
;
873 r
= _rl_dispatch (ANYOTHERKEY
, m
);
875 else if (r
&& map
[ANYOTHERKEY
].function
)
877 /* We didn't match (r is probably -1), so return something to
878 tell the caller that it should try ANYOTHERKEY for an
879 overridden function. */
880 _rl_unget_char (key
);
881 _rl_dispatching_keymap
= map
;
884 else if (r
&& got_subseq
)
886 /* OK, back up the chain. */
887 _rl_unget_char (key
);
888 _rl_dispatching_keymap
= map
;
895 /* **************************************************************** */
897 /* Initializations */
899 /* **************************************************************** */
901 /* Initialize readline (and terminal if not already). */
905 /* If we have never been called before, initialize the
906 terminal and data structures. */
909 RL_SETSTATE(RL_STATE_INITIALIZING
);
910 readline_initialize_everything ();
911 RL_UNSETSTATE(RL_STATE_INITIALIZING
);
913 RL_SETSTATE(RL_STATE_INITIALIZED
);
916 /* Initalize the current line information. */
917 _rl_init_line_state ();
919 /* We aren't done yet. We haven't even gotten started yet! */
921 RL_UNSETSTATE(RL_STATE_DONE
);
923 /* Tell the history routines what is going on. */
924 _rl_start_using_history ();
926 /* Make the display buffer match the state of the line. */
927 rl_reset_line_state ();
929 /* No such function typed yet. */
930 rl_last_func
= (rl_command_func_t
*)NULL
;
932 /* Parsing of key-bindings begins in an enabled state. */
933 _rl_parsing_conditionalized_out
= 0;
935 #if defined (VI_MODE)
936 if (rl_editing_mode
== vi_mode
)
937 _rl_vi_initialize_line ();
940 /* Each line starts in insert mode (the default). */
941 _rl_set_insert_mode (RL_IM_DEFAULT
, 1);
947 #if defined (__EMX__)
949 _emx_build_environ ()
956 DosGetInfoBlocks (&tibp
, &pibp
);
957 t
= pibp
->pib_pchenv
;
960 tp
= environ
= (char **)xmalloc ((c
+ 1) * sizeof (char *));
961 t
= pibp
->pib_pchenv
;
972 /* Initialize the entire state of the world. */
974 readline_initialize_everything ()
977 #if defined (__EMX__)
979 _emx_build_environ ();
984 /* Find out if we are running in Emacs -- UNUSED. */
985 running_in_emacs
= sh_get_env_value ("EMACS") != (char *)0;
988 /* Set up input and output if they are not already set up. */
993 rl_outstream
= stdout
;
995 /* Bind _rl_in_stream and _rl_out_stream immediately. These values
996 may change, but they may also be used before readline_internal ()
998 _rl_in_stream
= rl_instream
;
999 _rl_out_stream
= rl_outstream
;
1001 /* Allocate data structures. */
1002 if (rl_line_buffer
== 0)
1003 rl_line_buffer
= (char *)xmalloc (rl_line_buffer_len
= DEFAULT_BUFFER_SIZE
);
1005 /* Initialize the terminal interface. */
1006 if (rl_terminal_name
== 0)
1007 rl_terminal_name
= sh_get_env_value ("TERM");
1008 _rl_init_terminal_io (rl_terminal_name
);
1010 /* Bind tty characters to readline functions. */
1011 readline_default_bindings ();
1013 /* Initialize the function names. */
1014 rl_initialize_funmap ();
1016 /* Decide whether we should automatically go into eight-bit mode. */
1017 _rl_init_eightbit ();
1019 /* Read in the init file. */
1020 rl_read_init_file ((char *)NULL
);
1023 if (_rl_horizontal_scroll_mode
&& _rl_term_autowrap
)
1026 _rl_screenchars
-= _rl_screenheight
;
1029 /* Override the effect of any `set keymap' assignments in the
1031 rl_set_keymap_from_edit_mode ();
1033 /* Try to bind a common arrow key prefix, if not already bound. */
1036 /* Enable the meta key, if this terminal has one. */
1037 if (_rl_enable_meta
)
1038 _rl_enable_meta_key ();
1040 /* If the completion parser's default word break characters haven't
1041 been set yet, then do so now. */
1042 if (rl_completer_word_break_characters
== (char *)NULL
)
1043 rl_completer_word_break_characters
= (char *)rl_basic_word_break_characters
;
1046 /* If this system allows us to look at the values of the regular
1047 input editing characters, then bind them to their readline
1048 equivalents, iff the characters are not bound to keymaps. */
1050 readline_default_bindings ()
1052 if (_rl_bind_stty_chars
)
1053 rl_tty_set_default_bindings (_rl_keymap
);
1056 /* Reset the default bindings for the terminal special characters we're
1057 interested in back to rl_insert and read the new ones. */
1059 reset_default_bindings ()
1061 if (_rl_bind_stty_chars
)
1063 rl_tty_unset_default_bindings (_rl_keymap
);
1064 rl_tty_set_default_bindings (_rl_keymap
);
1068 /* Bind some common arrow key sequences in MAP. */
1070 bind_arrow_keys_internal (map
)
1075 xkeymap
= _rl_keymap
;
1078 #if defined (__MSDOS__)
1079 rl_bind_keyseq_if_unbound ("\033[0A", rl_get_previous_history
);
1080 rl_bind_keyseq_if_unbound ("\033[0B", rl_backward_char
);
1081 rl_bind_keyseq_if_unbound ("\033[0C", rl_forward_char
);
1082 rl_bind_keyseq_if_unbound ("\033[0D", rl_get_next_history
);
1085 rl_bind_keyseq_if_unbound ("\033[A", rl_get_previous_history
);
1086 rl_bind_keyseq_if_unbound ("\033[B", rl_get_next_history
);
1087 rl_bind_keyseq_if_unbound ("\033[C", rl_forward_char
);
1088 rl_bind_keyseq_if_unbound ("\033[D", rl_backward_char
);
1089 rl_bind_keyseq_if_unbound ("\033[H", rl_beg_of_line
);
1090 rl_bind_keyseq_if_unbound ("\033[F", rl_end_of_line
);
1092 rl_bind_keyseq_if_unbound ("\033OA", rl_get_previous_history
);
1093 rl_bind_keyseq_if_unbound ("\033OB", rl_get_next_history
);
1094 rl_bind_keyseq_if_unbound ("\033OC", rl_forward_char
);
1095 rl_bind_keyseq_if_unbound ("\033OD", rl_backward_char
);
1096 rl_bind_keyseq_if_unbound ("\033OH", rl_beg_of_line
);
1097 rl_bind_keyseq_if_unbound ("\033OF", rl_end_of_line
);
1099 #if defined (__MINGW32__)
1100 rl_bind_keyseq_if_unbound ("\340H", rl_get_previous_history
);
1101 rl_bind_keyseq_if_unbound ("\340P", rl_get_next_history
);
1102 rl_bind_keyseq_if_unbound ("\340M", rl_forward_char
);
1103 rl_bind_keyseq_if_unbound ("\340K", rl_backward_char
);
1106 _rl_keymap
= xkeymap
;
1109 /* Try and bind the common arrow key prefixes after giving termcap and
1110 the inputrc file a chance to bind them and create `real' keymaps
1111 for the arrow key prefix. */
1115 bind_arrow_keys_internal (emacs_standard_keymap
);
1117 #if defined (VI_MODE)
1118 bind_arrow_keys_internal (vi_movement_keymap
);
1119 bind_arrow_keys_internal (vi_insertion_keymap
);
1123 /* **************************************************************** */
1125 /* Saving and Restoring Readline's state */
1127 /* **************************************************************** */
1131 struct readline_state
*sp
;
1136 sp
->point
= rl_point
;
1139 sp
->buffer
= rl_line_buffer
;
1140 sp
->buflen
= rl_line_buffer_len
;
1141 sp
->ul
= rl_undo_list
;
1142 sp
->prompt
= rl_prompt
;
1144 sp
->rlstate
= rl_readline_state
;
1146 sp
->kmap
= _rl_keymap
;
1148 sp
->lastfunc
= rl_last_func
;
1149 sp
->insmode
= rl_insert_mode
;
1150 sp
->edmode
= rl_editing_mode
;
1151 sp
->kseqlen
= rl_key_sequence_length
;
1152 sp
->inf
= rl_instream
;
1153 sp
->outf
= rl_outstream
;
1154 sp
->pendingin
= rl_pending_input
;
1155 sp
->macro
= rl_executing_macro
;
1157 sp
->catchsigs
= rl_catch_signals
;
1158 sp
->catchsigwinch
= rl_catch_sigwinch
;
1164 rl_restore_state (sp
)
1165 struct readline_state
*sp
;
1170 rl_point
= sp
->point
;
1173 the_line
= rl_line_buffer
= sp
->buffer
;
1174 rl_line_buffer_len
= sp
->buflen
;
1175 rl_undo_list
= sp
->ul
;
1176 rl_prompt
= sp
->prompt
;
1178 rl_readline_state
= sp
->rlstate
;
1180 _rl_keymap
= sp
->kmap
;
1182 rl_last_func
= sp
->lastfunc
;
1183 rl_insert_mode
= sp
->insmode
;
1184 rl_editing_mode
= sp
->edmode
;
1185 rl_key_sequence_length
= sp
->kseqlen
;
1186 rl_instream
= sp
->inf
;
1187 rl_outstream
= sp
->outf
;
1188 rl_pending_input
= sp
->pendingin
;
1189 rl_executing_macro
= sp
->macro
;
1191 rl_catch_signals
= sp
->catchsigs
;
1192 rl_catch_sigwinch
= sp
->catchsigwinch
;