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_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_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).



246
247
248
249
250
251
252
# File 'lib/readline.rb', line 246

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.



239
240
241
# File 'lib/readline.rb', line 239

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"\‘`@$><=|&{(”.



211
212
213
214
215
216
217
# File 'lib/readline.rb', line 211

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.



204
205
206
# File 'lib/readline.rb', line 204

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.



264
265
266
267
268
269
270
# File 'lib/readline.rb', line 264

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.



257
258
259
# File 'lib/readline.rb', line 257

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.



229
230
231
232
233
234
235
# File 'lib/readline.rb', line 229

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.



222
223
224
# File 'lib/readline.rb', line 222

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.



194
195
196
197
198
199
# File 'lib/readline.rb', line 194

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.



181
182
183
184
185
186
187
188
189
# File 'lib/readline.rb', line 181

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.



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

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.



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

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

.completion_procObject

Returns the current auto-completion procedure.



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

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)}/) }


80
81
82
83
84
85
# File 'lib/readline.rb', line 80

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



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

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.



282
283
284
285
286
287
288
# File 'lib/readline.rb', line 282

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.



275
276
277
# File 'lib/readline.rb', line 275

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

.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



107
108
109
110
111
112
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
# File 'lib/readline.rb', line 107

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.



164
165
166
167
# File 'lib/readline.rb', line 164

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