Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package dysk for openSUSE:Factory checked in 
at 2026-10-17 21:27:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dysk (Old)
 and      /work/SRC/openSUSE:Factory/.dysk.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dysk"

Sat Oct 17 21:27:15 2026 rev:17 rq:1385364 version:3.8.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/dysk/dysk.changes        2026-09-28 
10:49:21.730266626 +0200
+++ /work/SRC/openSUSE:Factory/.dysk.new.3698736/dysk.changes   2026-10-17 
21:27:35.051343051 +0200
@@ -1,0 +2,12 @@
+Sat Oct 17 07:22:19 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 3.8.0:
+  * read inodes on Mac/iokit (not very interesting for APFS) - Fix
+    #107
+  * no panic on --help when stdout is closed - Fix #123
+  * new use_bar and inodes_bar columns: bars without percentage -
+    Fix #116
+  * -c all still gives all information but no longer includes all
+    columns, redundant ones being stripped
+
+-------------------------------------------------------------------

Old:
----
  dysk-3.7.1.obscpio

New:
----
  dysk-3.8.0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ dysk.spec ++++++
--- /var/tmp/diff_new_pack.nRNQMP/_old  2026-10-17 21:27:36.740413618 +0200
+++ /var/tmp/diff_new_pack.nRNQMP/_new  2026-10-17 21:27:36.741413659 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           dysk
-Version:        3.7.1
+Version:        3.8.0
 Release:        0
 Summary:        Get information on filesystems, like df but better
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.nRNQMP/_old  2026-10-17 21:27:36.781415331 +0200
+++ /var/tmp/diff_new_pack.nRNQMP/_new  2026-10-17 21:27:36.785415498 +0200
@@ -4,7 +4,7 @@
     <param name="scm">git</param>
     <param name="exclude">.git</param>
     <param name="versionformat">@PARENT_TAG@</param>
-    <param name="revision">refs/tags/v3.7.1</param>
+    <param name="revision">refs/tags/v3.8.0</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>
   </service>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.nRNQMP/_old  2026-10-17 21:27:36.806416375 +0200
+++ /var/tmp/diff_new_pack.nRNQMP/_new  2026-10-17 21:27:36.810416542 +0200
@@ -3,6 +3,6 @@
                 <param name="url">https://github.com/Canop/dysk</param>
               <param 
name="changesrevision">b8c61ea5f565759b12785658a1c6a80f3b13722c</param></service><service
 name="tar_scm">
                 <param name="url">https://github.com/Canop/dysk.git</param>
-              <param 
name="changesrevision">557dd25174171fa9e364d99d672eb3d6cbcb89ac</param></service></servicedata>
+              <param 
name="changesrevision">ce437e13cfc3f02ce2fdb6d2a4aeb552c0a940eb</param></service></servicedata>
 (No newline at EOF)
 

++++++ dysk-3.7.1.obscpio -> dysk-3.8.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/CHANGELOG.md new/dysk-3.8.0/CHANGELOG.md
--- old/dysk-3.7.1/CHANGELOG.md 2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/CHANGELOG.md 2026-10-17 07:43:53.000000000 +0200
@@ -1,5 +1,8 @@
 ### next
 - read inodes on Mac/iokit (not very interesting for APFS) - Fix #107
+- no panic on `--help` when stdout is closed - Fix #123
+- new `use_bar` and `inodes_bar` columns: bars without percentage - Fix #116
+- `-c all` still gives all information but no longer includes all columns, 
redundant ones being stripped
 
 <a name="v3.7.1"></a>
 ### v3.7.1 - 2026/09/27
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/Cargo.lock new/dysk-3.8.0/Cargo.lock
--- old/dysk-3.7.1/Cargo.lock   2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/Cargo.lock   2026-10-17 07:43:53.000000000 +0200
@@ -97,9 +97,9 @@
 
 [[package]]
 name = "clap-help"
-version = "1.6.0"
+version = "1.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cba2aeb4586a460f68b52628fdbf7cdbc9af533288a64f09a6c59896a5a2f288"
+checksum = "a2273621d9a264d51a6e8c1db392ded0462d6b8f02ec2ae2ffa7fc7943d1f6f3"
 dependencies = [
  "clap",
  "termimad",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/cli/Cargo.toml 
new/dysk-3.8.0/cli/Cargo.toml
--- old/dysk-3.7.1/cli/Cargo.toml       2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/cli/Cargo.toml       2026-10-17 07:43:53.000000000 +0200
@@ -11,7 +11,7 @@
 [dependencies]
 bet = "1.0.4"
 clap = { version = "4.6", features = ["derive", "cargo"] }
-clap-help = "1.6"
+clap-help = "1.7"
 file-size = "1.0.3"
 #lfs-core = { git = "https://github.com/Canop/lfs-core.git";, branch = "smb" }
 #lfs-core = { path = "../../lfs-core" }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/cli/src/col.rs 
new/dysk-3.8.0/cli/src/col.rs
--- old/dysk-3.7.1/cli/src/col.rs       2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/cli/src/col.rs       2026-10-17 07:43:53.000000000 +0200
@@ -5,15 +5,21 @@
         cmp::Ordering,
         fmt,
         str::FromStr,
+        sync::LazyLock,
     },
     termimad::minimad::Alignment,
 };
 
+/// Tell whether a flag of a column definition is the one asked
+macro_rules! col_flag {
+    (is_default default) => { true };
+    (is_default redundant) => { false };
+    (is_redundant default) => { false };
+    (is_redundant redundant) => { true };
+}
+
 macro_rules! col_enum {
-    (@just_variant $variant:ident $discarded:ident) => {
-        Col::$variant
-    };
-    ($($variant:ident $name:literal $($alias:literal)* : $title:literal 
$($def:ident)*,)*) => {
+    ($($variant:ident $name:literal $($alias:literal)* : $title:literal 
$($flag:ident)*,)*) => {
         /// A column of the lfs table.
         #[derive(Debug, Clone, Copy, PartialEq)]
         pub enum Col {
@@ -22,11 +28,6 @@
         pub static ALL_COLS: &[Col] = &[
             $(Col::$variant,)*
         ];
-        pub static DEFAULT_COLS: &[Col] = &[
-            $(
-                $(col_enum!(@just_variant $variant $def),)*
-            )*
-        ];
         impl FromStr for Col {
             type Err = ParseColError;
             fn from_str(s: &str) -> Result<Self, ParseColError> {
@@ -73,17 +74,47 @@
                 }
             }
             pub fn is_default(self) -> bool {
-                DEFAULT_COLS.contains(&self)
+                match self {
+                    $(
+                        Self::$variant => false $(|| col_flag!(is_default 
$flag))*,
+                    )*
+                }
+            }
+            /// Whether the column only combines what other columns show,
+            /// in which case it's not part of the `all` set
+            pub fn is_redundant(self) -> bool {
+                match self {
+                    $(
+                        Self::$variant => false $(|| col_flag!(is_redundant 
$flag))*,
+                    )*
+                }
             }
         }
     };
 }
 
+pub static DEFAULT_COLS: LazyLock<Vec<Col>> = LazyLock::new(|| {
+    ALL_COLS
+        .iter()
+        .copied()
+        .filter(|col| col.is_default())
+        .collect()
+});
+
+/// The columns of the `all` set: all columns but the redundant ones
+pub static ALL_SET_COLS: LazyLock<Vec<Col>> = LazyLock::new(|| {
+    ALL_COLS
+        .iter()
+        .copied()
+        .filter(|col| !col.is_redundant())
+        .collect()
+});
+
 // definition of all columns and their names
 // in the --cols definition
 col_enum!(
     // syntax:
-    // Variant name [aliases]: title [default]
+    // Variant name [aliases]: title [default] [redundant]
     Id "id": "id",
     Dev "dev" "device" "device_id": "dev",
     Filesystem "fs" "filesystem": "filesystem" default,
@@ -92,14 +123,16 @@
     Remote "remote" "rem": "remote",
     Disk "disk" "dsk": "disk" default,
     Used "used": "used" default,
-    Use "use": "use" default,
+    Use "use": "use" default redundant,
     UsePercent "use_percent": "use%",
+    UseBar "use_bar" "bar": "use",
     Free "free": "free" default,
     FreePercent "free_percent": "free%",
     Size "size": "size" default,
     InodesUsed "inodes_used" "iused": "used inodes",
-    InodesUse "inodes" "ino" "inodes_use" "iuse": "inodes",
+    InodesUse "inodes" "ino" "inodes_use" "iuse": "inodes" redundant,
     InodesUsePercent "inodes_use_percent" "iuse_percent": "inodes%",
+    InodesBar "inodes_bar" "ibar": "inodes",
     InodesFree "inodes_free" "ifree": "free inodes",
     InodesCount "inodes_total" "inodes_count" "itotal": "inodes total",
     MountPoint "mount" "mount_point" "mp": "mount point" default,
@@ -130,12 +163,14 @@
             Self::Used => Alignment::Right,
             Self::Use => Alignment::Right,
             Self::UsePercent => Alignment::Right,
+            Self::UseBar => Alignment::Right,
             Self::Free => Alignment::Right,
             Self::FreePercent => Alignment::Right,
             Self::Size => Alignment::Right,
             Self::InodesUsed => Alignment::Right,
             Self::InodesUse => Alignment::Right,
             Self::InodesUsePercent => Alignment::Right,
+            Self::InodesBar => Alignment::Right,
             Self::InodesFree => Alignment::Right,
             Self::InodesCount => Alignment::Right,
             Self::MountPoint => Alignment::Left,
@@ -157,12 +192,14 @@
             Self::Used => "size used",
             Self::Use => "usage graphical view",
             Self::UsePercent => "percentage of blocks used",
+            Self::UseBar => "usage bar, without percentage",
             Self::Free => "free bytes",
             Self::FreePercent => "percentage of free blocks",
             Self::Size => "total size",
             Self::InodesUsed => "number of inodes used",
             Self::InodesUse => "graphical view of inodes usage",
             Self::InodesUsePercent => "percentage of inodes used",
+            Self::InodesBar => "inodes usage bar, without percentage",
             Self::InodesFree => "number of free inodes",
             Self::InodesCount => "total count of inodes",
             Self::MountPoint => "mount point",
@@ -205,15 +242,17 @@
                 (None, Some(_)) => Ordering::Less,
                 (None, None) => Ordering::Equal,
             },
-            Self::Use | Self::UsePercent => |a: &Mount, b: &Mount| match 
(&a.stats(), &b.stats()) {
-                // the 'use' column shows the percentage of used blocks, so it 
makes sense
-                // to sort by use_share for it
-                // SAFETY: use_share() doesn't return NaN
-                (Some(a), Some(b)) => 
a.use_share().partial_cmp(&b.use_share()).unwrap(),
-                (Some(_), None) => Ordering::Greater,
-                (None, Some(_)) => Ordering::Less,
-                (None, None) => Ordering::Equal,
-            },
+            Self::Use | Self::UsePercent | Self::UseBar => {
+                |a: &Mount, b: &Mount| match (&a.stats(), &b.stats()) {
+                    // the 'use' column shows the percentage of used blocks, 
so it makes sense
+                    // to sort by use_share for it
+                    // SAFETY: use_share() doesn't return NaN
+                    (Some(a), Some(b)) => 
a.use_share().partial_cmp(&b.use_share()).unwrap(),
+                    (Some(_), None) => Ordering::Greater,
+                    (None, Some(_)) => Ordering::Less,
+                    (None, None) => Ordering::Equal,
+                }
+            }
             Self::Free => |a: &Mount, b: &Mount| match (&a.stats(), 
&b.stats()) {
                 (Some(a), Some(b)) => a.available().cmp(&b.available()),
                 (Some(_), None) => Ordering::Greater,
@@ -238,7 +277,7 @@
                 (None, Some(_)) => Ordering::Less,
                 (None, None) => Ordering::Equal,
             },
-            Self::InodesUsePercent | Self::InodesUse => {
+            Self::InodesUsePercent | Self::InodesUse | Self::InodesBar => {
                 |a: &Mount, b: &Mount| match (&a.inodes(), &b.inodes()) {
                     // SAFETY: use_share() doesn't return NaN
                     (Some(a), Some(b)) => 
a.use_share().partial_cmp(&b.use_share()).unwrap(),
@@ -298,12 +337,14 @@
             Self::Used => Order::Asc,
             Self::Use => Order::Desc,
             Self::UsePercent => Order::Asc,
+            Self::UseBar => Order::Desc,
             Self::Free => Order::Asc,
             Self::FreePercent => Order::Desc,
             Self::Size => Order::Desc,
             Self::InodesUsed => Order::Asc,
             Self::InodesUse => Order::Asc,
             Self::InodesUsePercent => Order::Asc,
+            Self::InodesBar => Order::Asc,
             Self::InodesFree => Order::Asc,
             Self::InodesCount => Order::Asc,
             Self::MountPoint => Order::Asc,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/cli/src/col_expr.rs 
new/dysk-3.8.0/cli/src/col_expr.rs
--- old/dysk-3.7.1/cli/src/col_expr.rs  2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/cli/src/col_expr.rs  2026-10-17 07:43:53.000000000 +0200
@@ -119,7 +119,7 @@
                 mount.stats().as_ref().map(|s| s.used()),
                 parse_integer(&self.value)?,
             ),
-            Col::Use | Col::UsePercent => self.operator.eval_option(
+            Col::Use | Col::UsePercent | Col::UseBar => 
self.operator.eval_option(
                 mount.stats().as_ref().map(|s| s.use_share()),
                 parse_float(&self.value)?,
             ),
@@ -135,7 +135,7 @@
                 mount.inodes().as_ref().map(|i| i.used()),
                 parse_integer(&self.value)?,
             ),
-            Col::InodesUse | Col::InodesUsePercent => 
self.operator.eval_option(
+            Col::InodesUse | Col::InodesUsePercent | Col::InodesBar => 
self.operator.eval_option(
                 mount.inodes().as_ref().map(|i| i.use_share()),
                 parse_float(&self.value)?,
             ),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/cli/src/cols.rs 
new/dysk-3.8.0/cli/src/cols.rs
--- old/dysk-3.7.1/cli/src/cols.rs      2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/cli/src/cols.rs      2026-10-17 07:43:53.000000000 +0200
@@ -58,7 +58,7 @@
         &mut self,
         col_set: &[Col],
     ) {
-        if self.0 == ALL_COLS {
+        if self.0 == *ALL_SET_COLS {
             for &col in col_set {
                 self.add(col);
             }
@@ -128,7 +128,7 @@
                     } else {
                         // if we add all to something, it means the already
                         // present one are meant to be first
-                        for &col in ALL_COLS {
+                        for &col in ALL_SET_COLS.iter() {
                             if !cols.contains(col) {
                                 cols.add(col);
                             }
@@ -137,10 +137,10 @@
                 }
                 "default" => {
                     if negative {
-                        cols.remove_set(DEFAULT_COLS);
+                        cols.remove_set(&DEFAULT_COLS);
                         negative = false;
                     } else {
-                        cols.add_set(DEFAULT_COLS);
+                        cols.add_set(&DEFAULT_COLS);
                     }
                 }
                 _ => {
@@ -156,10 +156,10 @@
         }
         match tokens.last().map(|s| s.as_ref()) {
             Some("-") => {
-                cols.remove_set(DEFAULT_COLS);
+                cols.remove_set(&DEFAULT_COLS);
             }
             Some("+") => {
-                cols.add_set(DEFAULT_COLS);
+                cols.add_set(&DEFAULT_COLS);
             }
             _ => {}
         }
@@ -198,7 +198,7 @@
         check("dev,free,used", vec![Dev, Free, Used]);
         check("dev+free + used", vec![Dev, Free, Used]);
         check("  dev   free used ", vec![Dev, Free, Used]);
-        check("all", ALL_COLS);
+        check("all", ALL_SET_COLS.clone());
     }
 
     #[test]
@@ -212,13 +212,14 @@
                 Remote,
                 Disk,
                 Used,
-                Use,
                 UsePercent,
+                UseBar,
                 Free,
                 FreePercent,
                 Size,
                 InodesUsed,
                 InodesUsePercent,
+                InodesBar,
                 InodesFree,
                 InodesCount,
                 MountPoint,
@@ -238,10 +239,11 @@
                 Label,
                 Remote,
                 UsePercent,
+                UseBar,
                 FreePercent,
                 InodesUsed,
-                InodesUse,
                 InodesUsePercent,
+                InodesBar,
                 InodesFree,
                 InodesCount,
                 Uuid,
@@ -259,10 +261,11 @@
                 Label,
                 Remote,
                 UsePercent,
+                UseBar,
                 FreePercent,
                 InodesUsed,
-                InodesUse,
                 InodesUsePercent,
+                InodesBar,
                 InodesFree,
                 InodesCount,
                 Uuid,
@@ -290,14 +293,14 @@
                 Remote,
                 Disk,
                 Used,
-                Use,
                 UsePercent,
+                UseBar,
                 Free,
                 FreePercent,
                 Size,
                 InodesUsed,
-                InodesUse,
                 InodesUsePercent,
+                InodesBar,
                 InodesFree,
                 InodesCount,
                 MountPoint,
@@ -316,14 +319,14 @@
                 Type,
                 Remote,
                 Used,
-                Use,
                 UsePercent,
+                UseBar,
                 Free,
                 FreePercent,
                 Size,
                 InodesUsed,
-                InodesUse,
                 InodesUsePercent,
+                InodesBar,
                 InodesFree,
                 InodesCount,
                 MountPoint,
@@ -337,19 +340,19 @@
 
     #[test]
     fn cols_from_default() {
-        check("", DEFAULT_COLS);
+        check("", DEFAULT_COLS.clone());
         check(
             "-dev", // no impact as dev isn't in defaults
-            DEFAULT_COLS,
+            DEFAULT_COLS.clone(),
         );
-        check("default", DEFAULT_COLS);
+        check("default", DEFAULT_COLS.clone());
         check(
             "-default", // not really useful
             vec![],
         );
         check(
             "default-dev", // no impact as dev isn't in defaults
-            DEFAULT_COLS,
+            DEFAULT_COLS.clone(),
         );
         check(
             "+dev",
@@ -371,10 +374,11 @@
                 Label,
                 Remote,
                 UsePercent,
+                UseBar,
                 FreePercent,
                 InodesUsed,
-                InodesUse,
                 InodesUsePercent,
+                InodesBar,
                 InodesFree,
                 InodesCount,
                 Uuid,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/cli/src/csv.rs 
new/dysk-3.8.0/cli/src/csv.rs
--- old/dysk-3.7.1/cli/src/csv.rs       2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/cli/src/csv.rs       2026-10-17 07:43:53.000000000 +0200
@@ -81,7 +81,7 @@
                 Col::Remote => csv.cell(if mount.is_remote() { "yes" } else { 
"no" }),
                 Col::Disk => csv.cell_opt(mount.disk.as_ref().map(|d| 
d.disk_type())),
                 Col::Used => csv.cell_opt(mount.stats().map(|s| 
units.fmt(s.used()))),
-                Col::Use => csv.cell_opt(mount.stats().map(|s| s.use_share())),
+                Col::Use | Col::UseBar => csv.cell_opt(mount.stats().map(|s| 
s.use_share())),
                 Col::UsePercent => csv.cell_opt(
                     mount
                         .stats()
@@ -95,7 +95,9 @@
                 ),
                 Col::Size => csv.cell_opt(mount.stats().map(|s| 
units.fmt(s.size()))),
                 Col::InodesUsed => csv.cell_opt(mount.inodes().map(|i| 
i.used())),
-                Col::InodesUse => csv.cell_opt(mount.inodes().map(|i| 
i.use_share())),
+                Col::InodesUse | Col::InodesBar => {
+                    csv.cell_opt(mount.inodes().map(|i| i.use_share()))
+                }
                 Col::InodesUsePercent => csv.cell_opt(
                     mount
                         .inodes()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/cli/src/help.rs 
new/dysk-3.8.0/cli/src/help.rs
--- old/dysk-3.7.1/cli/src/help.rs      2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/cli/src/help.rs      2026-10-17 07:43:53.000000000 +0200
@@ -1,6 +1,10 @@
 use {
     crate::args::*,
     clap::CommandFactory,
+    std::io::{
+        self,
+        Write,
+    },
 };
 
 static INTRO_TEMPLATE: &str = "
@@ -49,7 +53,10 @@
     ),
 ];
 
-pub fn print(ascii: bool) {
+pub fn write<W: Write>(
+    w: &mut W,
+    ascii: bool,
+) -> io::Result<()> {
     let mut printer = clap_help::Printer::new(Args::command())
         .with("introduction", INTRO_TEMPLATE)
         .without("author");
@@ -67,7 +74,7 @@
             .set("example-cmd", example.cmd)
             .set_md("example-comments", example.comments);
     }
-    printer.print_help();
+    printer.write_help(w)
 }
 
 struct Example {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/cli/src/lib.rs 
new/dysk-3.8.0/cli/src/lib.rs
--- old/dysk-3.7.1/cli/src/lib.rs       2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/cli/src/lib.rs       2026-10-17 07:43:53.000000000 +0200
@@ -41,16 +41,16 @@
         return writeln!(&mut w, "dysk {}", env!("CARGO_PKG_VERSION"));
     }
     if args.help {
-        help::print(args.ascii);
+        help::write(&mut w, args.ascii)?;
         if args.color() {
-            csi_reset();
+            csi_reset(&mut w)?;
         }
         return Ok(());
     }
     if args.list_cols {
         list_cols::write(&mut w, args.color(), args.ascii)?;
         if args.color() {
-            csi_reset();
+            csi_reset(&mut w)?;
         }
         return Ok(());
     }
@@ -111,12 +111,12 @@
     }
     table::write(&mut w, &mounts, args.color(), &args)?;
     if args.color() {
-        csi_reset();
+        csi_reset(&mut w)?;
     }
     Ok(())
 }
 
 /// output a Reset CSI sequence
-fn csi_reset() {
-    print!("\u{1b}[0m");
+fn csi_reset<W: Write>(w: &mut W) -> io::Result<()> {
+    write!(w, "\u{1b}[0m")
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/cli/src/table.rs 
new/dysk-3.8.0/cli/src/table.rs
--- old/dysk-3.7.1/cli/src/table.rs     2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/cli/src/table.rs     2026-10-17 07:43:53.000000000 +0200
@@ -42,7 +42,12 @@
     let units = args.units;
     let mut expander = OwningTemplateExpander::new();
     expander.set_default("");
-    let use_col_width = compute_use_col_width(args);
+    let mut use_content_width = 3 + args.bar_width; // 3 for eg "97%"
+    if args.bar_width > BAR_WIDTH_SPACE_THRESHOLD {
+        use_content_width += 1;
+    }
+    let use_col_width = compute_error_width(args, use_content_width);
+    let bar_col_width = compute_error_width(args, args.bar_width);
     for mount in mounts {
         let sub = expander
             .sub("rows")
@@ -101,11 +106,16 @@
             }
         } else if mount.is_timeout() {
             sub.set("use-error", string_fitting_cols("timeout", 
use_col_width));
+            sub.set("bar-error", string_fitting_cols("timeout", 
bar_col_width));
         } else if mount.is_unreachable() {
             sub.set(
                 "use-error",
                 string_fitting_cols("unreachable", use_col_width),
             );
+            sub.set(
+                "bar-error",
+                string_fitting_cols("unreachable", bar_col_width),
+            );
         }
     }
     let mut skin = if color {
@@ -133,6 +143,7 @@
                     Col::Used => "~~${used}~~",
                     Col::Use => 
"~~${use-percents}~~${use-space}${bar}~~${use-error}~~",
                     Col::UsePercent => "~~${use-percents}~~",
+                    Col::UseBar => "${bar}~~${bar-error}~~",
                     Col::Free => "*${free}*",
                     Col::FreePercent => "*${free-percents}*",
                     Col::Size => "**${size}**",
@@ -140,6 +151,7 @@
                     Col::InodesUsed => "~~${iused}~~",
                     Col::InodesUse => "~~${iuse-percents}~~ ${ibar}",
                     Col::InodesUsePercent => "~~${iuse-percents}~~",
+                    Col::InodesBar => "${ibar}",
                     Col::InodesCount => "**${inodes}**",
                     Col::MountPoint => "${mount-point}",
                     Col::Uuid => "${uuid}",
@@ -157,13 +169,12 @@
 }
 
 /// Use settings and heuristics to determine the max width to be used by 
errors messages
-/// in the "use" column, so that they don't break the layout too much.
-fn compute_use_col_width(args: &Args) -> usize {
+/// in the "use" and "use_bar" columns, so that they don't break the layout 
too much.
+fn compute_error_width(
+    args: &Args,
+    width: usize,
+) -> usize {
     const MAX: usize = 20; // basically no limit
-    let mut width = 3 + args.bar_width; // 3 for eg "97%"
-    if args.bar_width > BAR_WIDTH_SPACE_THRESHOLD {
-        width += 1;
-    }
     if width < MAX {
         if args.cols.len() < 3 {
             return MAX;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.7.1/website/src/table.md 
new/dysk-3.8.0/website/src/table.md
--- old/dysk-3.7.1/website/src/table.md 2026-09-27 11:51:17.000000000 +0200
+++ new/dysk-3.8.0/website/src/table.md 2026-10-17 07:43:53.000000000 +0200
@@ -20,6 +20,7 @@
 used | ✓ | cumulated size of the occupied blocks
 use | ✓ | graphical view of the use share
 use_percent |  | percentage of occupied blocks
+use_bar |  | graphical view of the use share, without percentage
 free | ✓ | cumulated size of the available blocks
 free_percent |  | percentage of available blocks
 size | ✓ | size of the volume
@@ -27,6 +28,7 @@
 inodesused |  | inodes used
 inodes |  | inodes use share, graphical
 inodes_use_percent |  | inodes use share, in percents
+inodes_bar |  | inodes use share, graphical, without percentage
 inodescount |  | total number of inodes in the filesystem
 mount | ✓ | mounting path
 uuid |  | filesystem's UUID
@@ -43,7 +45,7 @@
 
 ![screen](img/dysk_c=default.png)
 
-With `-c all`, you may see all available columns, but that's normally too much 
for convenience:
+With `-c all`, you may see all available columns (except `use` and `inodes`, 
whose content is already in `use_percent`+`use_bar` and 
`inodes_use_percent`+`inodes_bar`), but that's normally too much for 
convenience:
 
 ![screen](img/dysk_c=all.png)
 

++++++ dysk.obsinfo ++++++
--- /var/tmp/diff_new_pack.nRNQMP/_old  2026-10-17 21:27:37.018425233 +0200
+++ /var/tmp/diff_new_pack.nRNQMP/_new  2026-10-17 21:27:37.022425400 +0200
@@ -1,5 +1,5 @@
 name: dysk
-version: 3.7.1
-mtime: 1790502677
-commit: 557dd25174171fa9e364d99d672eb3d6cbcb89ac
+version: 3.8.0
+mtime: 1792215833
+commit: ce437e13cfc3f02ce2fdb6d2a4aeb552c0a940eb
 

++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/dysk/vendor.tar.zst 
/work/SRC/openSUSE:Factory/.dysk.new.3698736/vendor.tar.zst differ: char 7, 
line 1

Reply via email to