Bu index_format
değ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.c
sunulan 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.1
ve 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:
mfdate
2 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 message
açı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ığı %s
gibi %s
araç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 Epoch
man strftime
old
recent
today
İkinci argüman değişkenin geri kalan kısmıdır index_format
. Sadece mfdate
baskı 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
.