index_format
Variabel ini
set index_format='mfdate "%[%s]" "%4C %Z %[!%b %d %Y] %-17.17F (%3l) %s" |'
bersama-sama dengan ini diubah mfdate.c
disajikan dalam jawaban ini oleh pengguna 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;
}
berfungsi dengan benar untuk saya mutt 1.6.1
dan seperti yang Anda lihat tidak ada masalah dengan %
masuknya subjek, jika ini yang menjadi masalah sebenarnya:
Ini adalah versi "hanya berfungsi" awal karena setelah melihat lebih dekat pertanyaan awal Anda , saya tidak yakin apakah ini yang Anda inginkan. Namun, jika ini adalah apa yang Anda inginkan beritahu saya dan kami akan berpikir bagaimana membuatnya lebih baik.
EDIT :
Ini juga dapat bekerja dengan pilihan Anda 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;
}
EDIT :
Biarkan saya jelaskan cara kerjanya:
The mfdate
mengambil 2 argumen:
"%[%s]"
dan:
"%%Z %%{%%Y %%b %%e %%H:%%M} %%?X?(%%X)& ? %%-22.22F %%.100s %%> %%5c"
Argumen pertama hanya time of the message
, seperti yang dijelaskan dalam
index_format
dokumentasi di .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
Dalam hal ini fmt
diganti dengan %s
, karena sebagai %s
sarana The
number of seconds since the Epoch
seperti yang dijelaskan dalam man strftime
. Argumen pertama digunakan untuk menghitung berapa lama pesan dan apa label: old
, recent
atau today
seharusnya.
Argumen kedua adalah bagian yang tersisa dari index_format
variabel. Ini digunakan mfdate
hanya untuk mencetak tetapi tambahan %
ditambahkan pada akhir printf
karena seperti yang tertulis dalam manual mutt :
String yang dikembalikan akan digunakan untuk tampilan. Jika string yang dikembalikan berakhir dalam%, itu akan melewati formatter untuk kedua kalinya.
Setiap %
digandakan di sini karena kami ingin meneruskan literal %
ke pemformatan kedua yang dilakukan oleh mutt
.