mirror of
https://github.com/extrawurst/gitui.git
synced 2024-11-22 02:12:58 +03:00
visualize empty line in diff better (closes #1359)
This commit is contained in:
parent
9eb8d470a4
commit
6ec647710d
@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## Unreleased
|
||||
|
||||
**visualize empty lines in diff better**
|
||||
|
||||
![diff-empty-line](assets/diff-empty-line.png)
|
||||
|
||||
### Breaking Changes
|
||||
* Do you use a custom theme?
|
||||
|
||||
@ -22,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
* switched from textwrap to bwrap for text wrapping [[@TheBlackSheep3](https://github.com/TheBlackSheep3/)] ([#1762](https://github.com/extrawurst/gitui/issues/1762))
|
||||
* more logging diagnostics when a repo cannot be opened
|
||||
* added to [anaconda](https://anaconda.org/conda-forge/gitui) [[@TheBlackSheep3](https://github.com/TheBlackSheep3/)] ([#1626](https://github.com/extrawurst/gitui/issues/1626))
|
||||
* visualize empty line substituted with content in diff better ([#1359](https://github.com/extrawurst/gitui/issues/1359))
|
||||
|
||||
### Fixes
|
||||
* fix commit dialog char count for multibyte characters ([#1726](https://github.com/extrawurst/gitui/issues/1726))
|
||||
|
BIN
assets/diff-empty-line.png
Normal file
BIN
assets/diff-empty-line.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 220 KiB |
@ -335,47 +335,12 @@ impl DiffComponent {
|
||||
}
|
||||
|
||||
fn get_text(&self, width: u16, height: u16) -> Vec<Line> {
|
||||
let mut res: Vec<Line> = Vec::new();
|
||||
if let Some(diff) = &self.diff {
|
||||
if diff.hunks.is_empty() {
|
||||
let is_positive = diff.size_delta >= 0;
|
||||
let delta_byte_size =
|
||||
ByteSize::b(diff.size_delta.unsigned_abs());
|
||||
let sign = if is_positive { "+" } else { "-" };
|
||||
res.extend(vec![Line::from(vec![
|
||||
Span::raw(Cow::from("size: ")),
|
||||
Span::styled(
|
||||
Cow::from(format!(
|
||||
"{}",
|
||||
ByteSize::b(diff.sizes.0)
|
||||
)),
|
||||
self.theme.text(false, false),
|
||||
),
|
||||
Span::raw(Cow::from(" -> ")),
|
||||
Span::styled(
|
||||
Cow::from(format!(
|
||||
"{}",
|
||||
ByteSize::b(diff.sizes.1)
|
||||
)),
|
||||
self.theme.text(false, false),
|
||||
),
|
||||
Span::raw(Cow::from(" (")),
|
||||
Span::styled(
|
||||
Cow::from(format!(
|
||||
"{sign}{delta_byte_size:}"
|
||||
)),
|
||||
self.theme.diff_line(
|
||||
if is_positive {
|
||||
DiffLineType::Add
|
||||
} else {
|
||||
DiffLineType::Delete
|
||||
},
|
||||
false,
|
||||
),
|
||||
),
|
||||
Span::raw(Cow::from(")")),
|
||||
])]);
|
||||
return if diff.hunks.is_empty() {
|
||||
self.get_text_binary(diff)
|
||||
} else {
|
||||
let mut res: Vec<Line> = Vec::new();
|
||||
|
||||
let min = self.vertical_scroll.get_top();
|
||||
let max = min + height as usize;
|
||||
|
||||
@ -426,9 +391,44 @@ impl DiffComponent {
|
||||
line_cursor += hunk_len;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
res
|
||||
};
|
||||
}
|
||||
res
|
||||
|
||||
vec![]
|
||||
}
|
||||
|
||||
fn get_text_binary(&self, diff: &FileDiff) -> Vec<Line> {
|
||||
let is_positive = diff.size_delta >= 0;
|
||||
let delta_byte_size =
|
||||
ByteSize::b(diff.size_delta.unsigned_abs());
|
||||
let sign = if is_positive { "+" } else { "-" };
|
||||
vec![Line::from(vec![
|
||||
Span::raw(Cow::from("size: ")),
|
||||
Span::styled(
|
||||
Cow::from(format!("{}", ByteSize::b(diff.sizes.0))),
|
||||
self.theme.text(false, false),
|
||||
),
|
||||
Span::raw(Cow::from(" -> ")),
|
||||
Span::styled(
|
||||
Cow::from(format!("{}", ByteSize::b(diff.sizes.1))),
|
||||
self.theme.text(false, false),
|
||||
),
|
||||
Span::raw(Cow::from(" (")),
|
||||
Span::styled(
|
||||
Cow::from(format!("{sign}{delta_byte_size:}")),
|
||||
self.theme.diff_line(
|
||||
if is_positive {
|
||||
DiffLineType::Add
|
||||
} else {
|
||||
DiffLineType::Delete
|
||||
},
|
||||
false,
|
||||
),
|
||||
),
|
||||
Span::raw(Cow::from(")")),
|
||||
])]
|
||||
}
|
||||
|
||||
fn get_line_to_add<'a>(
|
||||
@ -442,6 +442,9 @@ impl DiffComponent {
|
||||
) -> Line<'a> {
|
||||
let style = theme.diff_hunk_marker(selected_hunk);
|
||||
|
||||
let is_content_line =
|
||||
matches!(line.line_type, DiffLineType::None);
|
||||
|
||||
let left_side_of_line = if end_of_hunk {
|
||||
Span::styled(Cow::from(symbols::line::BOTTOM_LEFT), style)
|
||||
} else {
|
||||
@ -458,7 +461,11 @@ impl DiffComponent {
|
||||
};
|
||||
|
||||
let content =
|
||||
tabs_to_spaces(line.content.as_ref().to_string());
|
||||
if !is_content_line && line.content.as_ref().is_empty() {
|
||||
String::from(strings::symbol::LINE_BREAK)
|
||||
} else {
|
||||
tabs_to_spaces(line.content.as_ref().to_string())
|
||||
};
|
||||
let content = trim_offset(&content, scrolled_right);
|
||||
|
||||
let filled = if selected {
|
||||
|
@ -38,6 +38,7 @@ pub mod symbol {
|
||||
pub const CHECKMARK: &str = "\u{2713}"; //✓
|
||||
pub const SPACE: &str = "\u{02FD}"; //˽
|
||||
pub const EMPTY_SPACE: &str = " ";
|
||||
pub const LINE_BREAK: &str = "¶";
|
||||
pub const FOLDER_ICON_COLLAPSED: &str = "\u{25b8}"; //▸
|
||||
pub const FOLDER_ICON_EXPANDED: &str = "\u{25be}"; //▾
|
||||
pub const EMPTY_STR: &str = "";
|
||||
|
Loading…
Reference in New Issue
Block a user