+1

I'm shipping a patch very close to this one in Gentoo's Mutt for a very
long time.

Thanks,
Fabian

On 18-06-2020 11:39:03 +0200, Vincent Lefevre wrote:
> Another patch I like very much is Rocco's colored progress bar patch:
> http://marc.info/?l=mutt-dev&m=123730077818672
> 
> Updated version attached.
> 
> -- 
> Vincent Lefèvre <vinc...@vinc17.net> - Web: <https://www.vinc17.net/>
> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)

> diff --git a/PATCHES b/PATCHES
> index e69de29b..d19ab9a2 100644
> --- a/PATCHES
> +++ b/PATCHES
> @@ -0,0 +1 @@
> +patch-20200424.pdmef.progress.vl.1
> diff --git a/color.c b/color.c
> index c5fc9ce2..e495f1a8 100644
> --- a/color.c
> +++ b/color.c
> @@ -95,6 +95,7 @@ static const struct mapping_t Fields[] =
>    { "underline",     MT_COLOR_UNDERLINE },
>    { "index",         MT_COLOR_INDEX },
>    { "prompt",                MT_COLOR_PROMPT },
> +  { "progress",              MT_COLOR_PROGRESS },
>  #ifdef USE_SIDEBAR
>    { "sidebar_divider",       MT_COLOR_DIVIDER },
>    { "sidebar_flagged",       MT_COLOR_FLAGGED },
> diff --git a/curs_lib.c b/curs_lib.c
> index 92eda9b1..251d0583 100644
> --- a/curs_lib.c
> +++ b/curs_lib.c
> @@ -654,6 +654,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];
> @@ -706,14 +752,14 @@ 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);
>      }
> diff --git a/doc/manual.xml.head b/doc/manual.xml.head
> index 631692aa..e17ffa07 100644
> --- a/doc/manual.xml.head
> +++ b/doc/manual.xml.head
> @@ -3080,6 +3080,7 @@ When set, color is applied only to the exact text 
> matched by
>  <listitem><para>message (informational messages)</para></listitem>
>  <listitem><para>normal</para></listitem>
>  <listitem><para>prompt</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 f21e0eab..fc2fba07 100644
> --- a/mutt_curses.h
> +++ b/mutt_curses.h
> @@ -127,6 +127,7 @@ enum
>    MT_COLOR_UNDERLINE,
>    MT_COLOR_INDEX,
>    MT_COLOR_PROMPT,
> +  MT_COLOR_PROGRESS,
>  #ifdef USE_SIDEBAR
>    MT_COLOR_DIVIDER,
>    MT_COLOR_FLAGGED,


-- 
Fabian Groffen
Gentoo on a different level

Attachment: signature.asc
Description: PGP signature

Reply via email to