Module: Readline

Includes:
RbReadline
Defined in:
lib/readline.rb

Overview

readline.rb – GNU Readline module Copyright © 1997-2001 Shugo Maed

Ruby translation by Park Heesob [email protected]

Defined Under Namespace

Classes: Fcomp, History, Ucomp

Constant Summary collapse

HISTORY =
History
FILENAME_COMPLETION_PROC =
Fcomp
USERNAME_COMPLETION_PROC =
Ucomp
VERSION =
RbReadline.rl_library_version

Constants included from RbReadline

RbReadline::ABORT_CHAR, RbReadline::ANCHORED_SEARCH, RbReadline::ANYOTHERKEY, RbReadline::AUDIBLE_BELL, RbReadline::BAD_MODIFIER, RbReadline::BAD_WORD_SPEC, RbReadline::BFIND, RbReadline::BTO, RbReadline::CapCase, RbReadline::DEFAULT_BUFFER_SIZE, RbReadline::DEFAULT_INPUTRC, RbReadline::DEFAULT_MAX_KILLS, RbReadline::DownCase, RbReadline::EOF, RbReadline::ESC, RbReadline::EVENT_NOT_FOUND, RbReadline::FFIND, RbReadline::FTO, RbReadline::HISTORY_APPEND, RbReadline::HISTORY_OVERWRITE, RbReadline::HISTORY_QUOTE_CHARACTERS, RbReadline::HISTORY_WORD_DELIMITERS, RbReadline::ISFUNC, RbReadline::ISKMAP, RbReadline::ISMACR, RbReadline::KEYMAP_SIZE, RbReadline::KSEQ_DISPATCHED, RbReadline::KSEQ_RECURSIVE, RbReadline::KSEQ_SUBSEQ, RbReadline::MB_FIND_ANY, RbReadline::MB_FIND_NONZERO, RbReadline::MB_LEN_MAX, RbReadline::MULT_MATCH, RbReadline::NEWLINE, RbReadline::NON_ANCHORED_SEARCH, RbReadline::NO_BELL, RbReadline::NO_MATCH, RbReadline::NO_PREV_SUBST, RbReadline::NUM_READONE, RbReadline::NUM_SAWDIGITS, RbReadline::NUM_SAWMINUS, RbReadline::PAGE, RbReadline::RB_READLINE_VERSION, RbReadline::READERR, RbReadline::RETURN, RbReadline::RL_IM_DEFAULT, RbReadline::RL_IM_INSERT, RbReadline::RL_IM_OVERWRITE, RbReadline::RL_LIBRARY_VERSION, RbReadline::RL_PROMPT_END_IGNORE, RbReadline::RL_PROMPT_START_IGNORE, RbReadline::RL_QF_BACKSLASH, RbReadline::RL_QF_DOUBLE_QUOTE, RbReadline::RL_QF_OTHER_QUOTE, RbReadline::RL_QF_SINGLE_QUOTE, RbReadline::RL_READLINE_VERSION, RbReadline::RL_SEARCH_CSEARCH, RbReadline::RL_SEARCH_ISEARCH, RbReadline::RL_SEARCH_NSEARCH, RbReadline::RL_STATE_CALLBACK, RbReadline::RL_STATE_COMPLETING, RbReadline::RL_STATE_DISPATCHING, RbReadline::RL_STATE_DONE, RbReadline::RL_STATE_INITIALIZED, RbReadline::RL_STATE_INITIALIZING, RbReadline::RL_STATE_INPUTPENDING, RbReadline::RL_STATE_ISEARCH, RbReadline::RL_STATE_MACRODEF, RbReadline::RL_STATE_MACROINPUT, RbReadline::RL_STATE_METANEXT, RbReadline::RL_STATE_MOREINPUT, RbReadline::RL_STATE_MULTIKEY, RbReadline::RL_STATE_NONE, RbReadline::RL_STATE_NSEARCH, RbReadline::RL_STATE_NUMERICARG, RbReadline::RL_STATE_OVERWRITE, RbReadline::RL_STATE_READCMD, RbReadline::RL_STATE_SEARCH, RbReadline::RL_STATE_SIGHANDLER, RbReadline::RL_STATE_TERMPREPPED, RbReadline::RL_STATE_TTYCSAVED, RbReadline::RL_STATE_UNDOING, RbReadline::RL_STATE_VICMDONCE, RbReadline::RL_STATE_VIMOTION, RbReadline::RUBOUT, RbReadline::SF_FAILED, RbReadline::SF_FOUND, RbReadline::SF_REVERSE, RbReadline::SINGLE_MATCH, RbReadline::SPACE, RbReadline::SUBST_FAILED, RbReadline::SYS_INPUTRC, RbReadline::TAB, RbReadline::UpCase, RbReadline::VISIBLE_BELL, RbReadline::XOK

Class Method Summary collapse

Methods included from RbReadline

__rl_fix_point, _rl_abort_internal, _rl_adjust_point, _rl_any_typein, _rl_arg_dispatch, _rl_arg_getchar, _rl_arg_init, _rl_arg_overflow, _rl_backspace, _rl_bind_tty_special_chars, _rl_char_search, _rl_char_search_internal, _rl_char_value, _rl_clean_up_for_exit, _rl_clear_screen, _rl_clear_to_eol, _rl_col_width, _rl_compare_chars, _rl_control_keypad, _rl_copy_to_kill_ring, _rl_current_display_line, _rl_dispatch, _rl_dispatch_subseq, _rl_enable_meta_key, _rl_erase_at_end_of_line, _rl_erase_entire_line, _rl_find_completion_word, _rl_find_next_mbchar, _rl_find_prev_mbchar, _rl_fix_point, _rl_get_char_len, _rl_get_screen_size, _rl_history_set_point, _rl_init_eightbit, _rl_init_line_state, _rl_init_terminal_io, _rl_input_available, _rl_insert_char, _rl_insert_next, _rl_insert_typein, _rl_internal_char_cleanup, _rl_internal_pager, _rl_is_mbchar_matched, _rl_isearch_cleanup, _rl_isearch_dispatch, _rl_isearch_fini, _rl_isearch_init, _rl_make_prompt_for_search, _rl_move_cursor_relative, _rl_move_vert, _rl_nsearch_abort, _rl_nsearch_cleanup, _rl_nsearch_dispatch, _rl_nsearch_dosearch, _rl_nsearch_init, _rl_output_some_chars, _rl_overwrite_char, _rl_overwrite_rubout, _rl_read_init_file, _rl_read_mbchar, _rl_read_mbstring, _rl_redisplay_after_sigwinch, _rl_replace_text, _rl_reset_argument, _rl_rubout_char, _rl_scxt_alloc, _rl_search_getchar, _rl_set_insert_mode, _rl_set_mark_at_pos, _rl_start_using_history, _rl_strip_prompt, _rl_subseq_getchar, _rl_to_lower, _rl_unget_char, _rl_update_final, _rl_vi_done_inserting, _rl_vi_initialize_line, _rl_vi_reset_last, _rl_vi_save_insert, _rl_vi_textmod_command, _rl_walphabetic, add_history, alloc_history_entry, alloc_undo_entry, append_to_match, bind_arrow_keys, bind_arrow_keys_internal, bind_termcap_arrow_keys, block_sigint, clear_history, compute_lcd_of_matches, cr, cr_faster, ctrl_char, current_history, delete_chars, display_matches, endsrch_char, expand_prompt, fnprint, fnwidth, gen_completion_matches, get_term_capabilities, get_y_or_n, handle_parser_directive, hist_inittime, history_base, history_get, history_is_stifled, history_length, history_list, history_search_pos, history_search_prefix, history_set_pos, ibuffer_space, init_line_structures, insert_all_matches, insert_match, insert_some_chars, inv_line, inv_llen, isascii, isprint, m_offset, make_history_line_current, make_quoted_replacement, meta_char, next_history, no_terminal?, noninc_dosearch, noninc_search, noninc_search_from_pos, parser_else, parser_endif, parser_if, parser_include, path_isdir, postprocess_matches, prepare_terminal_settings, previous_history, print_filename, printable_part, prompt_ending_index, readline_default_bindings, readline_initialize_everything, readline_internal, readline_internal_charloop, readline_internal_setup, readline_internal_teardown, redraw_prompt, release_sigint, remove_duplicate_matches, remove_history, replace_history_data, replace_history_entry, rl_abort, rl_add_undo, rl_alphabetic, rl_arrow_keys, rl_attempted_completion_function, rl_attempted_completion_function=, rl_attempted_completion_over, rl_attempted_completion_over=, rl_backward, rl_backward_byte, rl_backward_char, rl_backward_char_search, rl_backward_kill_line, rl_backward_kill_word, rl_backward_word, rl_basic_quote_characters, rl_basic_quote_characters=, rl_basic_word_break_characters, rl_basic_word_break_characters=, rl_beg_of_line, rl_begin_undo_group, rl_beginning_of_history, rl_bind_key, rl_bind_keyseq_if_unbound, rl_bind_keyseq_if_unbound_in_map, rl_bind_keyseq_in_map, rl_capitalize_word, rl_change_case, rl_char_search, rl_character_len, rl_cleanup_after_signal, rl_clear_message, rl_clear_pending_input, rl_clear_screen, rl_clear_signals, rl_complete, rl_complete_internal, rl_completer_quote_characters, rl_completer_quote_characters=, rl_completer_word_break_characters, rl_completer_word_break_characters=, rl_completion_append_character, rl_completion_append_character=, rl_completion_matches, rl_copy_text, rl_crlf, rl_delete, rl_delete_horizontal_space, rl_delete_or_show_completions, rl_delete_text, rl_deprep_term_function, rl_deprep_term_function=, rl_deprep_terminal, rl_digit_argument, rl_digit_loop, rl_ding, rl_display_match_list, rl_display_search, rl_do_lowercase_version, rl_do_undo, rl_downcase_word, rl_emacs_editing_mode, rl_end_of_history, rl_end_of_line, rl_end_undo_group, rl_event_hook, rl_event_hook=, rl_exchange_point_and_mark, rl_execute_next, rl_expand_prompt, rl_extend_line_buffer, rl_filename_completion_function, rl_filename_quote_characters, rl_filename_quote_characters=, rl_forced_update_display, rl_forward, rl_forward_byte, rl_forward_char, rl_forward_search_history, rl_forward_word, rl_free_undo_list, rl_function_of_keyseq, rl_generic_bind, rl_get_char, rl_get_keymap_name_from_edit_mode, rl_get_next_history, rl_get_previous_history, rl_initialize, rl_insert, rl_insert_comment, rl_insert_completions, rl_insert_text, rl_instream, rl_instream=, rl_isstate, rl_kill_full_line, rl_kill_line, rl_kill_text, rl_kill_word, rl_library_version, rl_library_version=, rl_line_buffer, rl_maybe_replace_line, rl_maybe_save_line, rl_maybe_unsave_line, rl_message, rl_modifying, rl_named_function, rl_newline, rl_noninc_forward_search, rl_noninc_reverse_search, rl_on_new_line, rl_on_new_line_with_prompt, rl_outstream, rl_outstream=, rl_overwrite_mode, rl_parse_and_bind, rl_possible_completions, rl_prep_terminal, rl_quoted_insert, rl_re_read_init_file, rl_read_init_file, rl_read_key, rl_readline_name, rl_readline_name=, rl_redisplay, rl_refresh_line, rl_replace_from_history, rl_replace_line, rl_reset_line_state, rl_resize_terminal, rl_restart_output, rl_restore_prompt, rl_reverse_search_history, rl_revert_line, rl_rubout, rl_rubout_or_delete, rl_save_prompt, rl_search_history, rl_set_keymap_from_edit_mode, rl_set_mark, rl_set_prompt, rl_set_signals, rl_setstate, rl_sigwinch_handler, rl_stuff_char, rl_tab_insert, rl_tilde_expand, rl_transpose_chars, rl_transpose_words, rl_tty_set_default_bindings, rl_tty_unset_default_bindings, rl_undo_command, rl_unix_filename_rubout, rl_unix_line_discard, rl_unix_word_rubout, rl_unsetstate, rl_upcase_word, rl_username_completion_function, rl_variable_bind, rl_vi_check, rl_vi_editing_mode, rl_vi_insertion_mode, rl_yank, rl_yank_last_arg, rl_yank_nth_arg, rl_yank_nth_arg_internal, rl_yank_pop, save_tty_chars, set_completion_defaults, sh_set_lines_and_columns, space_to_eol, stat_char, stifle_history, tgetflag, trans, unstifle_history, update_line, using_history, vis_chars, vis_line, vis_llen, vis_pos, w_offset, where_history, whitespace

Class Method Details

.basic_quote_charactersObject

Returns the list of quote characters that can cause a word break. The default is “‘"” (single and double quote characters).



252
253
254
255
256
257
258
# File 'lib/readline.rb', line 252

def self.basic_quote_characters()
   if RbReadline.rl_basic_quote_characters.nil?
      nil
   else
      RbReadline.rl_basic_quote_characters.dup
   end
end

.basic_quote_characters=(str) ⇒ Object

Sets the list of quote characters that can cause a word break.



245
246
247
# File 'lib/readline.rb', line 245

def self.basic_quote_characters=(str)
   RbReadline.rl_basic_quote_characters = str.dup
end

.basic_word_break_charactersObject

Returns the character string that signal a break between words for the completion proc. The default is “ tn"\‘`@$><=|&{(”.



217
218
219
220
221
222
223
# File 'lib/readline.rb', line 217

def self.basic_word_break_characters()
   if RbReadline.rl_basic_word_break_characters.nil?
      nil
   else
      RbReadline.rl_basic_word_break_characters.dup
   end
end

.basic_word_break_characters=(str) ⇒ Object

Sets the character string that signal a break between words for the completion proc.



210
211
212
# File 'lib/readline.rb', line 210

def self.basic_word_break_characters=(str)
   RbReadline.rl_basic_word_break_characters = str.dup
end

.completer_quote_charactersObject

Returns the list of characters that can be used to quote a substring of the line, i.e. a group of characters inside quotes.



270
271
272
273
274
275
276
# File 'lib/readline.rb', line 270

def self.completer_quote_characters()
   if RbReadline.rl_completer_quote_characters.nil?
      nil
   else
      RbReadline.rl_completer_quote_characters.dup
   end
end

.completer_quote_characters=(str) ⇒ Object

Sets the list of characters that can be used to quote a substring of the line, i.e. a group of characters within quotes.



263
264
265
# File 'lib/readline.rb', line 263

def self.completer_quote_characters=(str)
   RbReadline.rl_completer_quote_characters = str.dup
end

.completer_word_break_charactersObject

Returns the character string that signal the start or end of a word for the completion proc.



235
236
237
238
239
240
241
# File 'lib/readline.rb', line 235

def self.completer_word_break_characters()
   if RbReadline.rl_completer_word_break_characters.nil?
      nil
   else
      RbReadline.rl_completer_word_break_characters.dup
   end
end

.completer_word_break_characters=(str) ⇒ Object

Sets the character string that signal the start or end of a word for the completion proc.



228
229
230
# File 'lib/readline.rb', line 228

def self.completer_word_break_characters=(str)
   RbReadline.rl_completer_word_break_characters = str.dup
end

.completion_append_characterObject

Returns the character that is automatically appended after the Readline.completion_proc method is called.



200
201
202
203
204
205
# File 'lib/readline.rb', line 200

def self.completion_append_character()
   if RbReadline.rl_completion_append_character == ?\0
      nil
   end
   return RbReadline.rl_completion_append_character
end

.completion_append_character=(char) ⇒ Object

Sets the character that is automatically appended after the Readline.completion_proc method is called.

If char is nil or empty, then a null character is used.



187
188
189
190
191
192
193
194
195
# File 'lib/readline.rb', line 187

def self.completion_append_character=(char)
   if char.nil?
      RbReadline.rl_completion_append_character = ?\0
   elsif char.length==0
      RbReadline.rl_completion_append_character = ?\0
   else
      RbReadline.rl_completion_append_character = char[0]
   end
end

.completion_case_foldObject

Returns whether or not the completion proc is case sensitive. The default is false, i.e. completion procs are case sensitive.



109
110
111
# File 'lib/readline.rb', line 109

def self.completion_case_fold()
   @completion_case_fold
end

.completion_case_fold=(bool) ⇒ Object

Sets whether or not the completion proc should ignore case sensitivity. The default is false, i.e. completion procs are case sensitive.



102
103
104
# File 'lib/readline.rb', line 102

def self.completion_case_fold=(bool)
   @completion_case_fold = bool
end

.completion_procObject

Returns the current auto-completion procedure.



95
96
97
# File 'lib/readline.rb', line 95

def self.completion_proc()
   @completion_proc
end

.completion_proc=(proc) ⇒ Object

Sets the auto-completion procedure (i.e. tab auto-complete).

The proc argument is typically a Proc object. It must respond to .call, take a single String argument and return an Array of candidates for completion.

Example:

list = ['search', 'next', 'clear']
Readline.completion_proc = proc{ |s| list.grep( /^#{Regexp.escape(s)}/) }


86
87
88
89
90
91
# File 'lib/readline.rb', line 86

def self.completion_proc=(proc)
   unless defined? proc.call
      raise ArgumentError,"argument must respond to `call'"
   end
   @completion_proc = proc
end

.emacs_editing_modeObject

Sets emacs editing mode



177
178
179
180
# File 'lib/readline.rb', line 177

def self.emacs_editing_mode()
   RbReadline.rl_emacs_editing_mode(1,0)
   nil
end

.filename_quote_charactersObject

Returns the character string used to indicate quotes for the filename completion of user input.



288
289
290
291
292
293
294
# File 'lib/readline.rb', line 288

def self.filename_quote_characters()
   if RbReadline.rl_filename_quote_characters.nil?
      nil
   else
      RbReadline.rl_filename_quote_characters.dup
   end
end

.filename_quote_characters=(str) ⇒ Object

Sets the character string of one or more characters that indicate quotes for the filename completion of user input.



281
282
283
# File 'lib/readline.rb', line 281

def self.filename_quote_characters=(str)
   RbReadline.rl_filename_quote_characters = str.dup
end

.input=(input) ⇒ Object

Sets the input stream (an IO object) for readline interaction. The default is $stdin.



58
59
60
# File 'lib/readline.rb', line 58

def self.input=(input)
   RbReadline.rl_instream = input
end

.line_bufferObject

Returns current line buffer



71
72
73
# File 'lib/readline.rb', line 71

def self.line_buffer
   RbReadline.rl_line_buffer
end

.output=(output) ⇒ Object

Sets the output stream (an IO object) for readline interaction. The default is $stdout.



65
66
67
# File 'lib/readline.rb', line 65

def self.output=(output)
   RbReadline.rl_outstream = output
end

.readline(prompt, add_history = nil) ⇒ Object

Begins an interactive terminal process using prompt as the command prompt that users see when they type commands. The method returns the line entered whenever a carriage return is encountered.

If an add_history argument is provided, commands entered by users are stored in a history buffer that can be recalled for later use.

Note that this method depends on $stdin and $stdout both being open. Because this is meant as an interactive console interface, they should generally not be redirected.

Example:

loop{ Readline.readline('> ') }


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/readline.rb', line 29

def readline(prompt, add_history=nil)
   if $stdin.closed?
      raise IOError, "stdin closed"
   end

   RbReadline.rl_instream = $stdin
   RbReadline.rl_outstream = $stdout

   status = 0
   
   begin
      buff = RbReadline.readline(prompt)
   rescue Exception => e
      buff = nil
      RbReadline.rl_cleanup_after_signal()
      RbReadline.rl_deprep_terminal()
      raise e
   end

   if add_history && buff
      RbReadline.add_history(buff)
   end
   
   return buff ? buff.dup : nil
end

.readline_attempted_completion_function(text, start, _end) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/readline.rb', line 113

def self.readline_attempted_completion_function(text,start,_end)
   proc = @completion_proc
   return nil if proc.nil?

   RbReadline.rl_attempted_completion_over = true

   case_fold = @completion_case_fold
   ary = proc.call(text)
   if ary.class != Array
      ary = Array(ary)
   else
      ary.compact!
   end

   matches = ary.length
   return nil if (matches == 0)
   result = Array.new(matches+2)
   for i in 0 ... matches
      result[i+1] = ary[i].dup
   end
   result[matches+1] = nil

   if(matches==1)
      result[0] = result[1].dup
   else
      i = 1
      low = 100000

      while (i < matches)
         if (case_fold)
            si = 0
            while ((c1 = result[i][si,1].downcase) &&
               (c2 = result[i + 1][si,1].downcase))
               break if (c1 != c2)
               si += 1
            end
         else
            si = 0
            while ((c1 = result[i][si,1]) &&
               (c2 = result[i + 1][si,1]))
               break if (c1 != c2)
               si += 1
            end
         end
         if (low > si)
            low = si
         end
         i+=1
      end
      result[0] = result[1][0,low]
   end

   result
end

.vi_editing_modeObject

Sets vi editing mode.



170
171
172
173
# File 'lib/readline.rb', line 170

def self.vi_editing_mode()
   RbReadline.rl_vi_editing_mode(1,0)
   nil
end