পেজারে আমার স্থানীয় সময় অঞ্চলে তারিখ শিরোনামটি প্রদর্শন করতে কীভাবে আমি মুটকে কনফিগার করব?


13

আমি যখন পেজার মুটে কোনও বার্তা দেখি তখন আমার স্থানীয় সময় অঞ্চলটির পরিবর্তে ইউটিসিতে তারিখ শিরোনামের সময় প্রদর্শন করে। সূচী দর্শন স্থানীয় সময়কে সঠিকভাবে প্রদর্শন করে। আমি এই পুরাতন মেলিং তালিকা পোস্টটি পেয়েছি যা স্ক্রিনের নীচে অবস্থিত স্থিতি বারে স্থানীয় সময়টি কীভাবে প্রদর্শন করতে হয় তা বর্ণনা করে তবে এটি এখনও পর্দার শীর্ষে তারিখ শিরোনামের সময়টিকে "ঠিক" করে না। তারিখের শিরোনাম সময়কে স্থানীয় সময় রূপান্তর করতে পেজার পাওয়ার কোনও উপায় আছে কি?

উত্তর:


3

আপনার .muttrcনিম্নলিখিত লাইনে যুক্ত করুন:

set display_filter="exec sed -r \"s/^Date:\\s*(([F-Wa-u]{3},\\s*)?[[:digit:]]{1,2}\\s+[A-Sa-y]{3}\\s+[[:digit:]]{4}\\s+[[:digit:]]{1,2}:[[:digit:]]{1,2}(:[[:digit:]]{1,2})?\\s+[+-][[:digit:]]{4})/date +'Date: %a, %d %b %Y %H:%M:%S %z' -d '\\1'/e\""

Date:যদি শিরোনামটিতে একটি বৈধ আরএফসি ফর্ম্যাটেড তারিখ থাকে তবে এটি বার্তাটিতে শিরোনামটিকে (কেবল প্রদর্শনের জন্য) আপনার স্থানীয় সময় অঞ্চলে পরিবর্তন করবে । যদি প্রদত্ত তারিখের ফর্ম্যাটটি ভুল ছিল (আমরা সর্বোপরি অবিশ্বস্ত ব্যবহারকারী ইনপুট নিয়ে কাজ করছি) এটি সংরক্ষণ করা হবে। শিরোনামের মাধ্যমে শেল কোড ইনজেকশনের সম্ভাব্য প্রয়াসের বিরুদ্ধে লড়াই করার জন্য sedপ্যাটার্নটি আরএফসি 5322 (এই আরএফসি Date:ক্ষেত্রের বিন্যাসটি সংজ্ঞায়িত ) এর উপর ভিত্তি করে একটি শ্বেতলিস্ট প্রয়োগ করে ।

নোট করুন যে muttকমান্ড লাইনটি 255 অক্ষরের বেশি আর সীমাবদ্ধ নয়, অতএব আমি মূল sedকমান্ডটিকে 255 বাইটে ফিট করার জন্য কঠোর শ্বেতলিস্টকে অনুকূলিত করেছিলাম । আপনি যদি বার্তাটি দিয়ে অন্য কিছু করার পরিকল্পনা করেন, তবে sedআপনি কোনও স্ক্রিপ্টে রাখতে পারেন এমন সম্পূর্ণ আদেশটি হ'ল:

sed -r "s/^Date:\s*(((Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s*)?[[:digit:]]{1,2}\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+[[:digit:]]{4}\s+[[:digit:]]{1,2}:[[:digit:]]{1,2}(:[[:digit:]]{1,2})?\s+[+-][[:digit:]]{4})/date +'Date: %a, %d %b %Y %H:%M:%S %z' -d '\1'/e"

ম্যাকসটিতে সেই কাজটি করার কোনও সম্ভাবনা আছে কি? আমি আমার filter.sedফাইলে এটি অন্তর্ভুক্ত করতে চাই । ধন্যবাদ!
ফিলিপ এল।

এখন পর্যন্ত, নয় যদি না আপনি ব্যবহার করছেন গনুহ sed (যেমন মাধ্যমে Homebrew) - উপরে sedকমান্ড উপর নির্ভর eকরতে পরিবর্তক sকমান্ড। এই সংশোধকটি একটি জিএনইউ এক্সটেনশন এবং ম্যাকোসগুলি sedবিএসডি এক।
ছায়াপথ

@ ভাইরিকের উত্তর ভাল good ফিল্টার মাধ্যমে বার্তা পরিবর্তন করার প্রয়োজন নেই।
জাঙ্গিদ

@ জাঙ্গিদ, দয়া করে আসল অনুরোধটি পড়ুন এবং এটি পৃষ্ঠার শীর্ষে স্থানীয় জোনটির যথাযথ প্রদর্শনের জন্য জিজ্ঞাসা করেছে , স্থিতির লাইনে নয়।
গ্যালাক্সি

@ গ্যালাক্সি ওহ! হ্যাঁ. সবেমাত্র সেদিকে খেয়াল আছে। সঠিক।
জাঙ্গিদ

11

সূচীতে বিন্যাসটি index_formatসেটিংস দ্বারা নিয়ন্ত্রিত হয় - এটি মুট দ্বারা উত্পাদিত হয়। Dateহেডার গাড়ল দ্বারা নিয়ন্ত্রিত হয় না, এটি একটি HEADER বার্তা যে শুধু প্রদর্শিত পরার সঙ্গে অন্তর্ভুক্ত আছে। এটি যদি ইউটিসি সময় দেখায় তবে কারণ শিরোনামটি উত্পাদনের সময় প্রেরণকারী সার্ভারটি ইউটিসি ব্যবহার করার সিদ্ধান্ত নিয়েছে। এটিকে পরিবর্তন করার একমাত্র উপায় হ'ল বার্তাটি নিজেই পরিবর্তন করা হয়, হয় আপনি যখন তা গ্রহণ করেন বা যখন আপনি এটি দেখেন।

এটি আসার সাথে সাথে পরিবর্তন করার অর্থ আপনার মেল বিতরণকারী এজেন্টে একটি ফিল্টার যুক্ত করা, তবে বিদ্যমান শিরোনামটিকে পার্স করার জন্য Dateএবং এটি পুনরায় লেখার জন্য এটি যথেষ্ট পরিশীলিত হওয়া দরকার । বার্তাটি দেখার সময় কেবল মুটকে পুনরায় ফর্ম্যাট করা প্রায় নিশ্চিতভাবেই ভাল। আপনি display_filterসম্পত্তিটিকে এক্সিকিউটেবল ফাইলে সেট করতে পারেন এবং এটি প্রদর্শিত হওয়ার আগে এক্সিকিউটেবলের মাধ্যমে আপনি যে কোনও বার্তা খোলেন এটি পাইপ করবে।

আপনাকে এমন একটি প্রোগ্রাম বা শেল স্ক্রিপ্ট লিখতে হবে যা বার্তার প্রতিটি লাইন পড়ে এবং ডেট শিরোনামের সাথে একটিটির পরিবর্তে বা বিদ্যমান স্ক্রিপ্টটি খুঁজে পেতে পারে (এখানে এমন একটি রয়েছে যা কাজ করতে পারে, যদিও এটি মনে হয় না এটি সত্যই হওয়া উচিত) একটি অস্থায়ী ফাইল জড়িত করা প্রয়োজন)


7

http://www.mail-archive.com/mutt-users@mutt.org/msg44341.html

এটি স্থানীয় টাইমজোনগুলিতে অক্ষরের তারিখটি দেখানোর জন্য, 'পেজার_ফর্ম্যাট' ব্যবহার করার পরামর্শ দেয়:

পেজার_ফর্ম্যাট = "% 4 সি% জেড% [!% বি% ই% 1 এ:% এম% পি]% .20n% s% * - (% পি)" সেট করুন "


এটি সূচি_ ফর্ম্যাটের জন্যও খুব ভালভাবে কাজ করে।
ফিল

5

গিলসের পরামর্শ গ্রহণের জন্য, এখানে একটি সংস্করণ রয়েছে যা একটি টেম্প ফাইল এবং ব্যবহার করে formail

#!/bin/bash
TMPFILE=$(mktemp)

# save the message to a file
cat - >"$TMPFILE"
# extract the date header
DATE=$( formail -xDate: < "$TMPFILE" )
# convert to the current timezone (defined by TZ)
DATE=$( date -R -d "$DATE" )
# output the modified message
echo "Date: $DATE"
formail -fI Date < "$TMPFILE"
# clean up
rm -f "$TMPFILE"

এটি একটি ত্রুটিযুক্ত Date:শিরোলেখের মাধ্যমে কোড ইনজেকশন আক্রমণগুলির পক্ষে সংবেদনশীল - আপনি যদি কোনও সাব-শেলটিতে যান তবে আপনাকে ইনপুটটিকে বৈধতা / স্যানিটাইজ করতে হবে।
গ্যালাক্সি

2

এখানে একটি প্রোসমেল সমাধান রয়েছে:

# extract date from mail
:0
TMPDATE=| formail -x Date

# get local date
LOCALDATE=`date --rfc-2822 -d "$TMPDATE"`

# add it new header to the mail
:0 f
| formail -I "LocalDate: $LOCALDATE"

এবং স্থানীয় তারিখ প্রদর্শন করুন: মিউট্র্যাকে:

unignore localdate

আপনি কিভাবে এই প্রার্থনা করবেন?
জানুস ট্রয়লসেন

@JanusTroelsen, আমি তোমাদের স্ক্রিপ্ট ধার্য বিশ্বাস display_filterমধ্যে .muttrc
গ্যালাক্সি

2

set display_filter="/PATH/TO/THIS/PYTHON/FILE"আপনার .muttrc

পাইথন ৩.৩:

#!/usr/bin/env python3
import sys
import re
# import subprocess
from email.utils import format_datetime, parsedate_to_datetime

in_headers = True
for line in sys.stdin.readlines():
    if line == "\n": in_headers = False
    match = re.match(r'^Date: (.+)', line)

    if not in_headers or not match:
        print(line, end="")
        continue

    date_string = match.group(1)
    # use this if you do not have python 3.3+
    # converted_date = subprocess.Popen(['date','-d',date_string], stdout=subprocess.PIPE).communicate()[0].strip()
    converted_date = format_datetime(parsedate_to_datetime(date_string).astimezone(tz=None))
    print('Date:', converted_date)

মন্তব্য করা লাইনটি একটি ত্রুটিযুক্ত Date:শিরোলেখের মাধ্যমে কোড ইনজেকশন আক্রমণগুলিতে সংবেদনশীল - আপনি যদি একটি সাব-শেলটিতে যান তবে আপনাকে ইনপুটটিকে বৈধতা / স্যানিটাইজ করতে হবে, অন্যথায় স্ক্রিপ্টটি সুরক্ষা অবস্থান থেকে ঠিক আছে। তবে, আপনার ব্রাউজ করা প্রতিটি বার্তায় চালিত স্ক্রিপ্টটির পক্ষে এটি ভারী।
ছায়াপথ

2

বাধ্যতামূলক পার্ল সমাধান যা স্থানীয় সময় সংস্করণ ধারণ করতে অতিরিক্ত "স্থানীয়-তারিখ" শিরোনাম যুক্ত করার সাথে "তারিখ" শিরোনামকে সংরক্ষণ করে:

#!/usr/bin/perl -n

use Date::Parse;
use POSIX;
use strict;

if (/^Date: (.*)$/) {
    my $datestr = $1;
    my $date = strftime ("%a, %d %b %Y %H:%M:%S",
                         localtime (str2time ($datestr)));
    print "Local-Date: $date\n";
}

print;

0

মাইকেল এর উত্তরের শেষে বর্ণিত শেল স্ক্রিপ্ট তৈরি করেছি যা আমার জন্য কাজ করে:

#!/bin/bash
while IFS= read -r LINE; do
    if [[ "${LINE}" =~ ^Date:\ .* ]]; then
        DATE=${LINE#Date: }
        # convert to the current timezone (defined by TZ)
        DATE=$(date -d "${DATE}")
        printf '%s' "Date: ${DATE}"
    elif [[ -n $LINE ]]; then
      # We've reach the end of the headers, so stop parsing
      echo
      exec cat
    else
        printf '%s\n' "${LINE}"
    fi
done

1
ইমেলগুলি পার্সিং করা বেশ জটিল। আমি ডেডিকেটেড মত টুল ব্যবহার করে সুপারিশ formail(অংশ procmail প্যাকেজ) অথবা reformail(অংশ maildrop বিদ্যমান বের করে আনতে) Date:হেডার এবং জায়গায় একটি নতুন এক করা। প্রান্তের ক্ষেত্রে যেমন একটি অনুপস্থিত বা ত্রুটিযুক্ত Date:শিরোনামের যত্ন নিন ।
গিলস 'অশুভ হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.