Show
Ignore:
Timestamp:
1999-08-15 04:43:03 (9 years ago)
Author:
Thomas Roessler <roessler@…>
Branch:
HEAD
Message:

Various changes added over the last week:

- $delete_untag
- creation of "application/pgp" messages
- an attempt to fix prepare.
- Browser format changes

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • browser.c

    r1169 r1205  
    4848typedef struct folder_t 
    4949{ 
    50   const char *name; 
    51   const struct stat *f; 
    52   int new; 
     50  struct folder_file *ff; 
     51  int num; 
    5352} FOLDER; 
    5453 
     
    6463    safe_free ((void **) &((state->entry)[c].name)); 
    6564    safe_free ((void **) &((state->entry)[c].desc)); 
     65    safe_free ((void **) &((state->entry)[c].st)); 
    6666  } 
    6767#ifdef USE_IMAP 
     
    147147  switch (op) 
    148148  { 
     149    case 'C': 
     150      snprintf (tmp, sizeof (tmp), "%%%sd", fmt); 
     151      snprintf (dest, destlen, tmp, folder->num + 1); 
     152      break; 
     153       
    149154    case 'd': 
    150       if (folder->f != NULL) 
     155      if (folder->ff->st != NULL) 
    151156      { 
    152157        tnow = time (NULL); 
    153         t_fmt = tnow - folder->f->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d  %Y"; 
    154         strftime (date, sizeof (date), t_fmt, localtime (&folder->f->st_mtime)); 
     158        t_fmt = tnow - folder->ff->st->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d  %Y"; 
     159        strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->st->st_mtime)); 
    155160        snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 
    156161        snprintf (dest, destlen, tmp, date); 
     
    162167      } 
    163168      break; 
     169       
    164170    case 'f': 
    165       strfcpy (fn, folder->name, sizeof(fn)); 
    166       if (folder->f != NULL) 
    167       { 
    168         strcat (fn, S_ISLNK (folder->f->st_mode) ? "@" :  
    169                 (S_ISDIR (folder->f->st_mode) ? "/" :  
    170                  ((folder->f->st_mode & S_IXUSR) != 0 ? "*" : ""))); 
     171      strfcpy (fn, folder->ff->name, sizeof(fn)); 
     172      if (folder->ff->st != NULL) 
     173      { 
     174        strcat (fn, S_ISLNK (folder->ff->st->st_mode) ? "@" :  
     175                (S_ISDIR (folder->ff->st->st_mode) ? "/" :  
     176                 ((folder->ff->st->st_mode & S_IXUSR) != 0 ? "*" : ""))); 
    171177      } 
    172178      snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 
    173179      snprintf (dest, destlen, tmp, fn); 
    174180      break; 
     181       
    175182    case 'F': 
    176       if (folder->f != NULL) 
     183      if (folder->ff->st != NULL) 
    177184      { 
    178185        sprintf (permission, "%c%c%c%c%c%c%c%c%c%c", 
    179                  S_ISDIR(folder->f->st_mode) ? 'd' : (S_ISLNK(folder->f->st_mode) ? 'l' : '-'), 
    180                  (folder->f->st_mode & S_IRUSR) != 0 ? 'r': '-', 
    181                  (folder->f->st_mode & S_IWUSR) != 0 ? 'w' : '-', 
    182                  (folder->f->st_mode & S_ISUID) != 0 ? 's' : (folder->f->st_mode & S_IXUSR) != 0 ? 'x': '-', 
    183                  (folder->f->st_mode & S_IRGRP) != 0 ? 'r' : '-', 
    184                  (folder->f->st_mode & S_IWGRP) != 0 ? 'w' : '-', 
    185                  (folder->f->st_mode & S_ISGID) != 0 ? 's' : (folder->f->st_mode & S_IXGRP) != 0 ? 'x': '-', 
    186                  (folder->f->st_mode & S_IROTH) != 0 ? 'r' : '-', 
    187                  (folder->f->st_mode & S_IWOTH) != 0 ? 'w' : '-', 
    188                  (folder->f->st_mode & S_ISVTX) != 0 ? 't' : (folder->f->st_mode & S_IXOTH) != 0 ? 'x': '-'); 
     186            S_ISDIR(folder->ff->st->st_mode) ? 'd' : (S_ISLNK(folder->ff->st->st_mode) ? 'l' : '-'), 
     187            (folder->ff->st->st_mode & S_IRUSR) != 0 ? 'r': '-', 
     188            (folder->ff->st->st_mode & S_IWUSR) != 0 ? 'w' : '-', 
     189            (folder->ff->st->st_mode & S_ISUID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXUSR) != 0 ? 'x': '-', 
     190            (folder->ff->st->st_mode & S_IRGRP) != 0 ? 'r' : '-', 
     191            (folder->ff->st->st_mode & S_IWGRP) != 0 ? 'w' : '-', 
     192            (folder->ff->st->st_mode & S_ISGID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXGRP) != 0 ? 'x': '-', 
     193            (folder->ff->st->st_mode & S_IROTH) != 0 ? 'r' : '-', 
     194            (folder->ff->st->st_mode & S_IWOTH) != 0 ? 'w' : '-', 
     195            (folder->ff->st->st_mode & S_ISVTX) != 0 ? 't' : (folder->ff->st->st_mode & S_IXOTH) != 0 ? 'x': '-'); 
    189196        snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 
    190197        snprintf (dest, destlen, tmp, permission); 
     
    193200      { 
    194201#ifdef USE_IMAP 
    195         if (strchr(folder->name, '{')) 
     202        if (strchr(folder->ff->name, '{')) 
    196203        { 
    197204          snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 
     
    201208      } 
    202209      break; 
     210       
    203211    case 'g': 
    204       if (folder->f != NULL) 
    205       { 
    206         if ((gr = getgrgid (folder->f->st_gid))) 
     212      if (folder->ff->st != NULL) 
     213      { 
     214        if ((gr = getgrgid (folder->ff->st->st_gid))) 
    207215        { 
    208216          snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 
     
    212220        { 
    213221          snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 
    214           snprintf (dest, destlen, tmp, folder->f->st_gid); 
     222          snprintf (dest, destlen, tmp, folder->ff->st->st_gid); 
    215223        } 
    216224      } 
     
    221229      } 
    222230      break; 
     231       
    223232    case 'l': 
    224       if (folder->f != NULL) 
     233      if (folder->ff->st != NULL) 
    225234      { 
    226235        snprintf (tmp, sizeof (tmp), "%%%sd", fmt); 
    227         snprintf (dest, destlen, tmp, folder->f->st_nlink); 
     236        snprintf (dest, destlen, tmp, folder->ff->st->st_nlink); 
    228237      } 
    229238      else 
     
    233242      } 
    234243      break; 
     244       
    235245    case 'N': 
    236246      snprintf (tmp, sizeof (tmp), "%%%sc", fmt); 
    237       snprintf (dest, destlen, tmp, folder->new ? 'N' : ' '); 
    238       break; 
     247      snprintf (dest, destlen, tmp, folder->ff->is_new ? 'N' : ' '); 
     248      break; 
     249       
    239250    case 's': 
    240       if (folder->f != NULL) 
     251      if (folder->ff->st != NULL) 
    241252      { 
    242253        snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 
    243         snprintf (dest, destlen, tmp, (long) folder->f->st_size); 
     254        snprintf (dest, destlen, tmp, (long) folder->ff->st->st_size); 
    244255      } 
    245256      else 
     
    249260      } 
    250261      break; 
     262       
     263    case 't': 
     264      snprintf (tmp, sizeof (tmp), "%%%sc", fmt); 
     265      snprintf (dest, destlen, tmp, folder->ff->tagged ? '*' : ' '); 
     266      break; 
     267       
    251268    case 'u': 
    252       if (folder->f != NULL) 
    253       { 
    254         if ((pw = getpwuid (folder->f->st_uid))) 
     269      if (folder->ff->st != NULL) 
     270      { 
     271        if ((pw = getpwuid (folder->ff->st->st_uid))) 
    255272        { 
    256273          snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 
     
    260277        { 
    261278          snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 
    262           snprintf (dest, destlen, tmp, folder->f->st_uid); 
     279          snprintf (dest, destlen, tmp, folder->ff->st->st_uid); 
    263280        } 
    264281      } 
     
    269286      } 
    270287      break; 
     288       
     289    default: 
     290      snprintf (tmp, sizeof (tmp), "%%%sc", fmt); 
     291      snprintf (dest, destlen, tmp, op); 
     292      break; 
    271293  } 
    272294  return (src); 
     
    277299{ 
    278300  char buffer[_POSIX_PATH_MAX + SHORT_STRING]; 
    279   FOLDER folder; 
    280  
    281   folder.name = name; 
    282   folder.f = s; 
    283   folder.new = new; 
    284   mutt_FormatString (buffer, sizeof (buffer), NONULL(FolderFormat), 
    285                      folder_format_str, (unsigned long) &folder, 
    286                      M_FORMAT_ARROWCURSOR); 
    287301 
    288302  if (state->entrylen == state->entrymax) 
     
    297311  if (s != NULL) 
    298312  { 
    299   (state->entry)[state->entrylen].mode = s->st_mode; 
    300   (state->entry)[state->entrylen].mtime = s->st_mtime; 
    301   (state->entry)[state->entrylen].size = s->st_size; 
    302   } 
     313    (state->entry)[state->entrylen].mode = s->st_mode; 
     314    (state->entry)[state->entrylen].mtime = s->st_mtime; 
     315    (state->entry)[state->entrylen].size = s->st_size; 
     316     
     317    (state->entry)[state->entrylen].st = safe_malloc (sizeof (struct stat)); 
     318    memcpy ((state->entry)[state->entrylen].st, s, sizeof (struct stat)); 
     319  } 
     320 
     321  (state->entry)[state->entrylen].is_new = new; 
    303322  (state->entry)[state->entrylen].name = safe_strdup (name); 
    304323  (state->entry)[state->entrylen].desc = safe_strdup (buffer); 
     
    424443void folder_entry (char *s, size_t slen, MUTTMENU *menu, int num) 
    425444{ 
    426   snprintf (s, slen, "%2d %c %s",  
    427             num + 1,  
    428             ((struct folder_file *) menu->data)[num].tagged ? '*' : ' ', 
    429             ((struct folder_file *) menu->data)[num].desc); 
     445  FOLDER folder; 
     446 
     447  folder.ff = &((struct folder_file *) menu->data)[num]; 
     448  folder.num = num; 
     449   
     450  mutt_FormatString (s, slen, NONULL(FolderFormat), folder_format_str,  
     451      (unsigned long) &folder, M_FORMAT_ARROWCURSOR); 
    430452} 
    431453