Node JS REPL, сокеты и Telnet — завершение табуляции, клавиши со стрелками и т. д.

Я играл с REPL от Node. Я подумал, что было бы неплохо сделать его доступным через сокет, подключиться к нему через Telnet/puTTY/что угодно и отладить мой сервер на лету.

Я использовал пример, найденный здесь: http://nodejs.org/docs/latest/api/repl.html, который в основном выглядит так...

net.createServer(function (socket) {
  var cmd = repl.start(">", socket);
  //... some other stuff here.... not important
}).listen(5001);

Ок, отлично! Теперь я могу подключиться к порту 5001 с помощью Telnet и взаимодействовать с REPL. Но у меня возникают проблемы с управляющими символами (например, Tab, Ctrl + C, стрелка вверх, стрелка вниз и т. д.). Как я могу заставить их работать? Например, если я подключаюсь с помощью telnet, набираю «1+1‹Enter›», я получаю 2. Но затем, когда я нажимаю «‹Стрелка вверх›‹Enter›», я получаю «...», как если бы REPL ждет, пока я закончу команду. Но на самом деле все, что я хочу сделать, это увидеть последнюю команду, которую я выполнил. Я знаю, что Telnet любит удерживать свой вывод до тех пор, пока не будет введен перевод строки, но есть ли способ избежать этого?

$ telnet localhost 6634
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
>1+1
2
>^[[A
...

EDIT: я также обнаружил эту проблему, которая может быть связана или не связана - Клавиши со стрелками превращаются в управляющие символы в Telnet

EDIT 2: Хммм... rlwrap, кажется, решает большую часть моей проблемы:

$ rlwrap telnet localhost 6634

Единственное, что не работает, - это завершение табуляции локальных/глобальных переменных, без которых, я полагаю, я могу жить. Больше всего меня интересовала история команды. rlwrap классно!


person BMiner    schedule 27.12.2011    source источник


Ответы (1)


См. выше.

rlwrap telnet localhost 6634

person BMiner    schedule 30.05.2012
comment
вы можете имитировать завершение табуляции с помощью переключателей -c -f: /04/rlwrap.html очевидно, вам понадобится список ключевых слов node.js - person booyaa; 13.06.2013