#include <errno.h>
static const char *Mailbox_is_read_only = N_("Mailbox is read-only.");
+static char LastSaveFolder[_POSIX_PATH_MAX] = "";
#define CHECK_READONLY if (Context->readonly) \
{\
{ NULL }
};
+int mutt_extract_path(char *filename, char *path)
+{
+ char *tmp=safe_malloc(sizeof(char) * _POSIX_PATH_MAX);
+ char *help_ptr;
+
+ help_ptr = tmp;
+
+ while(*filename != '\0')
+ {
+ if (*filename == '/')
+ {
+ *help_ptr++=*filename++;
+ *help_ptr++='\0';
+ strcat(path, tmp);
+ help_ptr = tmp;
+ }
+ *help_ptr++=*filename++;
+ }
+ safe_free((void **) &tmp);
+
+ return 0;
+}
+
void mutt_update_tree (ATTACHPTR **idx, short idxlen)
{
char buf[STRING];
{
char *prompt;
char buf[_POSIX_PATH_MAX], tfile[_POSIX_PATH_MAX];
+ char path[_POSIX_PATH_MAX]="";
int is_message;
int append = 0;
int rc;
+ int ret = -1;
if (body->filename)
{
else
buf[0] = 0;
- prompt = _("Save to file: ");
+ prompt = _("Save to file ('#' for last used folder): ");
while (prompt)
{
- if (mutt_get_field (prompt, buf, sizeof (buf), M_FILE | M_CLEAR) != 0
- || !buf[0])
+ ret = mutt_get_field (prompt, buf, sizeof (buf), M_FILE | M_CLEAR | M_LASTFOLDER);
+ if (((ret != 0) && (ret != 2)) || (!buf[0] && ret != 2))
return -1;
+
+ if (ret == 2)
+ {
+ char tmpbuf[_POSIX_PATH_MAX];
+ snprintf(tmpbuf,sizeof(tmpbuf),"%s%s",LastSaveFolder,buf);
+ strfcpy (buf, tmpbuf, sizeof (buf));
+ ret = mutt_get_field (_("Save to file: ")
+ , buf, sizeof (buf), M_FILE);
+ if ((ret != 0) || (!buf[0]))
+ return -1;
+ }
+ else
+ {
+ mutt_extract_path(buf,path);
+ strfcpy (LastSaveFolder, path, sizeof (LastSaveFolder));
+ }
prompt = NULL;
mutt_expand_path (buf, sizeof (buf));