#cursor #platform-independent #terminal #cursor-position #console #caret

term_cursor

一个用于以平台无关方式处理终端光标移动的crate

7个版本

使用旧的Rust 2015

0.2.1 2018年6月11日
0.2.0 2018年4月25日
0.1.4 2017年12月5日
0.1.1 2017年7月6日
0.1.0 2017年6月30日

#380命令行界面

Download history 133/week @ 2024-03-11 138/week @ 2024-03-18 92/week @ 2024-03-25 113/week @ 2024-04-01 52/week @ 2024-04-08 151/week @ 2024-04-15 87/week @ 2024-04-22 96/week @ 2024-04-29 57/week @ 2024-05-06 134/week @ 2024-05-13 153/week @ 2024-05-20 201/week @ 2024-05-27 445/week @ 2024-06-03 50/week @ 2024-06-10 182/week @ 2024-06-17 43/week @ 2024-06-24

728 每月下载量
3 个crate 中使用

MIT 许可证

14KB
223

term_cursor

一个用于操作终端光标位置的纯Rust crate!还允许清除屏幕!

用法

    extern crate term_cursor as cursor;

    fn main() {
        // Clear the screen. Does not reset the cursor position!
        print!("{}", cursor::Clear);
        // Position the cursor at column 5 and row 10 and print "Hello world!".
        print!("{}Hello world!", cursor::Goto(5, 10));
        // Go up a line. Does not reset the column of the cursor!
        print!("{}I'm above", cursor::Up(1));

        // Let's do the same thing again, with the second API.
        cursor::clear().expect("Clear failed");
        cursor::set_pos(5, 10).expect("Setting the cursor position failed");
        print!("Hello world!");
        let (x, _y) = cursor::get_pos().expect("Getting the cursor position failed");
        cursor::set_pos(x, 9).expect("Set failed again");
        print!("I'm above");

        // To finish off the example, move the cursor down 2 lines.
        // That's where the command prompt will return once the program finishes.
        // We don't the command prompt to overprint our stuff!
        print!("{}", cursor::Goto(0, 12));
    }

注意事项

term_cursor的二维坐标系范围:x in 0..WIDTHy in 0..HEIGHT,其中 WIDTHHEIGHT 是终端缓冲区的字符尺寸。

将光标定位在范围外并打印文本是 未定义行为! 您的文本可能会换行,负索引可能被转换为正索引,或者您的程序可能崩溃。这完全取决于平台。

您有责任确保所有绘图都在范围内。为了获取终端的尺寸,我建议使用crate term_size

依赖关系

~74–290KB