Description: Improve the "pretty size" display (bytes size display).
 Patch written on 2020-04-24.
Author: Vincent Lefevre <vincent@vinc17.net>
Last-Update: 2022-06-09

diff --git a/PATCHES b/PATCHES
index e69de29b..5991f2fd 100644
--- a/PATCHES
+++ b/PATCHES
@@ -0,0 +1,1 @@
+patch-20220609.vl.pretty_size.1
diff --git a/muttlib.c b/muttlib.c
index 5e2080fe..b081949c 100644
--- a/muttlib.c
+++ b/muttlib.c
@@ -1145,35 +1145,43 @@ void mutt_pretty_size (char *s, size_t len, LOFF_T n)
 {
   if (option (OPTSIZESHOWBYTES) && (n < 1024))
     snprintf (s, len, "%d", (int)n);
-  else if (n == 0)
-    strfcpy (s,
-             option (OPTSIZEUNITSONLEFT) ? "K0" : "0K",
-             len);
-  else if (option (OPTSIZESHOWFRACTIONS) && (n < 10189)) /* 0.1K - 9.9K */
-  {
-    snprintf (s, len,
-              option (OPTSIZEUNITSONLEFT) ? "K%3.1f" : "%3.1fK",
-              (n < 103) ? 0.1 : n / 1024.0);
-  }
-  else if (!option (OPTSIZESHOWMB) || (n < 1023949)) /* 10K - 999K */
-  {
-    /* 51 is magic which causes 10189/10240 to be rounded up to 10 */
-    snprintf (s, len,
-              option (OPTSIZEUNITSONLEFT) ? ("K" OFF_T_FMT) : (OFF_T_FMT "K"),
-              (n + 51) / 1024);
-  }
-  else if (option (OPTSIZESHOWFRACTIONS) && (n < 10433332)) /* 1.0M - 9.9M */
-  {
-    snprintf (s, len,
-              option (OPTSIZEUNITSONLEFT) ? "M%3.1f" : "%3.1fM",
-              n / 1048576.0);
-  }
-  else /* 10M+ */
+  else
   {
-    /* (10433332 + 52428) / 1048576 = 10 */
-    snprintf (s, len,
-              option (OPTSIZEUNITSONLEFT) ?  ("M" OFF_T_FMT) : (OFF_T_FMT "M"),
-              (n + 52428) / 1048576);
+    const char *fmt[3][2] =
+      {
+        { "%3.1f",  OFF_T_FMT },
+        { "K%3.1f", "K" OFF_T_FMT },
+        { "%3.1fK", OFF_T_FMT "K" },
+      };
+    int i = !option (OPTSIZESHOWBYTES) ? 0 :
+      option (OPTSIZEUNITSONLEFT) ? 1 : 2;
+
+    if (n == 0)
+    {
+      snprintf (s, len, fmt[i][1], (LOFF_T) 0);
+    }
+    else if (option (OPTSIZESHOWFRACTIONS) && (n < 10189)) /* 0.1K - 9.9K */
+    {
+      snprintf (s, len, fmt[i][0], (n < 103) ? 0.1 : n / 1024.0);
+    }
+    else if (!option (OPTSIZESHOWMB) || (n < 1023949)) /* 10K - 999K */
+    {
+      /* 51 is magic which causes 10189/10240 to be rounded up to 10 */
+      snprintf (s, len, fmt[i][1], (n + 51) / 1024);
+    }
+    else if (option (OPTSIZESHOWFRACTIONS) && (n < 10433332)) /* 1.0M - 9.9M */
+    {
+      snprintf (s, len,
+                option (OPTSIZEUNITSONLEFT) ? "M%3.1f" : "%3.1fM",
+                n / 1048576.0);
+    }
+    else /* 10M+ */
+    {
+      /* (10433332 + 52428) / 1048576 = 10 */
+      snprintf (s, len,
+                option (OPTSIZEUNITSONLEFT) ?  ("M" OFF_T_FMT) : (OFF_T_FMT "M"),
+                (n + 52428) / 1048576);
+    }
   }
 }
 
diff --git a/status.c b/status.c
index 107a739f..8549a4cd 100644
--- a/status.c
+++ b/status.c
@@ -147,8 +147,13 @@ status_format_str (char *buf, size_t buflen, size_t col, int cols, char op, cons
     case 'l':
       if (!optional)
       {
+	int show_mb = option (OPTSIZESHOWMB);
+
 	snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+	set_option (OPTSIZESHOWMB);
 	mutt_pretty_size (tmp, sizeof (tmp), Context ? Context->size : 0);
+	if (!show_mb)
+	  unset_option (OPTSIZESHOWMB);
 	snprintf (buf, buflen, fmt, tmp);
       }
       else if (!Context || !Context->size)
