この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
2つの引数を取ります。
"%[%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
それが持っている必要があります。
2番目の引数は、index_format
変数の残りの部分です。これmfdate
は印刷のみに使用されますが、muttマニュアルに記載されているように%
、最後に追加が追加されます。printf
返される文字列は表示に使用されます。返された文字列が%で終わる場合、フォーマッタを再度通過します。
によって行われる2番目のフォーマットに%
リテラル%
を渡したいため、ここではすべてが2倍になりますmutt
。