From: ruby@... Date: 2016-12-18T22:49:59+00:00 Subject: [ruby-core:78721] [Ruby trunk Feature#13050] Readline: expose rl_completion_quote_character variable Issue #13050 has been reported by George Brocklehurst. ---------------------------------------- Feature #13050: Readline: expose rl_completion_quote_character variable https://bugs.ruby-lang.org/issues/13050 * Author: George Brocklehurst * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- 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: ~~~ ruby 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) -- https://bugs.ruby-lang.org/ Unsubscribe: