2011-06-15 62 views
5

我在Ruby中实现了一个小型的telnet服务器。我目前面临的问题是我想添加readline支持,以便我可以拥有制表符完成和命令行历史记录支持。我看了一下Readline库,但它好像只能通过stdin工作。有没有办法在Ruby中这样做(我注意到Python的解决方案)?Ruby线编辑telnet服务器

+0

对不起,你想在服务器上实现的ReadLine?我相信readline是在客户端实施的。 – 2011-06-15 17:39:33

+0

Jip,这是我目前的问题。 Readline只适用于标准输入(因此,只有客户端)。我想知道是否可以通过telnet使readline工作,以便我的telnet服务器公开的服务器端命令可以自动完成。 – wcmatthysen 2011-06-15 18:53:35

+2

我不认为readline只能用于标准输入。你希望用户使用标准的telnet客户端连接吗?实际上我不确定telnet是否支持Tab完成。我认为最简单的方法就是简单地实现你自己的客户端,并在那里添加tabline支持。 – 2011-06-15 19:10:01

回答

1

您可以通过将管道连接到readline来完成此操作。下面是一个使用ri readline文档中的while循环的示例,该循环仅将command 1,command2,command 3发送到readline。

require 'readline' 

rd, wr = IO.pipe 

(1..3).each do |i| 
    wr.puts "command #{i}" 
end 
wr.close 

Readline.input = rd 
while buf = Readline.readline('', true) 
    p Readline::HISTORY.to_a 
    print("-> ", buf, "\n") 
end 

输出:

["command 1"] 
-> command 1 
["command 1", "command 2"] 
-> command 2 
["command 1", "command 2", "command 3"] 
-> command 3