diff options
-rw-r--r-- | GNUmakefile | 8 | ||||
-rw-r--r-- | man/mblaze-profile.5 | 4 | ||||
-rw-r--r-- | man/mdirs.1 | 22 | ||||
-rw-r--r-- | mdirs.c | 41 |
4 files changed, 66 insertions, 9 deletions
diff --git a/GNUmakefile b/GNUmakefile index 89cb779..d3c081e 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -26,10 +26,10 @@ SCRIPT = mcolor mcom mless mmkdir mquote museragent all: $(ALL) museragent $(ALL) : % : %.o -maddr magrep mdeliver mexport mflag mflow mgenmid mhdr mpick mscan msed mshow \ - msort mthread : blaze822.o mymemmem.o mytimegm.o -maddr magrep mdeliver mexport mflag mgenmid mhdr minc mlist mpick mscan msed \ - mseq mshow msort mthread : seq.o slurp.o mystrverscmp.o +maddr magrep mdeliver mdirs mexport mflag mflow mgenmid mhdr mpick mscan msed \ + mshow msort mthread : blaze822.o mymemmem.o mytimegm.o +maddr magrep mdeliver mdirs mexport mflag mgenmid mhdr minc mlist mpick mscan \ + msed mseq mshow msort mthread : seq.o slurp.o mystrverscmp.o maddr magrep mflow mhdr mpick mscan mshow : rfc2047.o magrep mflow mhdr mshow : rfc2045.o mshow : filter.o safe_u8putstr.o rfc2231.o pipeto.o diff --git a/man/mblaze-profile.5 b/man/mblaze-profile.5 index fe58309..d9aaad5 100644 --- a/man/mblaze-profile.5 +++ b/man/mblaze-profile.5 @@ -49,6 +49,10 @@ The fully qualified domain name used for .Li Message\&-Id\&: generation in .Xr mgenmid 1 . +.It Li Maildir\&: +If set, +.Xr mdirs 1 +will use this maildir when no directories are supplied. .It Li Outbox\&: If set, .Xr mcom 1 diff --git a/man/mdirs.1 b/man/mdirs.1 index 44ffae4..f564803 100644 --- a/man/mdirs.1 +++ b/man/mdirs.1 @@ -1,4 +1,4 @@ -.Dd January 22, 2020 +.Dd July 25, 2023 .Dt MDIRS 1 .Os .Sh NAME @@ -17,6 +17,14 @@ for maildir folders and prints them, separated by newlines. .Pp +If +.Ar dirs +is not present then use +.Sq Li Maildir\&: +from +.Pa "${MBLAZE:-$HOME/.mblaze}/profile" +.Pq if set . +.Pp To .Nm , a maildir folder is a directory containing @@ -36,10 +44,20 @@ Print folders separated by a NUL character. .It Fl a Traverse into all subfolders, without considering the maildir++ name conventions. .El +.Sh ENVIRONMENT +.Bl -tag -width Ds +.It Ev MBLAZE +Directory containing mblaze configuration. +.Po +Default: +.Pa $HOME/.mblaze +.Pc +.El .Sh EXIT STATUS .Ex -std .Sh SEE ALSO -.Xr find 1 +.Xr find 1 , +.Xr mblaze-profile 5 .Sh AUTHORS .An Leah Neukirchen Aq Mt leah@vuxu.org .Sh LICENSE diff --git a/mdirs.c b/mdirs.c index 5f49906..89ebab5 100644 --- a/mdirs.c +++ b/mdirs.c @@ -3,8 +3,10 @@ #include <dirent.h> #include <limits.h> +#include <pwd.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <unistd.h> #include "blaze822.h" @@ -72,6 +74,33 @@ mdirs(char *fpath) closedir(dir); } +char * +profile_maildir() +{ + char *f = blaze822_home_file("profile"); + struct message *config = blaze822(f); + char *maildir; + static char path[PATH_MAX]; + + if (!config) + return 0; + + if (!(maildir = blaze822_hdr(config, "maildir"))) + return 0; + + if (strncmp(maildir, "~/", 2) == 0) { + const char *home = getenv("HOME"); + if (!home) { + struct passwd *pw = getpwuid(getuid()); + home = pw ? pw->pw_dir : "/dev/null/homeless"; + } + snprintf(path, sizeof path, "%s/%s", home, maildir+2); + maildir = path; + } + + return maildir; +} + int main(int argc, char *argv[]) { @@ -86,11 +115,17 @@ usage: exit(1); } - if (argc == optind) - goto usage; - xpledge("stdio rpath", ""); + if (argc == optind) { + char *maildir = profile_maildir(); + if (maildir) { + mdirs(maildir); + return 0; + } + goto usage; + } + char toplevel[PATH_MAX]; if (!getcwd(toplevel, sizeof toplevel)) { perror("mdirs: getcwd"); |