notcurses/rust/examples/direct-cursor.rs
joseLuís 4de2652f8d rust: more fixes and improvements
- fix notcurses_init unit test
- fix fn call name: `nplane_at_cursor_cell` → `ncplane_at_cursor_cell`.
- make LIBC_FILE & NC_FILE type aliases with doc comment.
- add lib module comment.
- improve direct-cursor example.
- fix full-text example and rename it to full-basics.
2020-11-18 02:43:29 +01:00

61 lines
1.5 KiB
Rust

//! Example 'direct-cursor'
//!
//! Explore cursor functions in direct mode
//!
// utility macro: sleep for $ms milliseconds
macro_rules! sleep {
($ms:expr) => {
std::thread::sleep(std::time::Duration::from_millis($ms));
};
}
// utility macro: convert the String $s to *mut CString
macro_rules! cstring {
($s:expr) => {
std::ffi::CString::new($s).unwrap().as_ptr();
}
}
use libnotcurses_sys::*;
fn main() {
unsafe {
let ncd = NcDirect::new();
let cols = ncdirect_dim_x(ncd);
let rows = ncdirect_dim_y(ncd);
println!("terminal size (rows, cols): {}, {}", rows, cols);
ncdirect_putstr(ncd, 0, cstring![format!("The current coordinates are")]);
ncdirect_flush(ncd);
for _n in 0..20 {
ncdirect_putstr(ncd, 0, cstring!("."));
ncdirect_flush(ncd);
sleep![50];
}
let (mut cy, mut cx) = (0, 0);
ncdirect_cursor_yx(ncd, &mut cy, &mut cx);
ncdirect_putstr(ncd, 0, cstring![format!(" ({},{})\n", cy, cx)]);
sleep![1000];
let sentence = vec!["And", "now", "I", "will", "clear", "the", "screen", ".", ".", "."];
for word in sentence {
ncdirect_putstr(ncd, 0, cstring!(format!["{} ", word]));
ncdirect_flush(ncd);
sleep![200];
}
sleep![300];
ncdirect_putstr(ncd, 0, cstring!("\nbye!\n\n"));
ncdirect_flush(ncd);
sleep![600];
ncdirect_clear(ncd);
sleep![1000];
ncdirect_stop(ncd);
}
}