Changeset 775:7ec02537311f for browser.c

Show
Ignore:
Timestamp:
1999-01-22 10:02:47 (10 years ago)
Author:
Thomas Roessler <roessler@…>
Branch:
HEAD
Message:

Enable tagging in the file browser.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • browser.c

    r703 r775  
    4141  char *name; 
    4242  char *desc; 
     43  short tagged; 
    4344}; 
    4445 
     
    321322  state->entrymax = 256; 
    322323  state->entry = (struct folder_file *) safe_malloc (sizeof (struct folder_file) * state->entrymax); 
     324  memset (state->entry, 0, sizeof (struct folder_file) * state->entrymax); 
    323325  if (menu) 
    324326    menu->data = state->entry; 
     
    429431void folder_entry (char *s, size_t slen, MUTTMENU *menu, int num) 
    430432{ 
    431   snprintf (s, slen, "%2d %s", num + 1, ((struct folder_file *) menu->data)[num].desc); 
     433  snprintf (s, slen, "%2d %c %s",  
     434            num + 1,  
     435            ((struct folder_file *) menu->data)[num].tagged ? '*' : ' ', 
     436            ((struct folder_file *) menu->data)[num].desc); 
    432437} 
    433438 
     
    458463} 
    459464 
    460 void mutt_select_file (char *f, size_t flen, int buffy) 
     465int file_tag (MUTTMENU *menu, int n) 
     466{ 
     467  struct folder_file *ff = &(((struct folder_file *)menu->data)[n]); 
     468  if (S_ISDIR (ff->mode) || (S_ISLNK (ff->mode) && link_is_dir (ff->name))) 
     469  { 
     470    mutt_error _("Can't attach a directory!"); 
     471    return 0; 
     472  } 
     473   
     474  return ((ff->tagged = !ff->tagged) ? 1 : -1); 
     475} 
     476 
     477void _mutt_select_file (char *f, size_t flen, int buffy, 
     478                       int multiple, char ***files, int *numfiles) 
    461479{ 
    462480  char buf[_POSIX_PATH_MAX]; 
     
    523541  menu->title = title; 
    524542  menu->data = state.entry; 
     543  if (multiple) 
     544    menu->tag = file_tag; 
    525545 
    526546  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_FOLDER, FolderHelp); 
     
    625645      case OP_EXIT: 
    626646 
     647        if (multiple) 
     648        { 
     649          char **tfiles; 
     650          int i, j; 
     651 
     652          if (menu->tagged) 
     653          { 
     654            *numfiles = menu->tagged; 
     655            tfiles = safe_malloc (*numfiles * sizeof (char *)); 
     656            for (i = 0, j = 0; i < state.entrylen; i++) 
     657            { 
     658              struct folder_file ff = state.entry[i]; 
     659              char full[_POSIX_PATH_MAX]; 
     660              if (ff.tagged) 
     661              { 
     662                snprintf (full, sizeof (full), "%s/%s", LastDir, ff.name); 
     663                mutt_expand_path (full, sizeof (full)); 
     664                tfiles[j++] = safe_strdup (full); 
     665              } 
     666            } 
     667            *files = tfiles; 
     668          } 
     669          else if (f[0]) /* no tagged entries. return selected entry */ 
     670          { 
     671            *numfiles = 1; 
     672            tfiles = safe_malloc (*numfiles * sizeof (char *)); 
     673            mutt_expand_path (f, flen); 
     674            tfiles[0] = safe_strdup (f); 
     675            *files = tfiles; 
     676          } 
     677        } 
     678 
    627679        destroy_state (&state); 
    628680        mutt_menuDestroy (&menu);