9f8e498c8bd1451922689725d5d96acd6aff04c8 — Louis Solofrizzo 2 months ago 9454558 master
sidebar: Force utf8 prettiness

Signed-off-by: Louis Solofrizzo <lsolofrizzo@online.net>
2 files changed, 48 insertions(+), 3 deletions(-)

M README.md
M sidebar.c
M README.md => README.md +18 -0
@@ 20,6 20,24 @@ NeoMutt was created when Richard Russon (@FlatCap) took all the old Mutt patches,
  sorted through them, fixed them up and documented them.
  
+ ## My patch
+ 
+ My patch do add a fancy sidebar menu, which I feel is better than the original
+ one. I'm not planning on upstreaming this, since it's pretty much the ugliest
+ code in the world. I'll try to keep up to date with the upstream if people are
+ planning on using it.
+ 
+ ### Configuration
+ 
+     # Sidebar Patch --------------------------------------
+     set sidebar_format = "%B %?N?%N?"
+     set sidebar_visible = yes
+     set sidebar_width   = 30
+     set sidebar_short_path = yes
+ 
+ ![Preview](https://i.imgur.com/N7QYU1y.png)
+ 
+ 
  ## What Features does NeoMutt have?
  
  | Name                 | Description

M sidebar.c => sidebar.c +30 -3
@@ 275,8 275,8 @@ if (w < width)
    {
      /* Pad with spaces */
-     memset(buf + s, ' ', width - w);
-     buf[s + width - w] = '\0';
+     memset(buf + s, ' ', width - w - 6);
+     buf[s + width - w - 6] = '\0';
    }
    else if (w > width)
    {


@@ 821,6 821,8 @@ {
    struct SbEntry *entry = NULL;
    struct Mailbox *m = NULL;
+   char           *title = NULL;
+ 
    if (TopIndex < 0)
      return;
  


@@ 950,8 952,33 @@ }
      }
      char str[256];
+     size_t z = strlen(entry->mailbox->realpath);
+     size_t j;
+ 
+     for (; z > 0 && entry->mailbox->realpath[z] != '/'; z--)
+         ;
+ 
+     for (j = z - 1; j > 0 && entry->mailbox->realpath[j] != '/'; j--)
+         ;
+ 
+     entry->mailbox->realpath[z] = 0;
+ 
+     if (title == NULL || strcmp(entry->mailbox->realpath + j + 1, title))
+     {
+         title = strdup(entry->mailbox->realpath + j + 1);
+         mutt_window_printf("%s", entry->mailbox->realpath + j + 1);
+ 
+         row++;
+         mutt_window_move(MuttSidebarWindow, row, 0);
+     }
+ 
+     entry->mailbox->realpath[z] = '/';
+ 
      make_sidebar_entry(str, sizeof(str), w, sidebar_folder_name, entry);
-     mutt_window_printf("%s", str);
+     if (entryidx + 1 == EntryCount || strncmp(entry->mailbox->realpath + j + 1, Entries[entryidx + 1]->mailbox->realpath + j + 1, z - j))
+         mutt_window_printf("  └─ %s", str);
+     else
+         mutt_window_printf("  ├─ %s", str);
      mutt_buffer_pool_release(&short_folder_name);
      row++;
    }