other: remaining changes needed to get android to build (#1199)
* other: remaining changes needed to get android to build * update changelog * simplify disk os-specific code
This commit is contained in:
parent
2ba7394ac2
commit
2a354f772f
|
@ -18,6 +18,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- [#1172](https://github.com/ClementTsang/bottom/pull/1172): Support human times for `time_delta` and `default_time_value`.
|
- [#1172](https://github.com/ClementTsang/bottom/pull/1172): Support human times for `time_delta` and `default_time_value`.
|
||||||
- [#1187](https://github.com/ClementTsang/bottom/pull/1187): Use better names for duplicate temp sensors found by `/sys/class/thermal`.
|
- [#1187](https://github.com/ClementTsang/bottom/pull/1187): Use better names for duplicate temp sensors found by `/sys/class/thermal`.
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
- [#1199](https://github.com/ClementTsang/bottom/pull/1199): bottom should build on `aarch64-linux-android` with features disabled.
|
||||||
|
|
||||||
## [0.9.1] - 2023-05-14
|
## [0.9.1] - 2023-05-14
|
||||||
|
|
||||||
## Bug Fixes
|
## Bug Fixes
|
||||||
|
|
|
@ -407,22 +407,7 @@ impl DataCollector {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn update_disks(&mut self) {
|
fn update_disks(&mut self) {
|
||||||
if self.widgets_to_harvest.use_disk {
|
if self.widgets_to_harvest.use_disk {
|
||||||
#[cfg(any(target_os = "freebsd", target_os = "linux", target_os = "macos"))]
|
self.data.disks = disks::get_disk_usage(self).ok();
|
||||||
{
|
|
||||||
let disk_filter = &self.filters.disk_filter;
|
|
||||||
let mount_filter = &self.filters.mount_filter;
|
|
||||||
self.data.disks = disks::get_disk_usage(disk_filter, mount_filter).ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(target_os = "windows")]
|
|
||||||
{
|
|
||||||
self.data.disks = Some(disks::get_disk_usage(
|
|
||||||
&self.sys,
|
|
||||||
&self.filters.disk_filter,
|
|
||||||
&self.filters.mount_filter,
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
self.data.io = disks::get_io_usage().ok();
|
self.data.io = disks::get_io_usage().ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,10 @@ cfg_if! {
|
||||||
} else if #[cfg(target_os = "macos")] {
|
} else if #[cfg(target_os = "macos")] {
|
||||||
mod unix;
|
mod unix;
|
||||||
pub(crate) use self::unix::*;
|
pub(crate) use self::unix::*;
|
||||||
|
} else {
|
||||||
|
mod other;
|
||||||
|
pub(crate) use self::other::*;
|
||||||
}
|
}
|
||||||
// TODO: Add dummy impls here for other OSes?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Default)]
|
#[derive(Debug, Clone, Default)]
|
||||||
|
|
|
@ -5,7 +5,8 @@ use std::io;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
use super::{keep_disk_entry, DiskHarvest, IoHarvest};
|
use super::{keep_disk_entry, DiskHarvest, IoHarvest};
|
||||||
use crate::{app::Filter, data_harvester::deserialize_xo, utils::error};
|
|
||||||
|
use crate::{app::data_harvester::DataCollector, data_harvester::deserialize_xo, utils::error};
|
||||||
|
|
||||||
#[derive(Deserialize, Debug, Default)]
|
#[derive(Deserialize, Debug, Default)]
|
||||||
#[serde(rename_all = "kebab-case")]
|
#[serde(rename_all = "kebab-case")]
|
||||||
|
@ -35,9 +36,9 @@ pub fn get_io_usage() -> error::Result<IoHarvest> {
|
||||||
Ok(io_harvest)
|
Ok(io_harvest)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_disk_usage(
|
pub fn get_disk_usage(collector: &DataCollector) -> error::Result<Vec<DiskHarvest>> {
|
||||||
disk_filter: &Option<Filter>, mount_filter: &Option<Filter>,
|
let disk_filter = &collector.filters.disk_filter;
|
||||||
) -> error::Result<Vec<DiskHarvest>> {
|
let mount_filter = &collector.filters.mount_filter;
|
||||||
let vec_disks: Vec<DiskHarvest> = get_disk_info().map(|storage_system_information| {
|
let vec_disks: Vec<DiskHarvest> = get_disk_info().map(|storage_system_information| {
|
||||||
storage_system_information
|
storage_system_information
|
||||||
.filesystem
|
.filesystem
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
//! Fallback disk info using sysinfo.
|
||||||
|
|
||||||
|
use sysinfo::{DiskExt, System, SystemExt};
|
||||||
|
|
||||||
|
use crate::app::data_harvester::DataCollector;
|
||||||
|
|
||||||
|
use super::{keep_disk_entry, DiskHarvest};
|
||||||
|
|
||||||
|
pub(crate) fn get_disk_usage(collector: &DataCollector) -> anyhow::Result<Vec<DiskHarvest>> {
|
||||||
|
let disks = collector.sys.disks();
|
||||||
|
let disk_filter = &collector.filters.disk_filter;
|
||||||
|
let mount_filter = &collector.filters.mount_filter;
|
||||||
|
|
||||||
|
Ok(disks
|
||||||
|
.iter()
|
||||||
|
.filter_map(|disk| {
|
||||||
|
let name = {
|
||||||
|
let name = disk.name();
|
||||||
|
|
||||||
|
if name.is_empty() {
|
||||||
|
"No Name".to_string()
|
||||||
|
} else {
|
||||||
|
name.to_os_string()
|
||||||
|
.into_string()
|
||||||
|
.unwrap_or_else(|_| "Name Unavailable".to_string())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let mount_point = disk
|
||||||
|
.mount_point()
|
||||||
|
.as_os_str()
|
||||||
|
.to_os_string()
|
||||||
|
.into_string()
|
||||||
|
.unwrap_or_else(|_| "Mount Unavailable".to_string());
|
||||||
|
|
||||||
|
if keep_disk_entry(&name, &mount_point, disk_filter, mount_filter) {
|
||||||
|
let free_space = disk.available_space();
|
||||||
|
let total_space = disk.total_space();
|
||||||
|
let used_space = total_space - free_space;
|
||||||
|
|
||||||
|
Some(DiskHarvest {
|
||||||
|
name,
|
||||||
|
mount_point,
|
||||||
|
free_space: Some(free_space),
|
||||||
|
used_space: Some(used_space),
|
||||||
|
total_space: Some(total_space),
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect())
|
||||||
|
}
|
|
@ -25,12 +25,12 @@ cfg_if::cfg_if! {
|
||||||
}
|
}
|
||||||
|
|
||||||
use super::{keep_disk_entry, DiskHarvest};
|
use super::{keep_disk_entry, DiskHarvest};
|
||||||
use crate::app::Filter;
|
use crate::app::data_harvester::DataCollector;
|
||||||
|
|
||||||
/// Returns the disk usage of the mounted (and for now, physical) disks.
|
/// Returns the disk usage of the mounted (and for now, physical) disks.
|
||||||
pub fn get_disk_usage(
|
pub fn get_disk_usage(collector: &DataCollector) -> anyhow::Result<Vec<DiskHarvest>> {
|
||||||
disk_filter: &Option<Filter>, mount_filter: &Option<Filter>,
|
let disk_filter = &collector.filters.disk_filter;
|
||||||
) -> anyhow::Result<Vec<DiskHarvest>> {
|
let mount_filter = &collector.filters.mount_filter;
|
||||||
let mut vec_disks: Vec<DiskHarvest> = Vec::new();
|
let mut vec_disks: Vec<DiskHarvest> = Vec::new();
|
||||||
|
|
||||||
for partition in physical_partitions()? {
|
for partition in physical_partitions()? {
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
//! Disk stats via sysinfo.
|
//! Disk stats via sysinfo.
|
||||||
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use sysinfo::{DiskExt, System, SystemExt};
|
use sysinfo::{DiskExt, SystemExt};
|
||||||
|
|
||||||
use super::{keep_disk_entry, DiskHarvest};
|
use super::{keep_disk_entry, DiskHarvest};
|
||||||
use crate::app::data_harvester::disks::IoCounters;
|
|
||||||
use crate::app::filter::Filter;
|
use crate::app::data_harvester::{disks::IoCounters, DataCollector};
|
||||||
|
|
||||||
mod bindings;
|
mod bindings;
|
||||||
use bindings::*;
|
use bindings::*;
|
||||||
|
@ -26,11 +26,12 @@ pub(crate) fn io_stats() -> anyhow::Result<Vec<anyhow::Result<IoCounters>>> {
|
||||||
.collect::<Vec<_>>())
|
.collect::<Vec<_>>())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_disk_usage(
|
pub(crate) fn get_disk_usage(collector: &DataCollector) -> anyhow::Result<Vec<DiskHarvest>> {
|
||||||
sys: &System, disk_filter: &Option<Filter>, mount_filter: &Option<Filter>,
|
let disks = collector.sys.disks();
|
||||||
) -> Vec<DiskHarvest> {
|
let disk_filter = &collector.filters.disk_filter;
|
||||||
let disks = sys.disks();
|
let mount_filter = &collector.filters.mount_filter;
|
||||||
disks
|
|
||||||
|
Ok(disks
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|disk| {
|
.filter_map(|disk| {
|
||||||
let name = {
|
let name = {
|
||||||
|
@ -71,5 +72,5 @@ pub(crate) fn get_disk_usage(
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect()
|
.collect())
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#[cfg(target_family = "unix")]
|
#[cfg(any(target_os = "freebsd", target_os = "linux", target_os = "macos"))]
|
||||||
use std::cmp::min;
|
use std::cmp::min;
|
||||||
|
|
||||||
use tui::{
|
use tui::{
|
||||||
|
@ -18,6 +18,148 @@ use crate::{
|
||||||
const DD_BASE: &str = " Confirm Kill Process ── Esc to close ";
|
const DD_BASE: &str = " Confirm Kill Process ── Esc to close ";
|
||||||
const DD_ERROR_BASE: &str = " Error ── Esc to close ";
|
const DD_ERROR_BASE: &str = " Error ── Esc to close ";
|
||||||
|
|
||||||
|
cfg_if::cfg_if! {
|
||||||
|
if #[cfg(target_os = "linux")] {
|
||||||
|
const SIGNAL_TEXT: [&str; 63] = [
|
||||||
|
"0: Cancel",
|
||||||
|
"1: HUP",
|
||||||
|
"2: INT",
|
||||||
|
"3: QUIT",
|
||||||
|
"4: ILL",
|
||||||
|
"5: TRAP",
|
||||||
|
"6: ABRT",
|
||||||
|
"7: BUS",
|
||||||
|
"8: FPE",
|
||||||
|
"9: KILL",
|
||||||
|
"10: USR1",
|
||||||
|
"11: SEGV",
|
||||||
|
"12: USR2",
|
||||||
|
"13: PIPE",
|
||||||
|
"14: ALRM",
|
||||||
|
"15: TERM",
|
||||||
|
"16: STKFLT",
|
||||||
|
"17: CHLD",
|
||||||
|
"18: CONT",
|
||||||
|
"19: STOP",
|
||||||
|
"20: TSTP",
|
||||||
|
"21: TTIN",
|
||||||
|
"22: TTOU",
|
||||||
|
"23: URG",
|
||||||
|
"24: XCPU",
|
||||||
|
"25: XFSZ",
|
||||||
|
"26: VTALRM",
|
||||||
|
"27: PROF",
|
||||||
|
"28: WINCH",
|
||||||
|
"29: IO",
|
||||||
|
"30: PWR",
|
||||||
|
"31: SYS",
|
||||||
|
"34: RTMIN",
|
||||||
|
"35: RTMIN+1",
|
||||||
|
"36: RTMIN+2",
|
||||||
|
"37: RTMIN+3",
|
||||||
|
"38: RTMIN+4",
|
||||||
|
"39: RTMIN+5",
|
||||||
|
"40: RTMIN+6",
|
||||||
|
"41: RTMIN+7",
|
||||||
|
"42: RTMIN+8",
|
||||||
|
"43: RTMIN+9",
|
||||||
|
"44: RTMIN+10",
|
||||||
|
"45: RTMIN+11",
|
||||||
|
"46: RTMIN+12",
|
||||||
|
"47: RTMIN+13",
|
||||||
|
"48: RTMIN+14",
|
||||||
|
"49: RTMIN+15",
|
||||||
|
"50: RTMAX-14",
|
||||||
|
"51: RTMAX-13",
|
||||||
|
"52: RTMAX-12",
|
||||||
|
"53: RTMAX-11",
|
||||||
|
"54: RTMAX-10",
|
||||||
|
"55: RTMAX-9",
|
||||||
|
"56: RTMAX-8",
|
||||||
|
"57: RTMAX-7",
|
||||||
|
"58: RTMAX-6",
|
||||||
|
"59: RTMAX-5",
|
||||||
|
"60: RTMAX-4",
|
||||||
|
"61: RTMAX-3",
|
||||||
|
"62: RTMAX-2",
|
||||||
|
"63: RTMAX-1",
|
||||||
|
"64: RTMAX",
|
||||||
|
];
|
||||||
|
} else if #[cfg(target_os = "macos")] {
|
||||||
|
const SIGNAL_TEXT: [&str; 32] = [
|
||||||
|
"0: Cancel",
|
||||||
|
"1: HUP",
|
||||||
|
"2: INT",
|
||||||
|
"3: QUIT",
|
||||||
|
"4: ILL",
|
||||||
|
"5: TRAP",
|
||||||
|
"6: ABRT",
|
||||||
|
"7: EMT",
|
||||||
|
"8: FPE",
|
||||||
|
"9: KILL",
|
||||||
|
"10: BUS",
|
||||||
|
"11: SEGV",
|
||||||
|
"12: SYS",
|
||||||
|
"13: PIPE",
|
||||||
|
"14: ALRM",
|
||||||
|
"15: TERM",
|
||||||
|
"16: URG",
|
||||||
|
"17: STOP",
|
||||||
|
"18: TSTP",
|
||||||
|
"19: CONT",
|
||||||
|
"20: CHLD",
|
||||||
|
"21: TTIN",
|
||||||
|
"22: TTOU",
|
||||||
|
"23: IO",
|
||||||
|
"24: XCPU",
|
||||||
|
"25: XFSZ",
|
||||||
|
"26: VTALRM",
|
||||||
|
"27: PROF",
|
||||||
|
"28: WINCH",
|
||||||
|
"29: INFO",
|
||||||
|
"30: USR1",
|
||||||
|
"31: USR2",
|
||||||
|
];
|
||||||
|
} else if #[cfg(target_os = "freebsd")] {
|
||||||
|
const SIGNAL_TEXT: [&str; 34] = [
|
||||||
|
"0: Cancel",
|
||||||
|
"1: HUP",
|
||||||
|
"2: INT",
|
||||||
|
"3: QUIT",
|
||||||
|
"4: ILL",
|
||||||
|
"5: TRAP",
|
||||||
|
"6: ABRT",
|
||||||
|
"7: EMT",
|
||||||
|
"8: FPE",
|
||||||
|
"9: KILL",
|
||||||
|
"10: BUS",
|
||||||
|
"11: SEGV",
|
||||||
|
"12: SYS",
|
||||||
|
"13: PIPE",
|
||||||
|
"14: ALRM",
|
||||||
|
"15: TERM",
|
||||||
|
"16: URG",
|
||||||
|
"17: STOP",
|
||||||
|
"18: TSTP",
|
||||||
|
"19: CONT",
|
||||||
|
"20: CHLD",
|
||||||
|
"21: TTIN",
|
||||||
|
"22: TTOU",
|
||||||
|
"23: IO",
|
||||||
|
"24: XCPU",
|
||||||
|
"25: XFSZ",
|
||||||
|
"26: VTALRM",
|
||||||
|
"27: PROF",
|
||||||
|
"28: WINCH",
|
||||||
|
"29: INFO",
|
||||||
|
"30: USR1",
|
||||||
|
"31: USR2",
|
||||||
|
"32: THR",
|
||||||
|
"33: LIBRT",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Painter {
|
impl Painter {
|
||||||
pub fn get_dd_spans(&self, app_state: &App) -> Option<Text<'_>> {
|
pub fn get_dd_spans(&self, app_state: &App) -> Option<Text<'_>> {
|
||||||
if let Some(dd_err) = &app_state.dd_err {
|
if let Some(dd_err) = &app_state.dd_err {
|
||||||
|
@ -134,154 +276,8 @@ impl Painter {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
#[cfg(target_family = "unix")]
|
#[cfg(any(target_os = "freebsd", target_os = "linux", target_os = "macos"))]
|
||||||
{
|
{
|
||||||
let signal_text: Vec<&str>;
|
|
||||||
#[cfg(target_os = "linux")]
|
|
||||||
{
|
|
||||||
signal_text = vec![
|
|
||||||
"0: Cancel",
|
|
||||||
"1: HUP",
|
|
||||||
"2: INT",
|
|
||||||
"3: QUIT",
|
|
||||||
"4: ILL",
|
|
||||||
"5: TRAP",
|
|
||||||
"6: ABRT",
|
|
||||||
"7: BUS",
|
|
||||||
"8: FPE",
|
|
||||||
"9: KILL",
|
|
||||||
"10: USR1",
|
|
||||||
"11: SEGV",
|
|
||||||
"12: USR2",
|
|
||||||
"13: PIPE",
|
|
||||||
"14: ALRM",
|
|
||||||
"15: TERM",
|
|
||||||
"16: STKFLT",
|
|
||||||
"17: CHLD",
|
|
||||||
"18: CONT",
|
|
||||||
"19: STOP",
|
|
||||||
"20: TSTP",
|
|
||||||
"21: TTIN",
|
|
||||||
"22: TTOU",
|
|
||||||
"23: URG",
|
|
||||||
"24: XCPU",
|
|
||||||
"25: XFSZ",
|
|
||||||
"26: VTALRM",
|
|
||||||
"27: PROF",
|
|
||||||
"28: WINCH",
|
|
||||||
"29: IO",
|
|
||||||
"30: PWR",
|
|
||||||
"31: SYS",
|
|
||||||
"34: RTMIN",
|
|
||||||
"35: RTMIN+1",
|
|
||||||
"36: RTMIN+2",
|
|
||||||
"37: RTMIN+3",
|
|
||||||
"38: RTMIN+4",
|
|
||||||
"39: RTMIN+5",
|
|
||||||
"40: RTMIN+6",
|
|
||||||
"41: RTMIN+7",
|
|
||||||
"42: RTMIN+8",
|
|
||||||
"43: RTMIN+9",
|
|
||||||
"44: RTMIN+10",
|
|
||||||
"45: RTMIN+11",
|
|
||||||
"46: RTMIN+12",
|
|
||||||
"47: RTMIN+13",
|
|
||||||
"48: RTMIN+14",
|
|
||||||
"49: RTMIN+15",
|
|
||||||
"50: RTMAX-14",
|
|
||||||
"51: RTMAX-13",
|
|
||||||
"52: RTMAX-12",
|
|
||||||
"53: RTMAX-11",
|
|
||||||
"54: RTMAX-10",
|
|
||||||
"55: RTMAX-9",
|
|
||||||
"56: RTMAX-8",
|
|
||||||
"57: RTMAX-7",
|
|
||||||
"58: RTMAX-6",
|
|
||||||
"59: RTMAX-5",
|
|
||||||
"60: RTMAX-4",
|
|
||||||
"61: RTMAX-3",
|
|
||||||
"62: RTMAX-2",
|
|
||||||
"63: RTMAX-1",
|
|
||||||
"64: RTMAX",
|
|
||||||
];
|
|
||||||
}
|
|
||||||
#[cfg(target_os = "macos")]
|
|
||||||
{
|
|
||||||
signal_text = vec![
|
|
||||||
"0: Cancel",
|
|
||||||
"1: HUP",
|
|
||||||
"2: INT",
|
|
||||||
"3: QUIT",
|
|
||||||
"4: ILL",
|
|
||||||
"5: TRAP",
|
|
||||||
"6: ABRT",
|
|
||||||
"7: EMT",
|
|
||||||
"8: FPE",
|
|
||||||
"9: KILL",
|
|
||||||
"10: BUS",
|
|
||||||
"11: SEGV",
|
|
||||||
"12: SYS",
|
|
||||||
"13: PIPE",
|
|
||||||
"14: ALRM",
|
|
||||||
"15: TERM",
|
|
||||||
"16: URG",
|
|
||||||
"17: STOP",
|
|
||||||
"18: TSTP",
|
|
||||||
"19: CONT",
|
|
||||||
"20: CHLD",
|
|
||||||
"21: TTIN",
|
|
||||||
"22: TTOU",
|
|
||||||
"23: IO",
|
|
||||||
"24: XCPU",
|
|
||||||
"25: XFSZ",
|
|
||||||
"26: VTALRM",
|
|
||||||
"27: PROF",
|
|
||||||
"28: WINCH",
|
|
||||||
"29: INFO",
|
|
||||||
"30: USR1",
|
|
||||||
"31: USR2",
|
|
||||||
];
|
|
||||||
}
|
|
||||||
#[cfg(target_os = "freebsd")]
|
|
||||||
{
|
|
||||||
signal_text = vec![
|
|
||||||
"0: Cancel",
|
|
||||||
"1: HUP",
|
|
||||||
"2: INT",
|
|
||||||
"3: QUIT",
|
|
||||||
"4: ILL",
|
|
||||||
"5: TRAP",
|
|
||||||
"6: ABRT",
|
|
||||||
"7: EMT",
|
|
||||||
"8: FPE",
|
|
||||||
"9: KILL",
|
|
||||||
"10: BUS",
|
|
||||||
"11: SEGV",
|
|
||||||
"12: SYS",
|
|
||||||
"13: PIPE",
|
|
||||||
"14: ALRM",
|
|
||||||
"15: TERM",
|
|
||||||
"16: URG",
|
|
||||||
"17: STOP",
|
|
||||||
"18: TSTP",
|
|
||||||
"19: CONT",
|
|
||||||
"20: CHLD",
|
|
||||||
"21: TTIN",
|
|
||||||
"22: TTOU",
|
|
||||||
"23: IO",
|
|
||||||
"24: XCPU",
|
|
||||||
"25: XFSZ",
|
|
||||||
"26: VTALRM",
|
|
||||||
"27: PROF",
|
|
||||||
"28: WINCH",
|
|
||||||
"29: INFO",
|
|
||||||
"30: USR1",
|
|
||||||
"31: USR2",
|
|
||||||
"32: THR",
|
|
||||||
"33: LIBRT",
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
let button_rect = Layout::default()
|
let button_rect = Layout::default()
|
||||||
.direction(Direction::Horizontal)
|
.direction(Direction::Horizontal)
|
||||||
.margin(1)
|
.margin(1)
|
||||||
|
@ -321,14 +317,14 @@ impl Painter {
|
||||||
};
|
};
|
||||||
let scroll_offset: usize = app_state.delete_dialog_state.scroll_pos;
|
let scroll_offset: usize = app_state.delete_dialog_state.scroll_pos;
|
||||||
|
|
||||||
let mut buttons = signal_text
|
let mut buttons = SIGNAL_TEXT
|
||||||
[scroll_offset + 1..min((layout.len()) + scroll_offset, signal_text.len())]
|
[scroll_offset + 1..min((layout.len()) + scroll_offset, SIGNAL_TEXT.len())]
|
||||||
.iter()
|
.iter()
|
||||||
.map(|text| Span::styled(*text, self.colours.text_style))
|
.map(|text| Span::styled(*text, self.colours.text_style))
|
||||||
.collect::<Vec<Span<'_>>>();
|
.collect::<Vec<Span<'_>>>();
|
||||||
buttons.insert(0, Span::styled(signal_text[0], self.colours.text_style));
|
buttons.insert(0, Span::styled(SIGNAL_TEXT[0], self.colours.text_style));
|
||||||
buttons[selected - scroll_offset] = Span::styled(
|
buttons[selected - scroll_offset] = Span::styled(
|
||||||
signal_text[selected],
|
SIGNAL_TEXT[selected],
|
||||||
self.colours.currently_selected_text_style,
|
self.colours.currently_selected_text_style,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue