pager: Add show_extra_headers option
Show custom set headers on pager, if existent. Quoting meli.conf(5): > show_extra_headers [String] (optional) Extra headers to > display, if present, in the > default header preamble of > the pager. This setting is > useful especially when used > per-folder or per-account. > For example, if you use > ‘rss2email’ (See r2e(1)) the > e-mail you will receive will > have the ‘X-RSS-Feed’ header > by default. You can show > them only in the folder > where you keep your feed > items: > > [accounts."personal".mailboxes] > INBOX = {} > "INBOX/Sent" = { sort_order=0 } > "INBOX/Feeds" = { pager.show_extra_headers = ["X-RSS-Feed"] } > (empty)pull/223/head
parent
d332e4578d
commit
58889bcadd
|
@ -599,7 +599,7 @@ Forward emails as attachment? (Alternative is inline).
|
|||
.Pq Em optional
|
||||
Alternative lists of reply prefixes (etc. ["Re:", "RE:", ...]) to strip.
|
||||
.\" default value
|
||||
.Pq Em ["Re:", "RE:", "Fwd:", "Fw:", "回复:", "回覆:", "SV:", "Sv:", "VS:", "Antw:", "Doorst:", "VS:", "VL:", "REF:", "TR:", "TR:", "AW:", "WG:", "ΑΠ:", "Απ:", "απ:", "ΠΡΘ:", "Πρθ:", "πρθ:", "ΣΧΕΤ:", "Σχετ:", "σχετ:", "ΠΡΘ:", "Πρθ:", "πρθ:", "Vá:", "Továbbítás:", "R:", "I:", "RIF:", "FS:", "BLS:", "TRS:", "VS:", "VB:", "RV:", "RES:", "Res", "ENC:", "Odp:", "PD:", "YNT:", "İLT:", "ATB:", "YML:"]
|
||||
.Dl Em [Re:, RE:, Fwd:, Fw:, 回复:, 回覆:, SV:, Sv:, VS:, Antw:, Doorst:, VS:, VL:, REF:, TR:, TR:, AW:, WG:, ΑΠ:, Απ:, απ:, ΠΡΘ:, Πρθ:, πρθ:, ΣΧΕΤ:, Σχετ:, σχετ:, ΠΡΘ:, Πρθ:, πρθ:, Vá:, Továbbítás:, R:, I:, RIF:, FS:, BLS:, TRS:, VS:, VB:, RV:, RES:, Res, ENC:, Odp:, PD:, YNT:, İLT:, ATB:, YML:]
|
||||
.It Ic reply_prefix Ar String
|
||||
.Pq Em optional
|
||||
The prefix to use in reply subjects.
|
||||
|
@ -1166,6 +1166,26 @@ A command to launch URLs with.
|
|||
The URL will be given as the first argument of the command.
|
||||
.\" default value
|
||||
.Pq Em xdg-open
|
||||
.It Ic show_extra_headers Ar [String]
|
||||
.Pq Em optional
|
||||
Extra headers to display, if present, in the default header preamble of the pager.
|
||||
This setting is useful especially when used per-folder or per-account.
|
||||
For example, if you use
|
||||
.Ql rss2email
|
||||
.Pq See Xr r2e 1
|
||||
the e-mail you will receive will have the
|
||||
.Ql X-RSS-Feed
|
||||
header by default.
|
||||
You can show them only in the folder where you keep your feed items:
|
||||
.Pp
|
||||
.Bd -literal -compact
|
||||
[accounts."personal".mailboxes]
|
||||
INBOX = {}
|
||||
"INBOX/Sent" = { sort_order=0 }
|
||||
"INBOX/Feeds" = { pager.show_extra_headers = ["X-RSS-Feed"] }
|
||||
.Ed
|
||||
.\" default value
|
||||
.Pq Em empty
|
||||
.El
|
||||
.Sh LISTING
|
||||
Default values are shown in parentheses.
|
||||
|
|
|
@ -28,7 +28,7 @@ use std::{
|
|||
process::{Command, Stdio},
|
||||
};
|
||||
|
||||
use melib::{email::attachment_types::ContentType, list_management, parser::BytesExt};
|
||||
use melib::{email::attachment_types::ContentType, list_management, parser::BytesExt, HeaderName};
|
||||
use smallvec::SmallVec;
|
||||
|
||||
use super::*;
|
||||
|
@ -1208,12 +1208,12 @@ impl Component for MailView {
|
|||
) || height_p < height;
|
||||
let (_, mut y) = upper_left;
|
||||
macro_rules! print_header {
|
||||
($(($header:literal, $string:expr)),*$(,)?) => {
|
||||
($(($header:path, $string:expr)),*$(,)?) => {
|
||||
$({
|
||||
if sticky || skip_header_ctr == 0 {
|
||||
if y <= get_y(bottom_right) {
|
||||
let (_x, _y) = write_string_to_grid(
|
||||
$header,
|
||||
&format!("{}:", $header),
|
||||
grid,
|
||||
headers_names.fg,
|
||||
headers_names.bg,
|
||||
|
@ -1299,25 +1299,28 @@ impl Component for MailView {
|
|||
orig_date.into()
|
||||
};
|
||||
print_header!(
|
||||
("Date:", date_str),
|
||||
("From:", envelope.field_from_to_string()),
|
||||
("To:", envelope.field_to_to_string()),
|
||||
(HeaderName::DATE, date_str),
|
||||
(HeaderName::FROM, envelope.field_from_to_string()),
|
||||
(HeaderName::TO, envelope.field_to_to_string()),
|
||||
);
|
||||
if envelope.other_headers().contains_key("Cc")
|
||||
&& !envelope.other_headers()["Cc"].is_empty()
|
||||
if envelope.other_headers().contains_key(HeaderName::CC)
|
||||
&& !envelope.other_headers()[HeaderName::CC].is_empty()
|
||||
{
|
||||
print_header!(("Cc:", envelope.field_cc_to_string()));
|
||||
print_header!((HeaderName::CC, envelope.field_cc_to_string()));
|
||||
}
|
||||
print_header!(
|
||||
("Subject:", envelope.subject()),
|
||||
("Message-ID:", format!("<{}>", envelope.message_id_raw()))
|
||||
(HeaderName::SUBJECT, envelope.subject()),
|
||||
(
|
||||
HeaderName::MESSAGE_ID,
|
||||
format!("<{}>", envelope.message_id_raw())
|
||||
)
|
||||
);
|
||||
if self.expand_headers {
|
||||
if let Some(val) = envelope.in_reply_to_display() {
|
||||
print_header!(
|
||||
("In-Reply-To:", val),
|
||||
(HeaderName::IN_REPLY_TO, val),
|
||||
(
|
||||
"References:",
|
||||
HeaderName::REFERENCES,
|
||||
envelope
|
||||
.references()
|
||||
.iter()
|
||||
|
@ -1328,6 +1331,18 @@ impl Component for MailView {
|
|||
);
|
||||
}
|
||||
}
|
||||
for hdr in mailbox_settings!(
|
||||
context[self.coordinates.0][&self.coordinates.1]
|
||||
.pager
|
||||
.show_extra_headers
|
||||
) {
|
||||
if let Some((val, hdr)) = HeaderName::try_from(hdr)
|
||||
.ok()
|
||||
.and_then(|hdr| Some((envelope.other_headers().get(&hdr)?, hdr)))
|
||||
{
|
||||
print_header!((hdr, val));
|
||||
}
|
||||
}
|
||||
if let Some(list_management::ListActions {
|
||||
ref id,
|
||||
ref archive,
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
use super::*;
|
||||
use melib::HeaderName;
|
||||
|
||||
# [derive (Debug , Serialize , Deserialize , Clone)] # [serde (deny_unknown_fields)] pub struct PagerSettingsOverride { # [doc = " Number of context lines when going to next page."] # [doc = " Default: 0"] # [serde (alias = "pager-context")] # [serde (default)] pub pager_context : Option < usize > , # [doc = " Stop at the end instead of displaying next mail."] # [doc = " Default: false"] # [serde (alias = "pager-stop")] # [serde (default)] pub pager_stop : Option < bool > , # [doc = " Always show headers when scrolling."] # [doc = " Default: true"] # [serde (alias = "headers-sticky")] # [serde (default)] pub headers_sticky : Option < bool > , # [doc = " The height of the pager in mail view, in percent."] # [doc = " Default: 80"] # [serde (alias = "pager-ratio")] # [serde (default)] pub pager_ratio : Option < usize > , # [doc = " A command to pipe mail output through for viewing in pager."] # [doc = " Default: None"] # [serde (deserialize_with = "non_empty_opt_string")] # [serde (default)] pub filter : Option < Option < String > > , # [doc = " A command to pipe html output before displaying it in a pager"] # [doc = " Default: None"] # [serde (deserialize_with = "non_empty_opt_string" , alias = "html-filter")] # [serde (default)] pub html_filter : Option < Option < String > > , # [doc = " Respect \"format=flowed\""] # [doc = " Default: true"] # [serde (alias = "format-flowed")] # [serde (default)] pub format_flowed : Option < bool > , # [doc = " Split long lines that would overflow on the x axis."] # [doc = " Default: true"] # [serde (alias = "split-long-lines")] # [serde (default)] pub split_long_lines : Option < bool > , # [doc = " Minimum text width in columns."] # [doc = " Default: 80"] # [serde (alias = "minimum-width")] # [serde (default)] pub minimum_width : Option < usize > , # [doc = " Choose `text/html` alternative if `text/plain` is empty in"] # [doc = " `multipart/alternative` attachments."] # [doc = " Default: true"] # [serde (alias = "auto-choose-multipart-alternative")] # [serde (default)] pub auto_choose_multipart_alternative : Option < ToggleFlag > , # [doc = " Show Date: in my timezone"] # [doc = " Default: true"] # [serde (alias = "show-date-in-my-timezone")] # [serde (default)] pub show_date_in_my_timezone : Option < ToggleFlag > , # [doc = " A command to launch URLs with. The URL will be given as the first"] # [doc = " argument of the command. Default: None"] # [serde (deserialize_with = "non_empty_opt_string")] # [serde (default)] pub url_launcher : Option < Option < String > > , # [doc = " A command to open html files."] # [doc = " Default: None"] # [serde (deserialize_with = "non_empty_opt_string" , alias = "html-open")] # [serde (default)] pub html_open : Option < Option < String > > } impl Default for PagerSettingsOverride { fn default () -> Self { PagerSettingsOverride { pager_context : None , pager_stop : None , headers_sticky : None , pager_ratio : None , filter : None , html_filter : None , format_flowed : None , split_long_lines : None , minimum_width : None , auto_choose_multipart_alternative : None , show_date_in_my_timezone : None , url_launcher : None , html_open : None } } }
|
||||
# [derive (Debug , Serialize , Deserialize , Clone)] # [serde (deny_unknown_fields)] pub struct PagerSettingsOverride { # [doc = " Number of context lines when going to next page."] # [doc = " Default: 0"] # [serde (alias = "pager-context")] # [serde (default)] pub pager_context : Option < usize > , # [doc = " Stop at the end instead of displaying next mail."] # [doc = " Default: false"] # [serde (alias = "pager-stop")] # [serde (default)] pub pager_stop : Option < bool > , # [doc = " Always show headers when scrolling."] # [doc = " Default: true"] # [serde (alias = "headers-sticky")] # [serde (default)] pub headers_sticky : Option < bool > , # [doc = " The height of the pager in mail view, in percent."] # [doc = " Default: 80"] # [serde (alias = "pager-ratio")] # [serde (default)] pub pager_ratio : Option < usize > , # [doc = " A command to pipe mail output through for viewing in pager."] # [doc = " Default: None"] # [serde (deserialize_with = "non_empty_opt_string")] # [serde (default)] pub filter : Option < Option < String > > , # [doc = " A command to pipe html output before displaying it in a pager"] # [doc = " Default: None"] # [serde (deserialize_with = "non_empty_opt_string" , alias = "html-filter")] # [serde (default)] pub html_filter : Option < Option < String > > , # [doc = " Respect \"format=flowed\""] # [doc = " Default: true"] # [serde (alias = "format-flowed")] # [serde (default)] pub format_flowed : Option < bool > , # [doc = " Split long lines that would overflow on the x axis."] # [doc = " Default: true"] # [serde (alias = "split-long-lines")] # [serde (default)] pub split_long_lines : Option < bool > , # [doc = " Minimum text width in columns."] # [doc = " Default: 80"] # [serde (alias = "minimum-width")] # [serde (default)] pub minimum_width : Option < usize > , # [doc = " Choose `text/html` alternative if `text/plain` is empty in"] # [doc = " `multipart/alternative` attachments."] # [doc = " Default: true"] # [serde (alias = "auto-choose-multipart-alternative")] # [serde (default)] pub auto_choose_multipart_alternative : Option < ToggleFlag > , # [doc = " Show Date: in my timezone"] # [doc = " Default: true"] # [serde (alias = "show-date-in-my-timezone")] # [serde (default)] pub show_date_in_my_timezone : Option < ToggleFlag > , # [doc = " A command to launch URLs with. The URL will be given as the first"] # [doc = " argument of the command. Default: None"] # [serde (deserialize_with = "non_empty_opt_string")] # [serde (default)] pub url_launcher : Option < Option < String > > , # [doc = " A command to open html files."] # [doc = " Default: None"] # [serde (deserialize_with = "non_empty_opt_string" , alias = "html-open")] # [serde (default)] pub html_open : Option < Option < String > > , # [doc = " Extra headers to display, if present, in the default header preamble."] # [doc = " Default: []"] # [serde (alias = "show-extra-headers")] # [serde (default)] pub show_extra_headers : Option < Vec < String > > } impl Default for PagerSettingsOverride { fn default () -> Self { PagerSettingsOverride { pager_context : None , pager_stop : None , headers_sticky : None , pager_ratio : None , filter : None , html_filter : None , format_flowed : None , split_long_lines : None , minimum_width : None , auto_choose_multipart_alternative : None , show_date_in_my_timezone : None , url_launcher : None , html_open : None , show_extra_headers : None } } }
|
||||
|
||||
# [derive (Debug , Serialize , Deserialize , Clone)] # [serde (deny_unknown_fields)] pub struct ListingSettingsOverride { # [doc = " Number of context lines when going to next page."] # [doc = " Default: 0"] # [serde (alias = "context-lines")] # [serde (default)] pub context_lines : Option < usize > , # [doc = "Show auto-hiding scrollbar in accounts sidebar menu."] # [doc = "Default: True"] # [serde (default)] pub show_menu_scrollbar : Option < bool > , # [doc = " Datetime formatting passed verbatim to strftime(3)."] # [doc = " Default: %Y-%m-%d %T"] # [serde (alias = "datetime-fmt")] # [serde (default)] pub datetime_fmt : Option < Option < String > > , # [doc = " Show recent dates as `X {minutes,hours,days} ago`, up to 7 days."] # [doc = " Default: true"] # [serde (alias = "recent-dates")] # [serde (default)] pub recent_dates : Option < bool > , # [doc = " Show only envelopes that match this query"] # [doc = " Default: None"] # [serde (default)] pub filter : Option < Option < Query > > , # [serde (alias = "index-style")] # [serde (default)] pub index_style : Option < IndexStyle > , # [doc = "Default: \" \""] # [serde (default)] pub sidebar_mailbox_tree_has_sibling : Option < Option < String > > , # [doc = "Default: \" \""] # [serde (default)] pub sidebar_mailbox_tree_no_sibling : Option < Option < String > > , # [doc = "Default: \" \""] # [serde (default)] pub sidebar_mailbox_tree_has_sibling_leaf : Option < Option < String > > , # [doc = "Default: \" \""] # [serde (default)] pub sidebar_mailbox_tree_no_sibling_leaf : Option < Option < String > > , # [doc = "Default: ' '"] # [serde (default)] pub sidebar_divider : Option < char > , # [doc = "Default: 90"] # [serde (default)] pub sidebar_ratio : Option < usize > , # [doc = " Flag to show if thread entry contains unseen mail."] # [doc = " Default: \"●\""] # [serde (default)] pub unseen_flag : Option < Option < String > > , # [doc = " Flag to show if thread has been snoozed."] # [doc = " Default: \"💤\""] # [serde (default)] pub thread_snoozed_flag : Option < Option < String > > , # [doc = " Flag to show if thread entry has been selected."] # [doc = " Default: \"☑\u{fe0f}\""] # [serde (default)] pub selected_flag : Option < Option < String > > , # [doc = " Flag to show if thread entry contains attachments."] # [doc = " Default: \"📎\""] # [serde (default)] pub attachment_flag : Option < Option < String > > , # [doc = " Should threads with differentiating Subjects show a list of those"] # [doc = " subjects on the entry title?"] # [doc = " Default: \"true\""] # [serde (default)] pub thread_subject_pack : Option < bool > } impl Default for ListingSettingsOverride { fn default () -> Self { ListingSettingsOverride { context_lines : None , show_menu_scrollbar : None , datetime_fmt : None , recent_dates : None , filter : None , index_style : None , sidebar_mailbox_tree_has_sibling : None , sidebar_mailbox_tree_no_sibling : None , sidebar_mailbox_tree_has_sibling_leaf : None , sidebar_mailbox_tree_no_sibling_leaf : None , sidebar_divider : None , sidebar_ratio : None , unseen_flag : None , thread_snoozed_flag : None , selected_flag : None , attachment_flag : None , thread_subject_pack : None } } }
|
||||
|
||||
|
|
|
@ -105,6 +105,11 @@ pub struct PagerSettings {
|
|||
alias = "html-open"
|
||||
)]
|
||||
pub html_open: Option<String>,
|
||||
|
||||
/// Extra headers to display, if present, in the default header preamble.
|
||||
/// Default: []
|
||||
#[serde(default = "Vec::new", alias = "show-extra-headers")]
|
||||
pub show_extra_headers: Vec<String>,
|
||||
}
|
||||
|
||||
impl Default for PagerSettings {
|
||||
|
@ -123,6 +128,7 @@ impl Default for PagerSettings {
|
|||
auto_choose_multipart_alternative: ToggleFlag::InternalVal(true),
|
||||
show_date_in_my_timezone: ToggleFlag::InternalVal(true),
|
||||
url_launcher: None,
|
||||
show_extra_headers: vec![],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -148,6 +154,7 @@ impl DotAddressable for PagerSettings {
|
|||
}
|
||||
"show_date_in_my_timezone" => self.show_date_in_my_timezone.lookup(field, tail),
|
||||
"url_launcher" => self.html_filter.lookup(field, tail),
|
||||
"show_extra_headers" => self.show_extra_headers.lookup(field, tail),
|
||||
other => Err(Error::new(format!(
|
||||
"{} has no field named {}",
|
||||
parent_field, other
|
||||
|
|
Loading…
Reference in New Issue