Bu index_formatdeğişken
set index_format='mfdate "%[%s]" "%4C %Z %[!%b %d %Y] %-17.17F (%3l) %s" |'
ile birlikte bu değiştirilmiş kullanıcı hop tarafından mfdate.csunulan cevap :
#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;
}
benim için doğru çalışıyor mutt 1.6.1ve gördüğünüz gibi %konudaki sorunla ilgili herhangi bir sorun yok , eğer gerçek sorun buysa:
Bu ilk "sadece çalışıyor" versiyonu çünkü orijinal sorunuza daha yakından baktıktan sonra, bunun ne istediğinizden emin değilim. Ancak, bu takdirde olduğunu bana bildirin istediğini ve daha iyi yapmak için nasıl düşüneceğim.
DÜZENLE :
Ayrıca tercih ettiğiniz ile çalışabilir 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;
}

DÜZENLE :
Nasıl çalıştığını açıklayayım:
mfdate2 argüman alır:
"%[%s]"
ve:
"%%Z %%{%%Y %%b %%e %%H:%%M} %%?X?(%%X)& ? %%-22.22F %%.100s %%> %%5c"
İlk argüman yalnızca aşağıdaki belgelerde time of the messageaçıklandığı gibidir
:index_format.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
Bu durumda fmt, yerine açıklandığı %sgibi %saraçlarla değiştirilir . İlk argüman ne kadar eski mesajdır ve hangi etiketi hesaplamak için kullanılır: , ya da sahip olmalıdır.The
number of seconds since the Epochman strftimeoldrecenttoday
İkinci argüman değişkenin geri kalan kısmıdır index_format
. Sadece mfdatebaskı için kullanılır, ancak mutt kılavuzunda dediği gibi bir ekstra %eklenir :printf
Döndürülen dize görüntüleme için kullanılacaktır. Döndürülen dize% ile biterse, ikinci kez biçimlendiriciden geçirilir.
%Burada her şey iki katına çıkar, çünkü biz %tarafından yapılan ikinci biçimlendirmeye değişmez bir şekilde geçmek istiyoruz mutt.