Как настроить mutt для отображения заголовка даты в моем локальном часовом поясе в пейджере?

Когда я просматриваю сообщение в пейджере mutt, отображается время в заголовке «Дата» в формате UTC, а не в моем локальном часовом поясе. В окне индекса отображается локальное время. Я нашел эту старую почтовую рассылку, в которой описывается, как получить локальное время для отображения в строке состояния в нижней части экрана, но это все еще не «фиксирует» время в заголовке «Дата» в верхней части экрана. Есть ли способ заставить пейджер конвертировать время заголовка даты в локальное время?

7 Solutions collect form web for “Как настроить mutt для отображения заголовка даты в моем локальном часовом поясе в пейджере?”

Форматирование в индексе контролируется установкой index_format – оно генерируется mutt. Заголовок заголовка не управляется mutt, это заголовок, включенный в сообщение, которое только что отображается. Если он показывает время UTC, это связано с тем, что отправляющий сервер решил использовать UTC при генерации заголовка. Единственный способ изменить это – фактически изменить само сообщение, либо когда вы его получите, либо когда вы его просмотрите.

Изменение его, как оно есть, означает добавление фильтра к вашему агенту доставки почты, но он должен быть достаточно сложным, чтобы анализировать существующий заголовок Date и переписывать его. Почти наверняка лучше просто переустановить сообщение, когда вы посмотрите на него. Вы можете установить свойство display_filter в исполняемый файл, и он будет передавать любое сообщение, которое вы открываете через исполняемый файл, перед его отображением.

Вам нужно будет написать программу или сценарий оболочки, который читает каждую строку сообщения и заменяет его заголовком даты, или найдет существующий скрипт (есть один здесь, который может работать, хотя, похоже, он не должен необходимо задействовать временный файл)

Взяв совет Жиля, вот версия, в которой используется файл temp и 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" 

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

Это предполагает использование «pager_format», чтобы он отображал дату письма в локальном часовом поясе:

set pager_format = "% 4C% Z% [!% b% e at% I:% M% p]% .20n% s% * – (% P)"

Вот решение procmail:

 # 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" 

И отобразите LocalDate: в muttrc:

 unignore localdate 

set display_filter="/PATH/TO/THIS/PYTHON/FILE" в вашем .muttrc .

Python 3.3:

 #!/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) 

Обязательное решение Perl, которое сохраняет заголовок «Дата» при добавлении дополнительного заголовка «Local-Date», чтобы содержать локальную версию:

 #!/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; 

Я сделал сценарий оболочки, как описано в конце ответа Майкла, который выполняет эту работу для меня:

 #!/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 
  • Получить имя эмулятора терминала внутри сценария оболочки
  • Найдите конкретную вложенность имен каталогов, например ... / project / dir1 / dir2
  • Определить сеанс tmux, к которому относится сеанс оболочки?
  • Используя ; или && с помощью $ @
  • Копирование последнего измененного файла из нескольких каталогов
  • Как распечатать каждую другую строку на мониторе
  • Как создать и обработать строку в оболочке Bourne FreeBSD?
  • Как ожидать от PID от вызванного процесса?
  • Эффективный таргетинг конкретного туннеля SSH из всех текущих?
  • Условно включить этап трубы в сценарии bash
  • Выполнить опцию по умолчанию, если в getopts не указаны параметры
  • Linux и Unix - лучшая ОС в мире.