Как получать значение из консоли и буфера обмена и сохранить его в переменной?

  • 13 августа 2023 г. 15:36
Ответы на вопрос 2
В вашем коде уже есть проверка для использования пути из буфера обмена после ввода из консоли. Однако, она будет выполняться только если в буфере обмена есть данные. Если данных в буфере нет, то программа будет ожидать одну секунду и повторять попытку получения пути. 

Если вы хотите дополнительно проверять буфер обмена вместо ожидания, вы можете использовать функцию `cli_clipboard::wait_for_change()`, которая будет блокировать выполнение программы до появления новых данных в буфере обмена. Вот как можно изменить ваш код, чтобы использовать эту функцию:

```rust
use cli_clipboard;
use std::time::Duration;
use std::thread::sleep;
use std::io::{BufRead, BufReader};

fn main() {
    println!("[ - - -\n");

    let mut path = String::new();
    
    loop {
        // input from console:
        println!("Введите путь:");
        let stdin = std::io::stdin();
        let mut reader = BufReader::new(stdin);
        reader.read_line(&mut path).unwrap();
        path = path.trim().to_string();
        
        // clipboard:
        let val = cli_clipboard::get_contents().unwrap();

        // input from clipboard:
        if val.trim().len() > 0 {
            println!("Получен путь из буфера обмена. Желаете его использовать? (y/n)");
            let mut response = String::new();
            std::io::stdin().read_line(&mut response).unwrap();
            if response.trim().eq_ignore_ascii_case("y") {
                path = val.trim().to_string();
            }
        } else {
            // Ждем, пока данные появятся в буфере обмена
            cli_clipboard::wait_for_change().unwrap();
        }

        if path.len() > 0 {
            break;
        }
        
        sleep(Duration::from_millis(1000));
    }
    
    println!("Путь:\n{}", path);
    cli_clipboard::set_contents("".to_string()).unwrap();

    println!("\n- - - ]");
}
```

В данной версии программы, если в буфере обмена нет данных, то программа будет блокироваться до тех пор, пока не появятся новые данные в буфере. Таким образом, программа будет проверять как ввод из консоли, так и буфера обмена, чтобы получить путь.
Это уже доступно в терминале без необходимости дополнительных настроек. Используйте комбинацию shift+insert или ctrl+shift+v для вставки, если при нажатии ctrl+v отображается ^V.
Похожие вопросы