Как настроить 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 
  • awk: разобрать и записать в другой файл
  • ошибка: у Macro% есть незаконное имя (% define)
  • Включение подпараметров в варианты справки для правильного выполнения без getopt или getopts?
  • Захват jq - как правильно использовать захваченную строку
  • Использование && и || операторы для обработки результата одной и той же команды
  • Как удалить строку с переменным поиском с помощью команды sed
  • Как завершить скрипт оболочки?
  • Как удалить x число нулей с начала файла?
  • Как я могу обнаружить оболочку без входа? (В Zsh)
  • Поиск писателя файла
  • Поиск текстового файла по столбцу
  • Interesting Posts

    Как предотвратить команду HP-UX «меньше» от испортить мое приглашение?

    Почему httpd дает ошибку после символической ссылки в моем домашнем каталоге Fedora?

    Поддерживается ли CentOS PPC64 программой Freescale T2080 RDB?

    Параметр rsync-демона в качестве параметра команды rsync.conf

    Часы Gnome в формате UTC, а не локальные

    Как я могу выполнить локальный скрипт на удаленном компьютере и включить аргументы?

    Как установить mercurial на openSUSE?

    VPN на Fedora Linux?

    Изменение постоянной таблицы маршрутизации

    Почасовой cronjob не работает

    Лексика для новичков

    Как было изменено резервное копирование непустого каталога и сохранение метаданных, таких как права / файл прав пользователя / файл времени?

    Выполнение обратной задачи последовательно выполняется для нескольких Unices с xterm

    Какие точки монтирования существуют в типичной системе Linux?

    LVM файловая система заполнена, не может обновлять систему среди других вещей

    Linux и Unix - лучшая ОС в мире.