Diese index_format
Variable
set index_format='mfdate "%[%s]" "%4C %Z %[!%b %d %Y] %-17.17F (%3l) %s" |'
zusammen mit dieser modifizierten mfdate.c
in dieser Antwort von Benutzer hop vorgestellt :
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define DAY (time_t)86400
#define YEAR (time_t)31556926
int main(int argc, const char *argv[]) {
time_t current_time;
time_t message_time;
const char *old = "old";
char *recent = "recent";
char *today = "today";
const char *format;
current_time = time(NULL);
if (argc != 3) {
printf("Usage: %s format\n", argv[0]);
return EXIT_FAILURE;
}
format = argv[2];
message_time = atoi(argv[1]);
if ((message_time/YEAR) < (current_time/YEAR)) {
printf("%s,%s", old, format);
} else if ((message_time/DAY) < (current_time/DAY)) {
printf("%s,%s", recent, format);
} else {
printf("%s,%s", today, format);
}
return EXIT_SUCCESS;
}
Funktioniert bei mir einwandfrei mutt 1.6.1
und wie Sie sehen gibt es keine Probleme mit dem %
Anmelden im Betreff, wenn dies das eigentliche Problem ist:
Dies ist die erste "nur funktionierende" Version, denn nachdem ich mir Ihre ursprüngliche Frage genauer angesehen habe, bin ich mir nicht sicher, ob dies das ist, was Sie wollen. Wenn Sie dies jedoch möchten, lassen Sie es mich wissen und wir überlegen, wie wir es verbessern können.
EDIT :
Es kann auch mit Ihrem bevorzugten arbeiten index_format
:
set index_format='mfdate "%[%s]" "%%Z %%{%%Y %%b %%e %%H:%%M} %%?X?(%%X)& ? %%-22.22F %%.100s %%> %%5c" |'
mfdate.c:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define DAY (time_t)86400
#define YEAR (time_t)31556926
int main(int argc, const char *argv[]) {
time_t current_time;
time_t message_time;
const char *old = "old";
char *recent = "recent";
char *today = "today";
const char *format;
current_time = time(NULL);
if (argc != 3) {
printf("Usage: %s format\n", argv[0]);
return EXIT_FAILURE;
}
format = argv[2];
message_time = atoi(argv[1]);
if ((message_time/YEAR) < (current_time/YEAR)) {
printf("%s,%s%%", old, format);
} else if ((message_time/DAY) < (current_time/DAY)) {
printf("%s,%s%%", recent, format);
} else {
printf("%s,%s%%", today, format);
}
return 0;
}
EDIT :
Lassen Sie mich erklären, wie es funktioniert:
Das mfdate
braucht 2 Argumente:
"%[%s]"
und:
"%%Z %%{%%Y %%b %%e %%H:%%M} %%?X?(%%X)& ? %%-22.22F %%.100s %%> %%5c"
Das erste Argument ist nur time of the message
, wie in der
index_format
Dokumentation in beschrieben .muttrc
:
# %[fmt] the date and time of the message is converted to the local
# time zone, and ``fmt'' is expanded by the library function
# ``strftime''; a leading bang disables locales
In diesem Fall fmt
wird ersetzt durch %s
, weil als %s
Mittel The
number of seconds since the Epoch
wie in erläutert man strftime
. Das erste Argument wird verwendet , wie alt zu berechnen die Nachricht ist und was Etikett: old
, recent
oder today
es haben sollte.
Das zweite Argument ist der verbleibende Teil der index_format
Variablen. Es wird mfdate
nur zum Drucken verwendet, aber %
am Ende von wird ein zusätzliches hinzugefügt, printf
weil, wie es im Handbuch von mutt steht :
Die zurückgegebene Zeichenfolge wird zur Anzeige verwendet. Wenn der zurückgegebene String mit% endet, wird er ein zweites Mal durch den Formatierer geleitet.
Jeder %
wird hier verdoppelt, weil wir ein Literal %
an die zweite Formatierung übergeben möchten, die von vorgenommen wird mutt
.