Fix: Use buffered backend to prevent flickering

This is reported to be occuring with the Cursive Termion backend as it redraws
the screen every time, resulting in flickering for some users.

Should be removed once Cursive has integrated this.

See also:
- https://github.com/gyscos/cursive/issues/142
- https://github.com/gyscos/cursive/issues/667

Fixes #934
This commit is contained in:
Henrik Friedrichsen
2022-09-11 23:34:24 +02:00
parent e6a01da3cd
commit 63722c5be3
3 changed files with 20 additions and 1 deletions

15
Cargo.lock generated
View File

@@ -537,6 +537,20 @@ dependencies = [
"unicode-width",
]
[[package]]
name = "cursive_buffered_backend"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e902dfdc09ca6729606f45a5ce6ce4ef9637fc257e8b11ca7806fc9aabd03cf7"
dependencies = [
"cursive_core",
"enumset",
"log",
"smallvec",
"unicode-segmentation",
"unicode-width",
]
[[package]]
name = "cursive_core"
version = "0.3.5"
@@ -1575,6 +1589,7 @@ dependencies = [
"clipboard",
"crossbeam-channel",
"cursive",
"cursive_buffered_backend",
"dbus",
"dbus-tree",
"fern",

View File

@@ -45,6 +45,7 @@ tokio-stream = "0.1.9"
toml = "0.5"
unicode-width = "0.1.9"
url = "2.2"
cursive_buffered_backend = "0.6.1"
[target.'cfg(target_os = "linux")'.dependencies]
wl-clipboard-rs = {version = "0.6", optional = true}

View File

@@ -166,7 +166,10 @@ async fn main() -> Result<(), String> {
credentials = credentials_prompt(Some(error_msg))?;
}
let mut cursive = cursive::default().into_runner();
let backend = cursive::backends::try_default().map_err(|e| e.to_string())?;
let buffered_backend = Box::new(cursive_buffered_backend::BufferedBackend::new(backend));
let mut cursive = cursive::CursiveRunner::new(cursive::Cursive::new(), buffered_backend);
cursive.set_window_title("ncspot");
let theme = cfg.build_theme();