Issue #13050 has been updated by Nobuyoshi Nakada.


Then you can use `rb_enc_uint_chr()`, probably.

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

* Author: 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>