diff --git a/alacritty/src/display/window.rs b/alacritty/src/display/window.rs index f098d7f8..2e8ed085 100644 --- a/alacritty/src/display/window.rs +++ b/alacritty/src/display/window.rs @@ -471,7 +471,23 @@ impl Window { self.windowed_context.swap_buffers_with_damage(damage).expect("swap buffes with damage"); } + #[cfg(any(target_os = "macos", windows))] pub fn swap_buffers_with_damage_supported(&self) -> bool { + // Disable damage tracking on macOS/Windows since there's no observation of it working. + false + } + + #[cfg(not(any(target_os = "macos", windows)))] + pub fn swap_buffers_with_damage_supported(&self) -> bool { + // On X11 damage tracking is behaving in unexpected ways on some NVIDIA systems. Since + // there's no compositor supporting it, damage tracking is disabled on X11. + // + // For more see https://github.com/alacritty/alacritty/issues/6051. + #[cfg(all(feature = "x11", not(any(target_os = "macos", windows))))] + if self.window().xlib_window().is_some() { + return false; + } + self.windowed_context.swap_buffers_with_damage_supported() } diff --git a/alacritty_terminal/src/ansi.rs b/alacritty_terminal/src/ansi.rs index f4e8fde1..b590bd7d 100644 --- a/alacritty_terminal/src/ansi.rs +++ b/alacritty_terminal/src/ansi.rs @@ -1,6 +1,7 @@ //! ANSI Terminal Stream Parsing. use std::convert::TryFrom; +use std::fmt::Write; use std::time::{Duration, Instant}; use std::{iter, str}; @@ -950,7 +951,7 @@ where for items in params { buf.push('['); for item in *items { - buf.push_str(&format!("{:?},", *item as char)); + let _ = write!(buf, "{:?}", *item as char); } buf.push_str("],"); } diff --git a/alacritty_terminal/src/grid/storage.rs b/alacritty_terminal/src/grid/storage.rs index 0b36fef6..6fbc3bf2 100644 --- a/alacritty_terminal/src/grid/storage.rs +++ b/alacritty_terminal/src/grid/storage.rs @@ -175,7 +175,7 @@ impl Storage { /// Rotate the grid, moving all lines up/down in history. #[inline] pub fn rotate(&mut self, count: isize) { - debug_assert!(count.abs() as usize <= self.inner.len()); + debug_assert!(count.unsigned_abs() <= self.inner.len()); let len = self.inner.len(); self.zero = (self.zero as isize + count + len as isize) as usize % len;