2011-06-15 6 views
5

Estoy implementando un pequeño servidor telnet en Ruby. El problema al que me enfrento actualmente es que quiero agregar compatibilidad con readline para poder tener compatibilidad con la finalización de pestañas y el historial de línea de comandos. He consultado la biblioteca Readline, pero parece que solo funcionará a través de stdin. ¿Hay alguna forma de hacer esto en Ruby (noté la solución para Python)?Servidor de Telnet de edición de línea Ruby

+0

En este momento, es que ha intentado aplicar readline en el servidor? Creo que readline es algo implementado en el lado del cliente. –

+0

Jip, ese es mi problema en este momento. Readline solo funciona con stdin (por lo tanto, solo en el lado del cliente). Quiero saber si es posible hacer que readline funcione a través de telnet para que pueda obtener autocompletado, etc. para los comandos del lado del servidor que están expuestos por mi servidor telnet. – wcmatthysen

+2

No creo que readline funcione en algo más que stdin. ¿Esperas que los usuarios se conecten usando el cliente estándar de telnet? De hecho, no estoy seguro de si telnet admite la finalización de pestañas. Creo que la manera más sencilla sería simplemente implementar su propio cliente y agregar soporte de lectura con la finalización de pestañas allí. –

Respuesta

1

Puede hacer esto conectando una tubería a readline. Aquí hay un ejemplo usando el ciclo while de la documentación de readline que acaba de enviar command 1, command2, command 3 para 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 

Salida:

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