Issue #13050 has been updated by shevegen (Robert A. Heiler).


It is now registered for the next upcoming developer meeting at:

https://bugs.ruby-lang.org/issues/14921

(I think nobu added it to the developer meeting recently; it was most likely
forgotten for some time).

Hopefully future patches may be simpler for you - I think the most likely
explanation is that it was forgotten. The developer meeting format changed
a few months ago, so you can add issues directly on the ruby developer
tracker. (And if it is not answered yet, it may end up being at "carry
over" from prior meetings.)

To the topic at hand - I use readline a lot so every readline-related support
helps. Whenever I need commandline input in ruby programs, I usually turn
to readline first; and as generic fallback, use $stdin.gets.chomp in a loop
normally. It's good to see other people are also using readline, it is one
of those programs I really need all the time when it comes to user input.

----------------------------------------
Feature #13050: Readline: expose rl_completion_quote_character variable
https://bugs.ruby-lang.org/issues/13050#change-73229

* Author: georgebrock (George Brocklehurst)
* Status: Feedback
* 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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>