Ruby中的预填充提示[重复]

问题描述 投票:5回答:2

此问题已经在这里有了答案:

我正在使用Ruby编写一个小的命令行实用程序来搜索Pubmed。现在,我提示用户进行查询并显示结果,并且用户可以选择追加到查询或输入全新的查询。我想添加编辑当前查询的功能;即提示应预先填充上一个查询的可编辑版本,例如:

Enter query: <PREVIOUS QUERY HERE>

很容易在提示旁边打印出上一个查询,但是如何使该输出可编辑,就像用户自己键入了一样?

@ casper:谢谢卡斯珀的回应。我尝试了您在下面提供的代码,并且确实可以单独运行。奇怪的是,当我尝试在宝石中使用它时,它似乎不起作用。我的宝石叫做db_hippo。我在gemspec中添加了rb-readline作为依赖项,并将扩展名放入lib / db_hippo / rb-readline.rb

中的RbReadline。
module DbHippo
  module RbReadline
    <CASPER'S EXTENSION HERE>
  end
end

我希望在DbHippo的另一个子模块DbHippo :: Source中使用该功能。在DbHippo :: Source中,我在顶部添加了:

require 'rb-readline'
require 'db_hippo/rb-readline'

然后使用DbHippo :: Source的方法之一,我有:

RbReadline.prefill_prompt(query)
query = Readline.readline("Query: ", true)

查询变量肯定不是空的,但是由于某种原因,在此上下文中,提示未预先填充。我还注意到,如果将扩展名放在同一文件(lib / db_hippo / rb-readline)中而不使其成为DbHippo的子模块,则会收到错误:未初始化的常量DbHippo :: Source :: Readline(NameError)] >在行上:

query = Readline.readline("Query: ", true)

这似乎都与模块的正确命名,require语句和gem有关。这是我尝试构建的第一个宝石。知道这里出了什么问题吗?

我正在使用Ruby编写一个小的命令行实用程序来搜索Pubmed。现在,我提示用户进行查询并显示结果,并且用户可以选择附加到查询中,或者......>

ruby command-prompt
2个回答
3
投票

您可以使用RbReadline

require 'rubygems'
require 'rb-readline'

module RbReadline
  def self.prefill_prompt(str)
    @rl_prefill = str
    @rl_startup_hook = :rl_prefill_hook
  end

  def self.rl_prefill_hook
    rl_insert_text @rl_prefill if @rl_prefill
    @rl_startup_hook = nil
  end
end

RbReadline.prefill_prompt("Previous query")
str = Readline.readline("Enter query: ", true)

puts "You entered: #{str}"

4
投票

也许Google员工会发现这很有用。

© www.soinside.com 2019 - 2024. All rights reserved.