У меня есть программа, которая является клиентом и обращается к серверу с socket
.
Когда пользователь вводит сообщение, если приходит другое сообщение, оно визуально разбивает текст, делая еготрудно понять для пользователя.
сценарий можно придумать так:
c=0
p=Thread.new do
loop {
# this is the messages coming in
c+=1
puts c
sleep 1
}
end
g=Thread.new do
loop {
#this is the user input
puts $stdin.gets
}
end
p.join
g.join
в случае некоторых очень медленных печатных машин результат выглядел примерно так:
1
h2
el3
l4
o5
hello
6
Есть ли способ удалить и заменить текст при вводе строки в консоль?
edit
Итак, теперь, если я могу получить каждый символ отдельно, я могудобавьте его в строку, и в потоке p
, когда он будет помещен, он поместит "\r" + c
, а затем напечатает строку.
, что позволит пользователю также видеть, что он печатает. не прерывая поток p
.
Я не знаю, как получить каждый символ по отдельности.
это также поднимает проблему "как будет работать backspace?"и "мне нужен оператор switch для специальных символов, таких как return и ctrl + c?"