यह 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
यह होना चाहिए।
दूसरा तर्क index_format
चर का शेष भाग है । इसका उपयोग mfdate
केवल मुद्रण के लिए किया जाता है, लेकिन एक अतिरिक्त %
जोड़ा जाता है printf
क्योंकि यह म्यूट मैनुअल में कहता है :
लौटी स्ट्रिंग का उपयोग प्रदर्शन के लिए किया जाएगा। यदि लौटा हुआ स्ट्रिंग% में समाप्त होता है, तो इसे दूसरी बार फॉर्मेटर के माध्यम से पारित किया जाएगा।
प्रत्येक %
को यहां दोगुना कर दिया गया है क्योंकि हम एक शाब्दिक %
द्वारा किए गए दूसरे प्रारूपण को पारित करना चाहते हैं mutt
।