Cette index_format
variable
set index_format='mfdate "%[%s]" "%4C %Z %[!%b %d %Y] %-17.17F (%3l) %s" |'
avec cette modification mfdate.c
présentée dans cette réponse par l'utilisateur 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;
}
fonctionne correctement pour moi mutt 1.6.1
et comme vous le voyez, il n'y a pas de problème de %
connexion dans le sujet, si c'est le vrai problème:
Il s'agit de la version initiale "qui fonctionne" car après avoir examiné de plus près votre question d' origine, je ne sais pas si c'est ce que vous voulez. Cependant, si c'est ce que vous voulez, faites le moi savoir et nous réfléchirons à la façon de l'améliorer.
MODIFIER :
Il peut également fonctionner avec votre préféré 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;
}
MODIFIER :
Permettez-moi d'expliquer comment cela fonctionne:
Le mfdate
prend 2 arguments:
"%[%s]"
et:
"%%Z %%{%%Y %%b %%e %%H:%%M} %%?X?(%%X)& ? %%-22.22F %%.100s %%> %%5c"
Le premier argument est uniquement time of the message
, comme décrit dans la
index_format
documentation dans .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
Dans ce cas, fmt
est remplacé par %s
, car comme %s
moyen The
number of seconds since the Epoch
comme expliqué dans man strftime
. Le premier argument est utilisé pour calculer l'âge du message est et ce que l' étiquette: old
, recent
ou today
il devrait avoir.
Le deuxième argument est la partie restante de la index_format
variable. Il est utilisé mfdate
uniquement pour l'impression, mais un supplément %
est ajouté à la fin printf
car, comme il est indiqué dans le manuel mutt :
La chaîne retournée sera utilisée pour l'affichage. Si la chaîne retournée se termine par%, elle sera passée par le formateur une seconde fois.
Tout %
est doublé ici parce que nous voulons passer un littéral %
au deuxième formatage effectué par mutt
.