mirror of
https://github.com/dandavison/delta.git
synced 2024-10-05 04:17:21 +03:00
Add --keep-plus-minus-markers option
This commit is contained in:
parent
7a23a5c536
commit
defc0eadff
5
Makefile
5
Makefile
@ -6,13 +6,14 @@ lint:
|
|||||||
|
|
||||||
test:
|
test:
|
||||||
cargo test
|
cargo test
|
||||||
bash -c "diff -u <(git log -p | cut -c 2-) \
|
bash -c "diff -u <(git log -p) \
|
||||||
<(git log -p | delta --width variable \
|
<(git log -p | delta --width variable \
|
||||||
--tabs 0 \
|
--tabs 0 \
|
||||||
|
--keep-plus-minus-markers \
|
||||||
--commit-style plain \
|
--commit-style plain \
|
||||||
--file-style plain \
|
--file-style plain \
|
||||||
--hunk-style plain \
|
--hunk-style plain \
|
||||||
| ansifilter | cut -c 2-)"
|
| ansifilter)"
|
||||||
|
|
||||||
release:
|
release:
|
||||||
@make -f release.Makefile release
|
@make -f release.Makefile release
|
||||||
|
@ -31,6 +31,7 @@ _delta() {
|
|||||||
--minus-emph-color
|
--minus-emph-color
|
||||||
--plus-color
|
--plus-color
|
||||||
--plus-emph-color
|
--plus-emph-color
|
||||||
|
--keep-plus-minus-markers
|
||||||
--show-background-colors
|
--show-background-colors
|
||||||
--theme
|
--theme
|
||||||
--version
|
--version
|
||||||
|
@ -97,6 +97,11 @@ pub struct Opt {
|
|||||||
/// apply syntax highlighting to unchanged and new lines only.
|
/// apply syntax highlighting to unchanged and new lines only.
|
||||||
pub highlight_removed: bool,
|
pub highlight_removed: bool,
|
||||||
|
|
||||||
|
#[structopt(long = "keep-plus-minus-markers")]
|
||||||
|
/// Prefix added/removed lines with a +/- character, respectively, exactly as git does. The
|
||||||
|
/// default behavior is to output a space character in place of these markers.
|
||||||
|
pub keep_plus_minus_markers: bool,
|
||||||
|
|
||||||
#[structopt(long = "commit-style", default_value = "plain")]
|
#[structopt(long = "commit-style", default_value = "plain")]
|
||||||
/// Formatting style for the commit section of git output. Options
|
/// Formatting style for the commit section of git output. Options
|
||||||
/// are: plain, box.
|
/// are: plain, box.
|
||||||
|
@ -18,6 +18,8 @@ pub struct Config<'a> {
|
|||||||
pub minus_emph_style_modifier: StyleModifier,
|
pub minus_emph_style_modifier: StyleModifier,
|
||||||
pub plus_style_modifier: StyleModifier,
|
pub plus_style_modifier: StyleModifier,
|
||||||
pub plus_emph_style_modifier: StyleModifier,
|
pub plus_emph_style_modifier: StyleModifier,
|
||||||
|
pub minus_line_marker: &'a str,
|
||||||
|
pub plus_line_marker: &'a str,
|
||||||
pub highlight_removed: bool,
|
pub highlight_removed: bool,
|
||||||
pub commit_style: cli::SectionStyle,
|
pub commit_style: cli::SectionStyle,
|
||||||
pub commit_color: Color,
|
pub commit_color: Color,
|
||||||
@ -102,6 +104,17 @@ pub fn get_config<'a>(
|
|||||||
font_style: None,
|
font_style: None,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let minus_line_marker = if opt.keep_plus_minus_markers {
|
||||||
|
"-"
|
||||||
|
} else {
|
||||||
|
" "
|
||||||
|
};
|
||||||
|
let plus_line_marker = if opt.keep_plus_minus_markers {
|
||||||
|
"+"
|
||||||
|
} else {
|
||||||
|
" "
|
||||||
|
};
|
||||||
|
|
||||||
Config {
|
Config {
|
||||||
theme,
|
theme,
|
||||||
theme_name,
|
theme_name,
|
||||||
@ -111,6 +124,8 @@ pub fn get_config<'a>(
|
|||||||
plus_style_modifier,
|
plus_style_modifier,
|
||||||
plus_emph_style_modifier,
|
plus_emph_style_modifier,
|
||||||
highlight_removed: opt.highlight_removed,
|
highlight_removed: opt.highlight_removed,
|
||||||
|
minus_line_marker,
|
||||||
|
plus_line_marker,
|
||||||
commit_style: opt.commit_style,
|
commit_style: opt.commit_style,
|
||||||
commit_color: color_from_rgb_or_ansi_code(&opt.commit_color),
|
commit_color: color_from_rgb_or_ansi_code(&opt.commit_color),
|
||||||
file_style: opt.file_style,
|
file_style: opt.file_style,
|
||||||
|
11
src/delta.rs
11
src/delta.rs
@ -271,6 +271,7 @@ fn handle_hunk_meta_line(
|
|||||||
)]],
|
)]],
|
||||||
&mut painter.output_buffer,
|
&mut painter.output_buffer,
|
||||||
config,
|
config,
|
||||||
|
"",
|
||||||
style::NO_BACKGROUND_COLOR_STYLE_MODIFIER,
|
style::NO_BACKGROUND_COLOR_STYLE_MODIFIER,
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
@ -321,6 +322,7 @@ fn handle_hunk_line(painter: &mut Painter, line: &str, state: State, config: &Co
|
|||||||
State::HunkPlus
|
State::HunkPlus
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
|
let is_empty = line.is_empty();
|
||||||
painter.paint_buffered_lines();
|
painter.paint_buffered_lines();
|
||||||
let line = prepare(&line, true, config);
|
let line = prepare(&line, true, config);
|
||||||
let syntax_style_sections = Painter::get_line_syntax_style_sections(
|
let syntax_style_sections = Painter::get_line_syntax_style_sections(
|
||||||
@ -334,6 +336,7 @@ fn handle_hunk_line(painter: &mut Painter, line: &str, state: State, config: &Co
|
|||||||
vec![vec![(style::NO_BACKGROUND_COLOR_STYLE_MODIFIER, &line)]],
|
vec![vec![(style::NO_BACKGROUND_COLOR_STYLE_MODIFIER, &line)]],
|
||||||
&mut painter.output_buffer,
|
&mut painter.output_buffer,
|
||||||
config,
|
config,
|
||||||
|
if is_empty { "" } else { " " },
|
||||||
style::NO_BACKGROUND_COLOR_STYLE_MODIFIER,
|
style::NO_BACKGROUND_COLOR_STYLE_MODIFIER,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
@ -352,8 +355,9 @@ fn prepare(line: &str, append_newline: bool, config: &Config) -> String {
|
|||||||
if !line.is_empty() {
|
if !line.is_empty() {
|
||||||
let mut line = line.graphemes(true);
|
let mut line = line.graphemes(true);
|
||||||
|
|
||||||
// The first column contains a -/+/space character, added by git. We skip it here and insert
|
// The first column contains a -/+/space character, added by git. We drop it now, so that
|
||||||
// a replacement space when formatting the line below.
|
// it is not present during syntax highlighting, and inject a replacement when emitting the
|
||||||
|
// line.
|
||||||
line.next();
|
line.next();
|
||||||
|
|
||||||
// Expand tabs as spaces.
|
// Expand tabs as spaces.
|
||||||
@ -365,7 +369,7 @@ fn prepare(line: &str, append_newline: bool, config: &Config) -> String {
|
|||||||
} else {
|
} else {
|
||||||
line.collect::<String>()
|
line.collect::<String>()
|
||||||
};
|
};
|
||||||
format!(" {}{}", output_line, terminator)
|
format!("{}{}", output_line, terminator)
|
||||||
} else {
|
} else {
|
||||||
terminator.to_string()
|
terminator.to_string()
|
||||||
}
|
}
|
||||||
@ -604,6 +608,7 @@ mod tests {
|
|||||||
minus_emph_color: None,
|
minus_emph_color: None,
|
||||||
plus_color: None,
|
plus_color: None,
|
||||||
plus_emph_color: None,
|
plus_emph_color: None,
|
||||||
|
keep_plus_minus_markers: false,
|
||||||
theme: None,
|
theme: None,
|
||||||
highlight_removed: false,
|
highlight_removed: false,
|
||||||
commit_style: cli::SectionStyle::Plain,
|
commit_style: cli::SectionStyle::Plain,
|
||||||
|
@ -77,6 +77,7 @@ impl<'a> Painter<'a> {
|
|||||||
minus_line_diff_style_sections,
|
minus_line_diff_style_sections,
|
||||||
&mut self.output_buffer,
|
&mut self.output_buffer,
|
||||||
self.config,
|
self.config,
|
||||||
|
self.config.minus_line_marker,
|
||||||
self.config.minus_style_modifier,
|
self.config.minus_style_modifier,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
@ -87,6 +88,7 @@ impl<'a> Painter<'a> {
|
|||||||
plus_line_diff_style_sections,
|
plus_line_diff_style_sections,
|
||||||
&mut self.output_buffer,
|
&mut self.output_buffer,
|
||||||
self.config,
|
self.config,
|
||||||
|
self.config.plus_line_marker,
|
||||||
self.config.plus_style_modifier,
|
self.config.plus_style_modifier,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
@ -102,14 +104,20 @@ impl<'a> Painter<'a> {
|
|||||||
diff_style_sections: Vec<Vec<(StyleModifier, &str)>>,
|
diff_style_sections: Vec<Vec<(StyleModifier, &str)>>,
|
||||||
output_buffer: &mut String,
|
output_buffer: &mut String,
|
||||||
config: &config::Config,
|
config: &config::Config,
|
||||||
|
prefix: &str,
|
||||||
background_style_modifier: StyleModifier,
|
background_style_modifier: StyleModifier,
|
||||||
should_trim_newline_and_right_pad: bool,
|
should_trim_newline_and_right_pad: bool,
|
||||||
) {
|
) {
|
||||||
|
let background_style = config.no_style.apply(background_style_modifier);
|
||||||
|
let background_ansi_style = to_ansi_style(background_style, config.true_color);
|
||||||
for (syntax_sections, diff_sections) in
|
for (syntax_sections, diff_sections) in
|
||||||
syntax_style_sections.iter().zip(diff_style_sections.iter())
|
syntax_style_sections.iter().zip(diff_style_sections.iter())
|
||||||
{
|
{
|
||||||
let mut text_width = 0;
|
let mut text_width = 0;
|
||||||
let mut ansi_strings = Vec::new();
|
let mut ansi_strings = Vec::new();
|
||||||
|
if prefix != "" {
|
||||||
|
ansi_strings.push(background_ansi_style.paint(prefix));
|
||||||
|
}
|
||||||
for (style, text) in superimpose_style_sections(syntax_sections, diff_sections) {
|
for (style, text) in superimpose_style_sections(syntax_sections, diff_sections) {
|
||||||
if config.width.is_some() {
|
if config.width.is_some() {
|
||||||
text_width += text.graphemes(true).count();
|
text_width += text.graphemes(true).count();
|
||||||
@ -122,7 +130,6 @@ impl<'a> Painter<'a> {
|
|||||||
match config.width {
|
match config.width {
|
||||||
Some(width) if width > text_width => {
|
Some(width) if width > text_width => {
|
||||||
// Right pad to requested width with spaces.
|
// Right pad to requested width with spaces.
|
||||||
let background_style = config.no_style.apply(background_style_modifier);
|
|
||||||
paint_text(
|
paint_text(
|
||||||
&" ".repeat(width - text_width),
|
&" ".repeat(width - text_width),
|
||||||
background_style,
|
background_style,
|
||||||
|
Loading…
Reference in New Issue
Block a user