summaryrefslogtreecommitdiff
blob: 67629a00e5b1fb8cd99e117ba1bc7cead4339ec8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
Adds the Gentoo specific progress bar that is used in Gentoo's Mutt guide.
Proposed upstreams in https://github.com/karelzak/mutt-kz/pull/23
diff --git a/PATCHES b/PATCHES
index e69de29..785edd0 100644
--- a/PATCHES
+++ b/PATCHES
@@ -0,0 +1 @@
+patch-1.5.20hg.pdmef.progress.vl.2
diff --git a/color.c b/color.c
index 9a3a552..f7db847 100644
--- a/color.c
+++ b/color.c
@@ -96,6 +96,7 @@ static const struct mapping_t Fields[] =
   { "sidebar_new",	MT_COLOR_NEW },
   { "sidebar_flagged",	MT_COLOR_FLAGGED },
   { "sidebar",		MT_COLOR_SIDEBAR },
+  { "progress",		MT_COLOR_PROGRESS },
   { NULL,		0 }
 };
 
diff --git a/curs_lib.c b/curs_lib.c
index e5a0113..c5ee2e6 100644
--- a/curs_lib.c
+++ b/curs_lib.c
@@ -390,6 +390,52 @@ void mutt_progress_init (progress_t* progress, const char *msg,
   mutt_progress_update (progress, 0, 0);
 }
 
+static void message_bar (int percent, const char *fmt, ...)
+{
+  va_list ap;
+  char buf[STRING], buf2[STRING];
+  int w = percent * COLS / 100;
+  size_t l;
+
+  va_start (ap, fmt);
+  vsnprintf (buf, sizeof (buf), fmt, ap);
+  l = mutt_strwidth (buf);
+  va_end (ap);
+
+  mutt_format_string(buf2, sizeof (buf2),
+    0, COLS-2, FMT_LEFT, 0, buf, sizeof (buf), 0);
+
+  move (LINES - 1, 0);
+
+  if (l < w)
+  {
+    SETCOLOR(MT_COLOR_PROGRESS);
+    addstr (buf2);
+    w -= l;
+    while (w--)
+      addch(' ');
+    SETCOLOR(MT_COLOR_NORMAL);
+    clrtoeol ();
+    mutt_refresh();
+  }
+  else
+  {
+    size_t bw;
+    char ch;
+    int off = mutt_wstr_trunc (buf2, sizeof (buf2), w, &bw);
+
+    ch = buf2[off];
+    buf2[off] = 0;
+    SETCOLOR(MT_COLOR_PROGRESS);
+    addstr (buf2);
+    buf2[off] = ch;
+    SETCOLOR(MT_COLOR_NORMAL);
+    addstr (&buf2[off]);
+    clrtoeol ();
+    mutt_refresh();
+  }
+}
+
 void mutt_progress_update (progress_t* progress, long pos, int percent)
 {
   char posstr[SHORT_STRING];
@@ -440,16 +486,16 @@ void mutt_progress_update (progress_t* progress, long pos, int percent)
 
     if (progress->size > 0)
     {
-      mutt_message ("%s %s/%s (%d%%)", progress->msg, posstr, progress->sizestr,
-		    percent > 0 ? percent :
-		   	(int) (100.0 * (double) progress->pos / progress->size));
+      message_bar (percent > 0 ? percent : (int) (100.0 * (double) progress->pos / progress->size),
+        "%s %s/%s (%d%%)", progress->msg, posstr, progress->sizestr,
+        percent > 0 ? percent : (int) (100.0 * (double) progress->pos / progress->size));
     }
     else
     {
       if (percent > 0)
-	mutt_message ("%s %s (%d%%)", progress->msg, posstr, percent);
+        message_bar (percent, "%s %s (%d%%)", progress->msg, posstr, percent);
       else
-	mutt_message ("%s %s", progress->msg, posstr);
+        mutt_message ("%s %s", progress->msg, posstr);
     }
   }
 
diff --git a/doc/manual.xml.head b/doc/manual.xml.head
index 0d95886..025af03 100644
--- a/doc/manual.xml.head
+++ b/doc/manual.xml.head
@@ -2641,6 +2641,7 @@ specify one or the other).
 <listitem><para>markers (the <quote>+</quote> markers at the beginning of wrapped lines in the pager)</para></listitem>
 <listitem><para>message (informational messages)</para></listitem>
 <listitem><para>normal</para></listitem>
+<listitem><para>progress (visual progress bar)</para></listitem>
 <listitem><para>quoted (text matching <link linkend="quote-regexp">$quote_regexp</link> in the body of a message)</para></listitem>
 <listitem><para>quoted1, quoted2, ..., quoted<emphasis>N</emphasis> (higher levels of quoting)</para></listitem>
 <listitem><para>search (highlighting of words in the pager)</para></listitem>
diff --git a/mutt_curses.h b/mutt_curses.h
index cb1acf2..b915fd7 100644
--- a/mutt_curses.h
+++ b/mutt_curses.h
@@ -128,6 +128,7 @@ enum
   MT_COLOR_SIDEBAR,
   MT_COLOR_UNDERLINE,
   MT_COLOR_INDEX,
+  MT_COLOR_PROGRESS,
   MT_COLOR_NEW,
   MT_COLOR_FLAGGED,
   MT_COLOR_MAX