1/* rlprivate.h -- functions and variables global to the readline library, 2 but not intended for use by applications. */ 3 4/* Copyright (C) 1999-2009 Free Software Foundation, Inc. 5 6 This file is part of the GNU Readline Library (Readline), a library 7 for reading lines of text with interactive input and history editing. 8 9 Readline is free software: you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation, either version 3 of the License, or 12 (at your option) any later version. 13 14 Readline is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with Readline. If not, see <http://www.gnu.org/licenses/>. 21*/ 22 23#if !defined (_RL_PRIVATE_H_) 24#define _RL_PRIVATE_H_ 25 26#include "rlconf.h" /* for VISIBLE_STATS */ 27#include "rlstdc.h" 28#include "posixjmp.h" /* defines procenv_t */ 29 30/************************************************************************* 31 * * 32 * Convenience definitions * 33 * * 34 *************************************************************************/ 35 36#define EMACS_MODE() (rl_editing_mode == emacs_mode) 37#define VI_COMMAND_MODE() (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap) 38#define VI_INSERT_MODE() (rl_editing_mode == vi_mode && _rl_keymap == vi_insertion_keymap) 39 40#define RL_CHECK_SIGNALS() \ 41 do { \ 42 if (_rl_caught_signal) _rl_signal_handler (_rl_caught_signal); \ 43 } while (0) 44 45/************************************************************************* 46 * * 47 * Global structs undocumented in texinfo manual and not in readline.h * 48 * * 49 *************************************************************************/ 50/* search types */ 51#define RL_SEARCH_ISEARCH 0x01 /* incremental search */ 52#define RL_SEARCH_NSEARCH 0x02 /* non-incremental search */ 53#define RL_SEARCH_CSEARCH 0x04 /* intra-line char search */ 54 55/* search flags */ 56#define SF_REVERSE 0x01 57#define SF_FOUND 0x02 58#define SF_FAILED 0x04 59 60typedef struct __rl_search_context 61{ 62 int type; 63 int sflags; 64 65 char *search_string; 66 int search_string_index; 67 int search_string_size; 68 69 char **lines; 70 char *allocated_line; 71 int hlen; 72 int hindex; 73 74 int save_point; 75 int save_mark; 76 int save_line; 77 int last_found_line; 78 char *prev_line_found; 79 80 UNDO_LIST *save_undo_list; 81 82 int history_pos; 83 int direction; 84 85 int lastc; 86#if defined (HANDLE_MULTIBYTE) 87 char mb[MB_LEN_MAX]; 88#endif 89 90 char *sline; 91 int sline_len; 92 int sline_index; 93 94 char *search_terminators; 95} _rl_search_cxt; 96 97/* Callback data for reading numeric arguments */ 98#define NUM_SAWMINUS 0x01 99#define NUM_SAWDIGITS 0x02 100#define NUM_READONE 0x04 101 102typedef int _rl_arg_cxt; 103 104/* A context for reading key sequences longer than a single character when 105 using the callback interface. */ 106#define KSEQ_DISPATCHED 0x01 107#define KSEQ_SUBSEQ 0x02 108#define KSEQ_RECURSIVE 0x04 109 110typedef struct __rl_keyseq_context 111{ 112 int flags; 113 int subseq_arg; 114 int subseq_retval; /* XXX */ 115 Keymap dmap; 116 117 Keymap oldmap; 118 int okey; 119 struct __rl_keyseq_context *ocxt; 120 int childval; 121} _rl_keyseq_cxt; 122 123 /* fill in more as needed */ 124/* `Generic' callback data and functions */ 125typedef struct __rl_callback_generic_arg 126{ 127 int count; 128 int i1, i2; 129 /* add here as needed */ 130} _rl_callback_generic_arg; 131 132typedef int _rl_callback_func_t PARAMS((_rl_callback_generic_arg *)); 133 134/************************************************************************* 135 * * 136 * Global functions undocumented in texinfo manual and not in readline.h * 137 * * 138 *************************************************************************/ 139 140/************************************************************************* 141 * * 142 * Global variables undocumented in texinfo manual and not in readline.h * 143 * * 144 *************************************************************************/ 145 146/* complete.c */ 147extern int rl_complete_with_tilde_expansion; 148#if defined (VISIBLE_STATS) 149extern int rl_visible_stats; 150#endif /* VISIBLE_STATS */ 151 152/* readline.c */ 153extern int rl_line_buffer_len; 154extern int rl_arg_sign; 155extern int rl_visible_prompt_length; 156extern int rl_key_sequence_length; 157extern int rl_byte_oriented; 158 159/* display.c */ 160extern int rl_display_fixed; 161 162/* parens.c */ 163extern int rl_blink_matching_paren; 164 165/************************************************************************* 166 * * 167 * Global functions and variables unsed and undocumented * 168 * * 169 *************************************************************************/ 170 171/* kill.c */ 172extern int rl_set_retained_kills PARAMS((int)); 173 174/* terminal.c */ 175extern void _rl_set_screen_size PARAMS((int, int)); 176 177/* undo.c */ 178extern int _rl_fix_last_undo_of_type PARAMS((int, int, int)); 179 180/* util.c */ 181extern char *_rl_savestring PARAMS((const char *)); 182 183/************************************************************************* 184 * * 185 * Functions and variables private to the readline library * 186 * * 187 *************************************************************************/ 188 189/* NOTE: Functions and variables prefixed with `_rl_' are 190 pseudo-global: they are global so they can be shared 191 between files in the readline library, but are not intended 192 to be visible to readline callers. */ 193 194/************************************************************************* 195 * Undocumented private functions * 196 *************************************************************************/ 197 198#if defined(READLINE_CALLBACKS) 199 200/* readline.c */ 201extern void readline_internal_setup PARAMS((void)); 202extern char *readline_internal_teardown PARAMS((int)); 203extern int readline_internal_char PARAMS((void)); 204 205extern _rl_keyseq_cxt *_rl_keyseq_cxt_alloc PARAMS((void)); 206extern void _rl_keyseq_cxt_dispose PARAMS((_rl_keyseq_cxt *)); 207extern void _rl_keyseq_chain_dispose PARAMS((void)); 208 209extern int _rl_dispatch_callback PARAMS((_rl_keyseq_cxt *)); 210 211/* callback.c */ 212extern _rl_callback_generic_arg *_rl_callback_data_alloc PARAMS((int)); 213extern void _rl_callback_data_dispose PARAMS((_rl_callback_generic_arg *)); 214 215#endif /* READLINE_CALLBACKS */ 216 217/* bind.c */ 218 219/* complete.c */ 220extern void _rl_reset_completion_state PARAMS((void)); 221extern char _rl_find_completion_word PARAMS((int *, int *)); 222extern void _rl_free_match_list PARAMS((char **)); 223 224/* display.c */ 225extern char *_rl_strip_prompt PARAMS((char *)); 226extern void _rl_move_cursor_relative PARAMS((int, const char *)); 227extern void _rl_move_vert PARAMS((int)); 228extern void _rl_save_prompt PARAMS((void)); 229extern void _rl_restore_prompt PARAMS((void)); 230extern char *_rl_make_prompt_for_search PARAMS((int)); 231extern void _rl_erase_at_end_of_line PARAMS((int)); 232extern void _rl_clear_to_eol PARAMS((int)); 233extern void _rl_clear_screen PARAMS((void)); 234extern void _rl_update_final PARAMS((void)); 235extern void _rl_redisplay_after_sigwinch PARAMS((void)); 236extern void _rl_clean_up_for_exit PARAMS((void)); 237extern void _rl_erase_entire_line PARAMS((void)); 238extern int _rl_current_display_line PARAMS((void)); 239 240/* input.c */ 241extern int _rl_any_typein PARAMS((void)); 242extern int _rl_input_available PARAMS((void)); 243extern int _rl_input_queued PARAMS((int)); 244extern void _rl_insert_typein PARAMS((int)); 245extern int _rl_unget_char PARAMS((int)); 246extern int _rl_pushed_input_available PARAMS((void)); 247 248/* isearch.c */ 249extern _rl_search_cxt *_rl_scxt_alloc PARAMS((int, int)); 250extern void _rl_scxt_dispose PARAMS((_rl_search_cxt *, int)); 251 252extern int _rl_isearch_dispatch PARAMS((_rl_search_cxt *, int)); 253extern int _rl_isearch_callback PARAMS((_rl_search_cxt *)); 254 255extern int _rl_search_getchar PARAMS((_rl_search_cxt *)); 256 257/* macro.c */ 258extern void _rl_with_macro_input PARAMS((char *)); 259extern int _rl_next_macro_key PARAMS((void)); 260extern void _rl_push_executing_macro PARAMS((void)); 261extern void _rl_pop_executing_macro PARAMS((void)); 262extern void _rl_add_macro_char PARAMS((int)); 263extern void _rl_kill_kbd_macro PARAMS((void)); 264 265/* misc.c */ 266extern int _rl_arg_overflow PARAMS((void)); 267extern void _rl_arg_init PARAMS((void)); 268extern int _rl_arg_getchar PARAMS((void)); 269extern int _rl_arg_callback PARAMS((_rl_arg_cxt)); 270extern void _rl_reset_argument PARAMS((void)); 271 272extern void _rl_start_using_history PARAMS((void)); 273extern int _rl_free_saved_history_line PARAMS((void)); 274extern void _rl_set_insert_mode PARAMS((int, int)); 275 276extern void _rl_revert_all_lines PARAMS((void)); 277 278/* nls.c */ 279extern int _rl_init_eightbit PARAMS((void)); 280 281/* parens.c */ 282extern void _rl_enable_paren_matching PARAMS((int)); 283 284/* readline.c */ 285extern void _rl_init_line_state PARAMS((void)); 286extern void _rl_set_the_line PARAMS((void)); 287extern int _rl_dispatch PARAMS((int, Keymap)); 288extern int _rl_dispatch_subseq PARAMS((int, Keymap, int)); 289extern void _rl_internal_char_cleanup PARAMS((void)); 290 291/* rltty.c */ 292extern int _rl_disable_tty_signals PARAMS((void)); 293extern int _rl_restore_tty_signals PARAMS((void)); 294 295/* search.c */ 296extern int _rl_nsearch_callback PARAMS((_rl_search_cxt *)); 297 298/* signals.c */ 299extern void _rl_signal_handler PARAMS((int)); 300 301extern void _rl_block_sigint PARAMS((void)); 302extern void _rl_release_sigint PARAMS((void)); 303 304/* terminal.c */ 305extern void _rl_get_screen_size PARAMS((int, int)); 306extern int _rl_init_terminal_io PARAMS((const char *)); 307#ifdef _MINIX 308extern void _rl_output_character_function PARAMS((int)); 309#else 310extern int _rl_output_character_function PARAMS((int)); 311#endif 312extern void _rl_output_some_chars PARAMS((const char *, int)); 313extern int _rl_backspace PARAMS((int)); 314extern void _rl_enable_meta_key PARAMS((void)); 315extern void _rl_control_keypad PARAMS((int)); 316extern void _rl_set_cursor PARAMS((int, int)); 317 318/* text.c */ 319extern void _rl_fix_point PARAMS((int)); 320extern int _rl_replace_text PARAMS((const char *, int, int)); 321extern int _rl_insert_char PARAMS((int, int)); 322extern int _rl_overwrite_char PARAMS((int, int)); 323extern int _rl_overwrite_rubout PARAMS((int, int)); 324extern int _rl_rubout_char PARAMS((int, int)); 325#if defined (HANDLE_MULTIBYTE) 326extern int _rl_char_search_internal PARAMS((int, int, char *, int)); 327#else 328extern int _rl_char_search_internal PARAMS((int, int, int)); 329#endif 330extern int _rl_set_mark_at_pos PARAMS((int)); 331 332/* undo.c */ 333extern UNDO_LIST *_rl_copy_undo_entry PARAMS((UNDO_LIST *)); 334extern UNDO_LIST *_rl_copy_undo_list PARAMS((UNDO_LIST *)); 335 336/* util.c */ 337#if defined (USE_VARARGS) && defined (PREFER_STDARG) 338extern void _rl_ttymsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); 339extern void _rl_errmsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); 340extern void _rl_trace (const char *, ...) __attribute__((__format__ (printf, 1, 2))); 341#else 342extern void _rl_ttymsg (); 343extern void _rl_errmsg (); 344extern void _rl_trace (); 345#endif 346 347extern int _rl_tropen PARAMS((void)); 348 349extern int _rl_abort_internal PARAMS((void)); 350extern char *_rl_strindex PARAMS((const char *, const char *)); 351extern int _rl_qsort_string_compare PARAMS((char **, char **)); 352extern int (_rl_uppercase_p) PARAMS((int)); 353extern int (_rl_lowercase_p) PARAMS((int)); 354extern int (_rl_pure_alphabetic) PARAMS((int)); 355extern int (_rl_digit_p) PARAMS((int)); 356extern int (_rl_to_lower) PARAMS((int)); 357extern int (_rl_to_upper) PARAMS((int)); 358extern int (_rl_digit_value) PARAMS((int)); 359 360/* vi_mode.c */ 361extern void _rl_vi_initialize_line PARAMS((void)); 362extern void _rl_vi_reset_last PARAMS((void)); 363extern void _rl_vi_set_last PARAMS((int, int, int)); 364extern int _rl_vi_textmod_command PARAMS((int)); 365extern void _rl_vi_done_inserting PARAMS((void)); 366 367/************************************************************************* 368 * Undocumented private variables * 369 *************************************************************************/ 370 371/* bind.c */ 372extern const char * const _rl_possible_control_prefixes[]; 373extern const char * const _rl_possible_meta_prefixes[]; 374 375/* callback.c */ 376extern _rl_callback_func_t *_rl_callback_func; 377extern _rl_callback_generic_arg *_rl_callback_data; 378 379/* complete.c */ 380extern int _rl_complete_show_all; 381extern int _rl_complete_show_unmodified; 382extern int _rl_complete_mark_directories; 383extern int _rl_complete_mark_symlink_dirs; 384extern int _rl_completion_prefix_display_length; 385extern int _rl_print_completions_horizontally; 386extern int _rl_completion_case_fold; 387extern int _rl_match_hidden_files; 388extern int _rl_page_completions; 389 390/* display.c */ 391extern int _rl_vis_botlin; 392extern int _rl_last_c_pos; 393extern int _rl_suppress_redisplay; 394extern int _rl_want_redisplay; 395 396/* isearch.c */ 397extern char *_rl_isearch_terminators; 398 399extern _rl_search_cxt *_rl_iscxt; 400 401/* macro.c */ 402extern char *_rl_executing_macro; 403 404/* misc.c */ 405extern int _rl_history_preserve_point; 406extern int _rl_history_saved_point; 407 408extern _rl_arg_cxt _rl_argcxt; 409 410/* readline.c */ 411extern int _rl_echoing_p; 412extern int _rl_horizontal_scroll_mode; 413extern int _rl_mark_modified_lines; 414extern int _rl_bell_preference; 415extern int _rl_meta_flag; 416extern int _rl_convert_meta_chars_to_ascii; 417extern int _rl_output_meta_chars; 418extern int _rl_bind_stty_chars; 419extern int _rl_revert_all_at_newline; 420extern char *_rl_comment_begin; 421extern unsigned char _rl_parsing_conditionalized_out; 422extern Keymap _rl_keymap; 423extern FILE *_rl_in_stream; 424extern FILE *_rl_out_stream; 425extern int _rl_last_command_was_kill; 426extern int _rl_eof_char; 427extern procenv_t _rl_top_level; 428extern _rl_keyseq_cxt *_rl_kscxt; 429 430/* search.c */ 431extern _rl_search_cxt *_rl_nscxt; 432 433/* signals.c */ 434extern int _rl_interrupt_immediately; 435extern int volatile _rl_caught_signal; 436 437extern int _rl_echoctl; 438 439extern int _rl_intr_char; 440extern int _rl_quit_char; 441extern int _rl_susp_char; 442 443/* terminal.c */ 444extern int _rl_enable_keypad; 445extern int _rl_enable_meta; 446extern char *_rl_term_clreol; 447extern char *_rl_term_clrpag; 448extern char *_rl_term_im; 449extern char *_rl_term_ic; 450extern char *_rl_term_ei; 451extern char *_rl_term_DC; 452extern char *_rl_term_up; 453extern char *_rl_term_dc; 454extern char *_rl_term_cr; 455extern char *_rl_term_IC; 456extern char *_rl_term_forward_char; 457extern int _rl_screenheight; 458extern int _rl_screenwidth; 459extern int _rl_screenchars; 460extern int _rl_terminal_can_insert; 461extern int _rl_term_autowrap; 462 463/* undo.c */ 464extern int _rl_doing_an_undo; 465extern int _rl_undo_group_level; 466 467/* vi_mode.c */ 468extern int _rl_vi_last_command; 469 470#endif /* _RL_PRIVATE_H_ */ 471