2015-03-03 10 views
5

Я пытаюсь сделать индикатор состояния в Rust, который печатает на stdout. В других языках я использовал функцию, которая очищает текущую строку stdout, оставляя остальных нетронутыми. Я не могу найти эквивалент ржавчины. Есть ли это? Вот небольшой пример того, что я ищуКак очистить текущую строку stdout?

for i in 0..1000 { 
    stdio::print(format!("{}", i).as_slice)); 
    stdio::clear(); 
} 
+0

На какой платформе вы работаете? И какова соответствующая функция на других языках, о которых вы думаете? –

ответ

5

На терминале ANSI (почти все, кроме командной строки в Windows), \r вернет курсор в начало текущей строки, что позволит вам написать что-то еще поверх него (новый контент или пробел, чтобы стереть то, что вы уже написаны).

print!("\r") 

В стандартной библиотеке нет ничего доступного в нейтральной платформе.

0

, использующий код ASCII для забоя является одним из вариантов, например:

print!("12345"); 
print!("{}", (8u8 as char)); 

Это в конечном итоге выводит «1234» после того, как 5 удаляется в результате печати символа обратного пробела (код ascii 8). Как ни странно, Rust не распознает \ b как допустимый escape-символ.

+1

'\ u {8}' возвращает вас обратно. Эта ржавчина не распознает '\ b', поскольку действительный побег не является странным; это не один из абсолютно стандартных побегов, хотя он распространен. –

2

cli - это ящик (docs), который, кажется, работает очень хорошо для решения этой проблемы. Он также поставляется с некоторыми другими обычными лакомствами, такими как индикаторы прогресса и стильные подсказки.

cli::clear должна быть функцией, которую вы хотите.

Основная трудность, используя нечто вроде повторил:

println!("\r"); 

является то, что это не будет кросс совместимой ОС при использовании интерфейса командной строки :: ясно, должно быть, пока операционная система в вопросе поддерживается. Другая приятная вещь об использовании ящика cli заключается в том, что это более высокий уровень абстракции, который четко передает ваш фактический смысл.

Вы хотите очистить терминал.

Вы не пытаетесь повторно получить возврат каретки.

Здесь есть и другие подпрограммы для подобных вещей. А именно индикатор выполнения, который является проблемой, которую вы пытаетесь решить.

Смежные вопросы