这个index_format
变量
set index_format='mfdate "%[%s]" "%4C %Z %[!%b %d %Y] %-17.17F (%3l) %s" |'
以及用户跳跃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 EXIT_SUCCESS;
}
对于我来说,它正常工作,mutt 1.6.1
并且如您所见%
,如果这是真正的问题所在,那么签入主题没有任何问题:
这是最初的“正常工作”版本,因为仔细查看了您的原始问题后,我不确定这是否是您想要的。但是,如果这是你想要让我知道什么,我们会考虑如何更好地做到这一点。
编辑:
它也可以与您的首选一起使用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;
}
编辑:
让我解释一下它是如何工作的:
该mfdate
需要两个参数:
"%[%s]"
和:
"%%Z %%{%%Y %%b %%e %%H:%%M} %%?X?(%%X)& ? %%-22.22F %%.100s %%> %%5c"
第一个参数是only time of the message
,如
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
在这种情况下fmt
被替换为%s
,因为中的%s
方法The
number of seconds since the Epoch
如中所述man strftime
。第一个参数是用来计算出有老的消息是什么标签:old
,recent
或者today
它应该有。
第二个参数是index_format
变量的其余部分。它在使用mfdate
仅用于打印,但额外%
在末尾添加printf
因为它说傻子手册:
返回的字符串将用于显示。如果返回的字符串以%结尾,它将再次通过格式化程序。
%
此处每个元素都加倍,因为我们想将文字传递%
给所完成的第二种格式mutt
。