X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FTermlib%2FtelnetServer.cc;h=c9aeb7f4e4bfa2be74115a48ae5e26f7bfecb5dd;hb=81f84badf27b66dbadec9890646ca1193e998505;hp=4f9ccf25bf32b771d81b32c862f7934e8a0270ab;hpb=54b5df35c9877b91730f4e79da29f1a470b81754;p=senf.git diff --git a/Utils/Termlib/telnetServer.cc b/Utils/Termlib/telnetServer.cc index 4f9ccf2..c9aeb7f 100644 --- a/Utils/Termlib/telnetServer.cc +++ b/Utils/Termlib/telnetServer.cc @@ -49,7 +49,29 @@ namespace { : senf::term::BaseTelnetProtocol (handle), editor_ (*this, senf::membind(&MyTelnet::executeLine, this)) { - editor_.prompt("myTelnet$"); + editor_.prompt("myTelnet-with-an-endlesssly-long-prompt$"); + editor_.defineKey(senf::term::KeyParser::Ctrl('D'), + senf::membind(&MyTelnet::deleteCharOrExit, this)); + } + + void deleteCharOrExit(senf::term::LineEditor & editor) + { + if (editor.text().empty()) { + exit(); + } + else + senf::term::bindings::deleteChar(editor); + } + + void exit() + { + handle().facet().shutdown(senf::TCPSocketProtocol::ShutRD); + } + + virtual void v_setupFailed() + { + SENF_LOG(("Terminal setup failed")); + exit(); } virtual void v_eof() @@ -58,7 +80,7 @@ namespace { delete this; } - virtual void executeLine(std::string const & text) + void executeLine(std::string const & text) { SENF_LOG(("Execute line: " << text)); editor_.show();