notcurses/rust/examples/direct-cursor.rs
joseLuís 1687af89e0 rust: refactor error system.
We need to use Result<> to manage error flow,
at least on the methods API. This way it will
finally feel idiomatic Rust and more concise.
Also, we can't return a non Result from main.

- rename NcResult to NcIntResult.
- new NcError & NcResult types.
- new error![] macro to reduce boilerplate.
- change return type of NcDirect methods to NcResult.
  - refactor several examples to return NcResult:
    direct-cursor, poc-direct & poc-kittyzapper.
- BONUS: fix test not stopping notcurses context.
- update lib doc-comment.
- fix typo in readme.
2020-12-25 05:16:34 +01:00

48 lines
1.1 KiB
Rust

//! Example 'direct-cursor'
//!
//! Explore cursor functions in direct mode
//!
use libnotcurses_sys::*;
fn main() -> NcResult<()> {
unsafe {
let ncd = NcDirect::new();
let cols = ncdirect_dim_x(ncd);
let rows = ncdirect_dim_y(ncd);
println!("terminal size (rows, cols): {}, {}", rows, cols);
ncd.putstr(0, "The current coordinates are")?;
ncd.flush()?;
for _n in 0..20 {
ncd.putstr(0, ".")?;
ncd.flush()?;
sleep![50];
}
if let Some((cy, cx)) = ncd.cursor_yx() {
ncd.putstr(0, &format!(" ({},{})\n", cy, cx))?;
}
sleep![1000];
let sentence = vec!["And", "now", "I", "will", "clear", "the", "screen", ".", ".", "."];
for word in sentence {
ncd.putstr(0, &format!["{} ", word])?;
ncd.flush()?;
sleep![200];
}
sleep![300];
ncd.putstr(0, "\nbye!\n\n")?;
ncd.flush()?;
sleep![600];
ncd.clear()?;
sleep![1000];
ncd.stop()?;
}
Ok(())
}