이 index_format
변수
set index_format='mfdate "%[%s]" "%4C %Z %[!%b %d %Y] %-17.17F (%3l) %s" |'
이 답변 에 사용자 hop 이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"
첫 번째 인수는 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
인쇄에만 사용 되지만 mutt manual 에서 언급했듯이 %
끝에 추가됩니다 .printf
반환 된 문자열은 표시에 사용됩니다. 반환 된 문자열이 %로 끝나면 두 번째로 포맷터를 통과합니다.
에 의해 수행되는 두 번째 형식에 %
리터럴 %
을 전달하려고하기 때문에 모든 것이 여기에서 두 배가 됩니다 mutt
.