ui: fix pager from_buf reflowing incompatibility

embed
Manos Pitsidianakis 2019-03-18 15:41:38 +02:00
parent 0b76307e30
commit 2b06dd1aca
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
5 changed files with 38 additions and 12 deletions

View File

@ -326,17 +326,25 @@ impl Component for MailView {
}
ViewMode::Subview | ViewMode::ContactSelector(_) => {}
_ => {
let buf = {
let text = {
self.attachment_to_text(&body)
/*
let text = self.attachment_to_text(&body);
// URL indexes must be colored (ugh..)
MailView::plain_text_to_buf(&text, self.mode == ViewMode::Url)
*/
};
let cursor_pos = if self.mode.is_attachment() {
Some(0)
} else {
self.pager.as_mut().map(|p| p.cursor_pos())
};
self.pager = Some(Pager::from_buf(buf.split_newlines(), cursor_pos));
self.pager = Some(Pager::from_string(
text,
Some(context),
cursor_pos,
Some(width!(area)),
));
self.subview = None;
}
};

View File

@ -160,6 +160,9 @@ impl EnvelopeView {
}
}
}
/*
* TODO: add recolor changes so that this function returns a vector of required highlights
* to pass to write_string...
pub fn plain_text_to_buf(s: &str, highlight_urls: bool) -> CellBuffer {
let mut buf = CellBuffer::from(s);
@ -192,6 +195,7 @@ impl EnvelopeView {
}
buf
}
*/
}
impl Component for EnvelopeView {
@ -294,17 +298,25 @@ impl Component for EnvelopeView {
self.mode = ViewMode::Subview;
}
_ => {
let buf = {
let text = {
self.attachment_to_text(&body)
/*
let text = self.attachment_to_text(&body);
// URL indexes must be colored (ugh..)
EnvelopeView::plain_text_to_buf(&text, self.mode == ViewMode::Url)
*/
};
let cursor_pos = if self.mode.is_attachment() {
Some(0)
} else {
self.pager.as_mut().map(|p| p.cursor_pos())
};
self.pager = Some(Pager::from_buf(buf.split_newlines(), cursor_pos));
self.pager = Some(Pager::from_string(
text,
Some(context),
cursor_pos,
Some(width!(area)),
));
}
};
self.dirty = false;
@ -380,7 +392,7 @@ impl Component for EnvelopeView {
self.mode = ViewMode::Subview;
self.subview = Some(Box::new(Pager::from_string(
String::from_utf8_lossy(&decode_rec(u, None)).to_string(),
context,
Some(context),
None,
None,
)));

View File

@ -49,8 +49,7 @@ impl HtmlView {
&html_filter.wait_with_output().unwrap().stdout,
));
let buf = MailView::plain_text_to_buf(&display_text, true);
let pager = Pager::from_buf(buf.split_newlines(), None);
let pager = Pager::from_string(display_text, None, None, None);
HtmlView { pager, bytes }
}
}

View File

@ -254,12 +254,17 @@ impl Pager {
}
pub fn from_string(
mut text: String,
context: &mut Context,
context: Option<&Context>,
cursor_pos: Option<usize>,
width: Option<usize>,
) -> Self {
let pager_filter: Option<&String> = context.settings.pager.filter.as_ref();
let pager_filter: Option<&String> = if let Some(context) = context {
context.settings.pager.filter.as_ref()
//let format_flowed: bool = context.settings.pager.format_flowed;
} else {
None
};
if let Some(bin) = pager_filter {
use std::io::Write;
use std::process::{Command, Stdio};

View File

@ -157,9 +157,11 @@ impl Component for Field {
}
}
},
UIEventType::InsertInput(Key::Char(k)) => if let Text(ref mut s, _) = self {
s.insert_char(k);
},
UIEventType::InsertInput(Key::Char(k)) => {
if let Text(ref mut s, _) = self {
s.insert_char(k);
}
}
UIEventType::InsertInput(Key::Backspace) => match self {
Text(ref mut s, auto_complete) => {
s.backspace();