diff -ubr mutt-1.3.28.orig/init.c mutt-1.3.28/init.c --- mutt-1.3.28.orig/init.c Mon Feb 11 10:58:54 2002 +++ mutt-1.3.28/init.c Sat Mar 29 22:32:49 2003 @@ -1295,6 +1312,42 @@ return (source_rc (path, err)); } +int mutt_parse_cd(BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + + mutt_extract_token (buf, s, 0); + if (MoreArgs(s)) + { + strfcpy(err->data, _("too many arguments"), err->dsize); + return -1; + } + if (!buf->data[0]) + strfcpy(buf->data, "~/", buf->dsize); + + mutt_expand_path(buf->data, buf->dsize); + if (chdir(buf->data) < 0) { + if (errno == ENOTDIR) { + snprintf(err->data, err->dsize, _("%s is not a directory"), buf->data); + return -1; + } + snprintf(err->data, err->dsize, _("Error running \"%s\"!"), "chdir()"); + return -1; + } + + return 0; +} + +int mutt_parse_pwd(BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + if (!getcwd(err->data, err->dsize)) { + strfcpy(err->data, _("Out of memory!"), err->dsize); + return -1; + } + + return -1; +} + + /* line command to execute token scratch buffer to be used by parser. caller should free diff -ubr mutt-1.3.28.orig/init.h mutt-1.3.28/init.h --- mutt-1.3.28.orig/init.h Thu Feb 28 09:24:13 2002 +++ mutt-1.3.28/init.h Sat Mar 29 22:33:39 2003 @@ -2459,6 +2497,7 @@ { "auto_view", parse_list, UL &AutoViewList }, { "alternative_order", parse_list, UL &AlternativeOrderList}, { "bind", mutt_parse_bind, 0 }, + { "cd", mutt_parse_cd, 0 }, { "charset-hook", mutt_parse_hook, M_CHARSETHOOK }, #ifdef HAVE_COLOR { "color", mutt_parse_color, 0 }, @@ -2482,6 +2526,7 @@ { "pgp-hook", mutt_parse_hook, M_PGPHOOK }, #endif /* HAVE_PGP */ { "push", mutt_parse_push, 0 }, + { "pwd", mutt_parse_pwd, 0 }, { "reset", parse_set, M_SET_RESET }, { "save-hook", mutt_parse_hook, M_SAVEHOOK }, { "score", mutt_parse_score, 0 }, diff -ubr mutt-1.3.28.orig/protos.h mutt-1.3.28/protos.h --- mutt-1.3.28.orig/protos.h Wed Jan 16 21:44:25 2002 +++ mutt-1.3.28/protos.h Sat Mar 29 22:32:49 2003 @@ -336,6 +340,9 @@ pid_t mutt_create_filter (const char *, FILE **, FILE **, FILE **); pid_t mutt_create_filter_fd (const char *, FILE **, FILE **, FILE **, int, int, int); + +int mutt_parse_cd(BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_pwd(BUFFER *, BUFFER *, unsigned long, BUFFER *); ADDRESS *alias_reverse_lookup (ADDRESS *);