Ta index_format
zmienna
set index_format='mfdate "%[%s]" "%4C %Z %[!%b %d %Y] %-17.17F (%3l) %s" |'
razem z tym zmodyfikowanym mfdate.c
prezentowane w tej odpowiedzi przez użytkownika hop :
#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;
}
działa dla mnie poprawnie mutt 1.6.1
i jak widzisz, nie ma problemów z %
logowaniem się w temacie, jeśli o to właśnie chodziło:
Jest to początkowa „tylko działająca” wersja, ponieważ po bliższym przyjrzeniu się pierwotnemu pytaniu nie jestem pewien, czy tego właśnie chcesz. Jednakże, jeśli to jest to, co chcesz dać mi znać i będziemy myśleć, jak zrobić to lepiej.
EDYCJA :
Może również działać z twoimi preferowanymi 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;
}
EDYCJA :
Pozwól mi wyjaśnić, jak to działa:
Przyjmuje mfdate
2 argumenty:
"%[%s]"
i:
"%%Z %%{%%Y %%b %%e %%H:%%M} %%?X?(%%X)& ? %%-22.22F %%.100s %%> %%5c"
Pierwszy argument jest tylko time of the message
opisany w
index_format
dokumentacji w .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
W tym przypadku fmt
jest zastąpiony przez %s
, ponieważ jako %s
środki The
number of seconds since the Epoch
wyjaśnione w man strftime
. Pierwszy argument jest używany do obliczenia jak stary wiadomość jest i co etykietę: old
, recent
lub today
powinien on mieć.
Drugi argument to pozostała część index_format
zmiennej. Jest używany mfdate
tylko do drukowania, ale %
na końcu dodaje się dodatkowy, printf
ponieważ, jak mówi w podręczniku mutt :
Zwrócony ciąg zostanie użyty do wyświetlenia. Jeśli zwrócony ciąg kończy się na%, zostanie przekazany przez formatyzator po raz drugi.
Wszystko %
jest tutaj podwojone, ponieważ chcemy przekazać literał %
do drugiego formatowania wykonanego przez mutt
.