From 027513b0dd0f98dd01ebfad5ae56f96447efe597 Mon Sep 17 00:00:00 2001 From: "Steffen (Daode) Nurpmeso" Date: Fri, 30 Jun 2017 23:39:36 +0200 Subject: [PATCH] a_folder_info(): print "+[FOLDER]rest" if under folder (as applicable) --- folder.c | 47 +++++++++++++++++++++++++++-------------------- nail.h | 2 +- nailfuns.h | 2 +- strings.c | 2 +- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/folder.c b/folder.c index 9c86350c..ec28447a 100644 --- a/folder.c +++ b/folder.c @@ -54,9 +54,10 @@ static void a_folder_info(void); static bool_t _update_mailname(char const *name) /* TODO 2MUCH work, cache, prop of Object! */ { + char const *foldp; char *mailp, *dispp; - size_t i, j; - bool_t rv = TRU1; + size_t i, j, foldlen; + bool_t rv; NYD_ENTER; /* Don't realpath(3) if it's only an update request */ @@ -80,35 +81,41 @@ jdocopy: dispp = displayname; /* Don't display an absolute path but "+FOLDER" if under *folder* */ - /* C99 */{ - char const *folderp; - - if(*(folderp = n_folder_query()) != '\0'){ - i = strlen(folderp); - if(!strncmp(folderp, mailp, i)){ - mailp += i; - *dispp++ = '+'; - } - } - } + if(*(foldp = n_folder_query()) != '\0'){ + foldlen = strlen(foldp); + if(strncmp(foldp, mailp, foldlen)) + foldlen = 0; + }else + foldlen = 0; /* We want to see the name of the folder .. on the screen */ i = strlen(mailp); - if (i < sizeof(displayname) -1) - memcpy(dispp, mailp, i +1); - else { - rv = FAL0; + if(i < sizeof(displayname) - 3 -1){ + if(foldlen > 0){ + *dispp++ = '+'; + *dispp++ = '['; + memcpy(dispp, mailp, foldlen); + dispp += foldlen; + mailp += foldlen; + *dispp++ = ']'; + memcpy(dispp, mailp, i -= foldlen); + dispp[i] = '\0'; + }else + memcpy(dispp, mailp, i +1); + rv = TRU1; + }else{ /* Avoid disrupting multibyte sequences (if possible) */ #ifndef HAVE_C90AMEND1 - j = sizeof(displayname) / 3 - 1; + j = sizeof(displayname) / 3 - 3; i -= sizeof(displayname) - (1/* + */ + 3) - j; #else j = field_detect_clip(sizeof(displayname) / 3, mailp, i); i = j + __narrow_suffix(mailp + j, i - j, sizeof(displayname) - (1/* + */ + 3 + 1) - j); #endif - snprintf(dispp, sizeof(displayname), "%.*s...%s", - (int)j, mailp, mailp + i); + snprintf(dispp, sizeof(displayname), "%s%.*s...%s", + (foldlen > 0 ? "[+]" : ""), (int)j, mailp, mailp + i); + rv = FAL0; } n_PS_ROOT_BLOCK((ok_vset(mailbox_resolved, mailname), diff --git a/nail.h b/nail.h index 65ae5250..f1367418 100644 --- a/nail.h +++ b/nail.h @@ -2535,7 +2535,7 @@ VL si32_t n_pstate_ex_no; /* What backs $? n_EX_* TODO ..HACK ->64-bit */ VL int msgCount; /* Count of messages read in */ VL struct mailbox mb; /* Current mailbox */ VL char mailname[PATH_MAX]; /* Name of current file TODO URL/object*/ -VL char displayname[80 - 40]; /* Prettyfied for display TODO URL/obj*/ +VL char displayname[80 - 16]; /* Prettyfied for display TODO URL/obj*/ VL char prevfile[PATH_MAX]; /* Name of previous file TODO URL/obj */ VL off_t mailsize; /* Size of system mailbox */ VL struct message *dot; /* Pointer to current message */ diff --git a/nailfuns.h b/nailfuns.h index 8f75aa38..2fc26879 100644 --- a/nailfuns.h +++ b/nailfuns.h @@ -2144,7 +2144,7 @@ FL char * n_strsep(char **iolist, char sep, bool_t ignore_empty); FL void i_strcpy(char *dest, char const *src, size_t size); /* Is *as1* a valid prefix of *as2*? */ -FL int is_prefix(char const *as1, char const *as2); +FL bool_t is_prefix(char const *as1, char const *as2); /* Reverse solidus quote (" and \) v'alue, and return salloc()ed result */ FL char * string_quote(char const *v); diff --git a/strings.c b/strings.c index e34f649c..3ed372dc 100644 --- a/strings.c +++ b/strings.c @@ -232,7 +232,7 @@ i_strcpy(char *dest, char const *src, size_t size) NYD2_LEAVE; } -FL int +FL bool_t is_prefix(char const *as1, char const *as2) /* TODO arg order */ { char c; -- 2.11.4.GIT