Project

General

Profile

Actions

Feature #13050

closed

Readline: expose rl_completion_quote_character variable

Added by georgebrock (George Brocklehurst) over 7 years ago. Updated over 5 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:78721]

Description

This patch makes the GNU Readline variable rl_completion_quote_character available to Ruby users via a method called Readline.completion_quote_character.

rl_completion_quote_character returns the character used to quote the argument currently being tab completed, which lets users implement more complex quoting an escaping schemes. For example when using Ruby to build an interpreter for a shell-like language, if the current argument isn't being quoted, the user might want to escape spaces contained in the argument, but if the argument is being quoted, the user might want to leave spaces unescaped.

Here's an example:

require "readline"

COMPLETION_OPTIONS = [
  "with several spaces",
]

Readline.completer_quote_characters = "\"'"
Readline.completion_proc = proc do |input|
  matching_options = COMPLETION_OPTIONS.select { |o| o.start_with?(input) }
  if Readline.completion_quote_character.nil?
    matching_options.map { |o| o.gsub(" ", "\\ ") }
  else
    matching_options
  end
end

Readline.readline("> ", false)

This allows the user to input things like:

wit\t   # => with\ several\ spaces
"wit\t  # => "with several spaces"

The patch includes tests and documentation.

(Like #12659, this patch is an upstream contribution from the gitsh project: https://github.com/thoughtbot/gitsh)


Files

readline_completion_quote_character.patch (4.43 KB) readline_completion_quote_character.patch georgebrock (George Brocklehurst), 12/18/2016 10:48 PM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0