From 66a74a5fe341648b390de333ade9f031f37f3ed1 Mon Sep 17 00:00:00 2001 From: Meudwy Date: Tue, 25 Jul 2023 14:28:09 +0100 Subject: [PATCH] mdirs: add Maildir profile key When `mdirs` is executed without any arguments, look for the `Maildir` key in the profile and use that instead (if set). --- GNUmakefile | 8 ++++---- man/mblaze-profile.5 | 4 ++++ man/mdirs.1 | 22 ++++++++++++++++++++-- mdirs.c | 41 ++++++++++++++++++++++++++++++++++++++--- 4 files changed, 66 insertions(+), 9 deletions(-) diff --git a/GNUmakefile b/GNUmakefile index 89cb7794..d3c081ed 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 fe583095..d9aaad5c 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 44ffae40..2dd2ea1e 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 5f49906f..a3cec16f 100644 --- a/mdirs.c +++ b/mdirs.c @@ -3,8 +3,10 @@ #include #include +#include #include #include +#include #include #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 NULL; + + if (!(maildir = blaze822_hdr(config, "maildir"))) + return NULL; + + 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 @@ main(int argc, char *argv[]) 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");