Add url_launcher config setting
parent
b88c3c573d
commit
f975e1004c
|
@ -772,7 +772,11 @@ for the mailcap file locations.
|
|||
.\" default value
|
||||
.Pq Em m
|
||||
.It Ic go_to_url
|
||||
Go to url of given index
|
||||
Go to url of given index (with the command
|
||||
.Ic url_launcher
|
||||
setting in
|
||||
.Sx PAGER
|
||||
section)
|
||||
.\" default value
|
||||
.Pq Em g
|
||||
.It Ic toggle_url_mode
|
||||
|
@ -885,6 +889,12 @@ Choose `text/html` alternative if `text/plain` is empty in `multipart/alternativ
|
|||
Show Date: in local timezone
|
||||
.\" default value
|
||||
.Pq Em true
|
||||
.It Ic url_launcher Ar String
|
||||
.Pq Em optional
|
||||
A command to launch URLs with.
|
||||
The URL will be given as the first argument of the command.
|
||||
.\" default value
|
||||
.Pq Em xdg-open
|
||||
.El
|
||||
.Sh LISTING
|
||||
.Bl -tag -width 36n
|
||||
|
|
|
@ -2247,7 +2247,15 @@ impl Component for MailView {
|
|||
}
|
||||
};
|
||||
|
||||
match Command::new("xdg-open")
|
||||
let url_launcher = mailbox_settings!(
|
||||
context[self.coordinates.0][&self.coordinates.1]
|
||||
.pager
|
||||
.url_launcher
|
||||
)
|
||||
.as_ref()
|
||||
.map(|s| s.as_str())
|
||||
.unwrap_or("xdg-open");
|
||||
match Command::new(url_launcher)
|
||||
.arg(url)
|
||||
.stdin(Stdio::piped())
|
||||
.stdout(Stdio::piped())
|
||||
|
@ -2258,7 +2266,7 @@ impl Component for MailView {
|
|||
}
|
||||
Err(err) => {
|
||||
context.replies.push_back(UIEvent::Notification(
|
||||
Some("Failed to launch xdg-open".to_string()),
|
||||
Some(format!("Failed to launch {:?}", url_launcher)),
|
||||
err.to_string(),
|
||||
Some(NotificationType::Error(melib::ErrorKind::External)),
|
||||
));
|
||||
|
@ -2527,7 +2535,15 @@ impl Component for MailView {
|
|||
}
|
||||
}
|
||||
list_management::ListAction::Url(url) => {
|
||||
match Command::new("xdg-open")
|
||||
let url_launcher = mailbox_settings!(
|
||||
context[self.coordinates.0][&self.coordinates.1]
|
||||
.pager
|
||||
.url_launcher
|
||||
)
|
||||
.as_ref()
|
||||
.map(|s| s.as_str())
|
||||
.unwrap_or("xdg-open");
|
||||
match Command::new(url_launcher)
|
||||
.arg(String::from_utf8_lossy(url).into_owned())
|
||||
.stdin(Stdio::piped())
|
||||
.stdout(Stdio::piped())
|
||||
|
@ -2539,8 +2555,8 @@ impl Component for MailView {
|
|||
Err(err) => {
|
||||
context.replies.push_back(UIEvent::StatusEvent(
|
||||
StatusEvent::DisplayMessage(format!(
|
||||
"Couldn't launch xdg-open: {}",
|
||||
err
|
||||
"Couldn't launch {:?}: {}",
|
||||
url_launcher, err
|
||||
)),
|
||||
));
|
||||
}
|
||||
|
@ -2552,8 +2568,16 @@ impl Component for MailView {
|
|||
}
|
||||
}
|
||||
MailingListAction::ListArchive if actions.archive.is_some() => {
|
||||
/* open archive url with xdg-open */
|
||||
match Command::new("xdg-open")
|
||||
/* open archive url with url_launcher */
|
||||
let url_launcher = mailbox_settings!(
|
||||
context[self.coordinates.0][&self.coordinates.1]
|
||||
.pager
|
||||
.url_launcher
|
||||
)
|
||||
.as_ref()
|
||||
.map(|s| s.as_str())
|
||||
.unwrap_or("xdg-open");
|
||||
match Command::new(url_launcher)
|
||||
.arg(actions.archive.unwrap())
|
||||
.stdin(Stdio::piped())
|
||||
.stdout(Stdio::piped())
|
||||
|
@ -2563,8 +2587,8 @@ impl Component for MailView {
|
|||
Err(err) => {
|
||||
context.replies.push_back(UIEvent::StatusEvent(
|
||||
StatusEvent::DisplayMessage(format!(
|
||||
"Couldn't launch xdg-open: {}",
|
||||
err
|
||||
"Couldn't launch {:?}: {}",
|
||||
url_launcher, err
|
||||
)),
|
||||
));
|
||||
}
|
||||
|
|
|
@ -528,15 +528,24 @@ impl Component for EnvelopeView {
|
|||
}
|
||||
};
|
||||
|
||||
match Command::new("xdg-open")
|
||||
let url_launcher = context
|
||||
.settings
|
||||
.pager
|
||||
.url_launcher
|
||||
.as_ref()
|
||||
.map(|s| s.as_str())
|
||||
.unwrap_or("xdg-open");
|
||||
match Command::new(url_launcher)
|
||||
.arg(url)
|
||||
.stdin(Stdio::piped())
|
||||
.stdout(Stdio::piped())
|
||||
.spawn()
|
||||
{
|
||||
Ok(child) => context.children.push(child),
|
||||
Err(_err) => context.replies.push_back(UIEvent::StatusEvent(
|
||||
StatusEvent::DisplayMessage("Failed to start xdg_open".into()),
|
||||
Err(err) => context.replies.push_back(UIEvent::Notification(
|
||||
Some(format!("Failed to launch {:?}", url_launcher)),
|
||||
err.to_string(),
|
||||
Some(NotificationType::Error(melib::ErrorKind::External)),
|
||||
)),
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -81,6 +81,11 @@ pub struct PagerSettingsOverride {
|
|||
#[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 argument of the command."]
|
||||
#[doc = " Default: None"]
|
||||
#[serde(deserialize_with = "non_empty_string")]
|
||||
#[serde(default)]
|
||||
pub url_launcher: Option<Option<String>>,
|
||||
}
|
||||
impl Default for PagerSettingsOverride {
|
||||
fn default() -> Self {
|
||||
|
@ -96,6 +101,7 @@ impl Default for PagerSettingsOverride {
|
|||
minimum_width: None,
|
||||
auto_choose_multipart_alternative: None,
|
||||
show_date_in_my_timezone: None,
|
||||
url_launcher: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,6 +91,10 @@ pub struct PagerSettings {
|
|||
/// Default: true
|
||||
#[serde(default = "internal_value_true", alias = "show-date-in-my-timezone")]
|
||||
pub show_date_in_my_timezone: ToggleFlag,
|
||||
/// A command to launch URLs with. The URL will be given as the first argument of the command.
|
||||
/// Default: None
|
||||
#[serde(default = "none", deserialize_with = "non_empty_string")]
|
||||
pub url_launcher: Option<String>,
|
||||
}
|
||||
|
||||
impl Default for PagerSettings {
|
||||
|
@ -107,6 +111,7 @@ impl Default for PagerSettings {
|
|||
minimum_width: 80,
|
||||
auto_choose_multipart_alternative: ToggleFlag::InternalVal(true),
|
||||
show_date_in_my_timezone: ToggleFlag::InternalVal(true),
|
||||
url_launcher: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -129,6 +134,8 @@ impl DotAddressable for PagerSettings {
|
|||
"auto_choose_multipart_alternative" => {
|
||||
self.auto_choose_multipart_alternative.lookup(field, tail)
|
||||
}
|
||||
"show_date_in_my_timezone" => self.show_date_in_my_timezone.lookup(field, tail),
|
||||
"url_launcher" => self.html_filter.lookup(field, tail),
|
||||
other => Err(MeliError::new(format!(
|
||||
"{} has no field named {}",
|
||||
parent_field, other
|
||||
|
|
Loading…
Reference in New Issue