index_format
Biến này
set index_format='mfdate "%[%s]" "%4C %Z %[!%b %d %Y] %-17.17F (%3l) %s" |'
cùng với sửa đổi này được mfdate.c
trình bày trong câu trả lời này bởi người dùng 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;
}
hoạt động chính xác cho tôi mutt 1.6.1
và như bạn thấy không có vấn đề gì với việc %
đăng nhập vào chủ đề, nếu đây là vấn đề thực sự xảy ra:
Đây là phiên bản "chỉ hoạt động" ban đầu bởi vì sau khi xem xét kỹ hơn câu hỏi ban đầu của bạn, tôi không chắc đây có phải là điều bạn muốn không. Tuy nhiên, nếu đây là những gì bạn muốn cho tôi biết và chúng tôi sẽ nghĩ làm thế nào để làm cho nó tốt hơn.
CHỈNH SỬA :
Nó cũng có thể làm việc với sở thích của bạn 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;
}
CHỈNH SỬA :
Hãy để tôi giải thích cách nó hoạt động:
Có mfdate
2 đối số:
"%[%s]"
và:
"%%Z %%{%%Y %%b %%e %%H:%%M} %%?X?(%%X)& ? %%-22.22F %%.100s %%> %%5c"
Đối số đầu tiên là duy nhất time of the message
, như được mô tả trong
index_format
tài liệu trong .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
Trong trường hợp fmt
này được thay thế bằng %s
, vì như %s
là phương tiện The
number of seconds since the Epoch
như được giải thích trong man strftime
. Đối số đầu tiên được sử dụng để tính toán bao nhiêu tuổi được thông báo và những gì label: old
, recent
hoặctoday
nó nên có.
Đối số thứ hai là phần còn lại của index_format
biến. Nó chỉ được sử dụng mfdate
để in nhưng một phần bổ sung %
được thêm vào cuối printf
bởi vì như trong hướng dẫn sử dụng mutt :
Chuỗi trả về sẽ được sử dụng để hiển thị. Nếu chuỗi trả về kết thúc bằng%, nó sẽ được chuyển qua bộ định dạng lần thứ hai.
Mỗi cái %
được nhân đôi ở đây vì chúng tôi muốn chuyển một nghĩa đen %
sang định dạng thứ hai được thực hiện bởi mutt
.