fix off-by-1 column widths; add edit cursor

This commit is contained in:
🪞👃🪞 2025-03-23 21:49:38 +02:00
parent 59918491f6
commit 4bfdd28638
7 changed files with 57 additions and 59 deletions

44
Cargo.lock generated
View file

@ -156,9 +156,9 @@ dependencies = [
[[package]]
name = "borsh"
version = "1.5.5"
version = "1.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc"
checksum = "b2b74d67a0fc0af8e9823b79fd1c43a0900e5a8f0e0f4cc9210796bf3a820126"
dependencies = [
"borsh-derive",
"cfg_aliases",
@ -166,9 +166,9 @@ dependencies = [
[[package]]
name = "borsh-derive"
version = "1.5.5"
version = "1.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8b668d39970baad5356d7c83a86fee3a539e6f93bf6764c97368243e17a0487"
checksum = "2d37ed1b2c9b78421218a0b4f6d8349132d6ec2cfeba1cfb0118b0a8e268df9e"
dependencies = [
"once_cell",
"proc-macro-crate",
@ -262,9 +262,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.2.16"
version = "1.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c"
checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
dependencies = [
"shlex",
]
@ -479,9 +479,9 @@ checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1"
[[package]]
name = "file_type"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2f41d9c0ff84ee5335227a501bfa01284d5fec029f504dc48bea8238a16ca04"
checksum = "e237c2e6ae6183998137b1157b9e0fddfa25ce480f99f40ec1a5c2d49747c6d1"
dependencies = [
"phf",
]
@ -1178,9 +1178,9 @@ dependencies = [
[[package]]
name = "rust_decimal"
version = "1.37.0"
version = "1.37.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c24af6e7ac43c88a8a458d1139d0246fdce2f6cd2f1ac6cb51eb88b29c978af"
checksum = "faa7de2ba56ac291bd90c6b9bece784a52ae1411f9506544b3eae36dd2356d50"
dependencies = [
"arrayvec",
"borsh",
@ -1445,8 +1445,8 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "tengri"
version = "0.3.2"
source = "git+https://codeberg.org/unspeaker/tengri?rev=96ff10c#96ff10c4b0fda0d71308f488f5715c2f87f782d0"
version = "0.4.0"
source = "git+https://codeberg.org/unspeaker/tengri?rev=81e7f50#81e7f503634af7768d3d21276f383cb9fd63a1ce"
dependencies = [
"tengri_input",
"tengri_output",
@ -1455,18 +1455,18 @@ dependencies = [
[[package]]
name = "tengri_input"
version = "0.3.2"
source = "git+https://codeberg.org/unspeaker/tengri?rev=96ff10c#96ff10c4b0fda0d71308f488f5715c2f87f782d0"
version = "0.4.0"
source = "git+https://codeberg.org/unspeaker/tengri?rev=81e7f50#81e7f503634af7768d3d21276f383cb9fd63a1ce"
[[package]]
name = "tengri_output"
version = "0.3.2"
source = "git+https://codeberg.org/unspeaker/tengri?rev=96ff10c#96ff10c4b0fda0d71308f488f5715c2f87f782d0"
version = "0.4.0"
source = "git+https://codeberg.org/unspeaker/tengri?rev=81e7f50#81e7f503634af7768d3d21276f383cb9fd63a1ce"
[[package]]
name = "tengri_tui"
version = "0.3.2"
source = "git+https://codeberg.org/unspeaker/tengri?rev=96ff10c#96ff10c4b0fda0d71308f488f5715c2f87f782d0"
version = "0.4.0"
source = "git+https://codeberg.org/unspeaker/tengri?rev=81e7f50#81e7f503634af7768d3d21276f383cb9fd63a1ce"
dependencies = [
"atomic_float",
"better-panic",
@ -1819,18 +1819,18 @@ checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
[[package]]
name = "zerocopy"
version = "0.8.23"
version = "0.8.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6"
checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.8.23"
version = "0.8.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154"
checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
dependencies = [
"proc-macro2",
"quote",

View file

@ -5,22 +5,22 @@ edition = "2024"
[dependencies.tengri]
git = "https://codeberg.org/unspeaker/tengri"
rev = "96ff10c"
rev = "81e7f50"
[dependencies]
clap = { version = "4.5.4", features = [ "cargo" ] }
clap = { version = "^4.5.4", features = [ "cargo" ] }
enolib = { git = "https://codeberg.org/simonrepp/enolib-rs", tag = "0.5.0" }
byte-unit = "5.1.6"
file_type = "0.8"
hex = "0.4"
id3 = "1.16"
lofty = "0.22.2"
opener = "0.7"
opus_headers = "0.1.2"
pad = "0.1"
rusty-chromaprint = "0.3.0"
walkdir = "2"
xxhash-rust = { version = "0.8.5", features = ["xxh3"] }
byte-unit = "^5.1.6"
file_type = "^0.8"
hex = "^0.4"
id3 = "^1.16"
lofty = "^0.22.2"
opener = "^0.7"
opus_headers = "^0.1.2"
pad = "^0.1"
rusty-chromaprint = "^0.3.0"
walkdir = "^2"
xxhash-rust = { version = "^0.8.5", features = ["xxh3"] }
#base64 = "0.22"
#moku = "0.2"

View file

@ -1,4 +1,6 @@
run:
cargo run -- -j16 ~/Studio/Camp
run2:
cargo run -- -j16 ~/Music
build-release:
time cargo build -j4 --release

View file

@ -92,14 +92,14 @@ impl Taggart {
}
pub fn edit_insert (&mut self, c: char) {
if let Some((edit_index, value)) = &mut self.editing {
self.editing = Some((*edit_index, format!("{value}{c}")));
self.editing = Some((*edit_index + 1, format!("{value}{c}")));
}
}
pub fn edit_backspace (&mut self) {
if let Some((edit_index, value)) = &mut self.editing {
let mut chars = value.chars();
chars.next_back();
self.editing = Some((*edit_index, chars.as_str().into()));
self.editing = Some((edit_index.saturating_sub(1), chars.as_str().into()));
}
}
pub fn edit_delete (&mut self) {

View file

@ -34,7 +34,7 @@ impl Default for Columns<Entry, fn(&Entry)->Option<Arc<str>>, fn(&mut [Entry], u
fn default () -> Self {
Self(vec![
Column::new(&"HASH", 16, |entry: &Entry|entry.hash()),
Column::new(&"HASH", 8, |entry: &Entry|entry.hash()),
Column::new(&"SIZE", 8, |entry: &Entry|entry.size()),

View file

@ -21,12 +21,12 @@ impl Content<TuiOut> for Taggart {
Fill::x(Align::w(Tui::bold(true, if self.editing.is_some() {
Bsp::e(
Tui::bg(Self::BG_EDIT, Tui::fg(Self::FG_EDIT, " EDIT ")),
" Esc to cancel, Enter to save"
" Esc: cancel, Enter: set value"
)
} else {
Bsp::e(
Tui::bg(Self::BG_BROWSE, Tui::fg(Self::FG_BROWSE, " BROWSE ")),
" Q to exit, Arrows to select, Enter to edit"
" Q: exit, Arrows: select, Enter: edit"
)
}))),
Fill::x(Align::e(size)),
@ -58,11 +58,4 @@ impl Entry {
Self::ICON_UNKNOWN
}
}
//fn style (&self) -> Option<Style> {
//if self.is_dir() {
//None
//} else {
//Some(Style::default().bold())
//}
//}
}

View file

@ -55,19 +55,26 @@ impl<'a> TreeTable<'a> {
to.fill_bg(fill, Self::BG_CELL);
}
fn row_data (&self, to: &mut TuiOut, entry: &Entry, row: usize, x: &mut u16) {
for (column_index, Column { width, getter, .. }) in self.0.columns.0.iter().enumerate() {
let y = to.area().y();
for (column_index, Column {
width,
getter,
..
}) in self.0.columns.0.iter().enumerate() {
to.area[0] = *x;
if let Some((_edit_index, value)) = self.0.editing.as_ref()
if let Some((edit_index, value)) = self.0.editing.as_ref()
&& self.0.column == column_index
&& self.0.cursor == row
{
to.fill_bg([*x, to.area().y(), *width as u16, 1], Self::BG_EDIT);
to.fill_fg([*x, to.area().y(), *width as u16, 1], Self::FG_EDIT);
to.fill_bg([*x, y, *width as u16, 1], Self::BG_EDIT);
to.fill_fg([*x, y, *width as u16, 1], Self::FG_EDIT);
to.fill_reversed([*x + *edit_index as u16, y, 1, 1], true);
Content::render(&TrimStringRef(*width as u16, &value), to);
} else if let Some(value) = getter(entry) {
Content::render(&TrimStringRef(*width as u16, &value), to);
}
*x += *width as u16 + 1;
to.blit(&"", *x - 1, y, None);
}
}
}
@ -86,11 +93,7 @@ impl<T, G, S> Columns<T, G, S> {
for (index, Column { width, .. }) in self.0.iter().enumerate() {
let w = *width as u16 + 1;
if index == column {
if x > 0 {
return (x - 1, w + 1)
} else {
return (x, w)
}
} else {
x += w;
}