diff options
Diffstat (limited to 'src/cli.rs')
-rw-r--r-- | src/cli.rs | 840 |
1 files changed, 477 insertions, 363 deletions
@@ -2,26 +2,25 @@ use std::collections::{HashMap, HashSet}; use std::ffi::OsString; use std::path::PathBuf; +use clap::{AppSettings, ColorChoice, FromArgMatches, IntoApp, Parser}; use lazy_static::lazy_static; -use structopt::clap::AppSettings::{ColorAlways, ColoredHelp, DeriveDisplayOrder}; -use structopt::{clap, StructOpt}; use syntect::highlighting::Theme as SyntaxTheme; use syntect::parsing::SyntaxSet; +use crate::config::delta_unreachable; use crate::git_config::{GitConfig, GitConfigEntry}; use crate::options; use crate::utils::bat::assets::HighlightingAssets; use crate::utils::bat::output::PagingMode; -// No Default trait as this ignores `default_value = ..` -#[derive(StructOpt)] -#[structopt( +#[derive(Parser)] +#[clap( name = "delta", about = "A viewer for git and diff output", - setting(ColorAlways), - setting(ColoredHelp), - setting(DeriveDisplayOrder), - after_help = "\ + version, + color = ColorChoice::Always, + setting(AppSettings::DeriveDisplayOrder), + after_long_help = "\ GIT CONFIG ---------- @@ -204,632 +203,746 @@ https://github.com/dandavison/delta/issues. " )] pub struct Opt { - /// Use default colors appropriate for a light terminal background. For more control, see the - /// style options and --syntax-theme. - #[structopt(long = "light")] + #[clap(long = "light")] + /// Use default colors appropriate for a light terminal background. + /// + /// For more control, see the style options and --syntax-theme. pub light: bool, - /// Use default colors appropriate for a dark terminal background. For more control, see the - /// style options and --syntax-theme. - #[structopt(long = "dark")] + #[clap(long = "dark")] + /// Use default colors appropriate for a dark terminal background. + /// + /// For more control, see the style options and --syntax-theme. pub dark: bool, - /// Display line numbers next to the diff. See LINE NUMBERS section. - #[structopt(short = "n", long = "line-numbers")] + #[clap(short = 'n', long = "line-numbers")] + /// Display line numbers next to the diff. + /// + /// See LINE NUMBERS section. pub line_numbers: bool, - /// Display a side-by-side diff view instead of the traditional view. - #[structopt(short = "s", long = "side-by-side")] + #[clap(short = 's', long = "side-by-side")] + /// Display diffs in side-by-side layout. pub side_by_side: bool, - #[structopt(long = "diff-highlight")] - /// Emulate diff-highlight (https://github.com/git/git/tree/master/contrib/diff-highlight) + #[clap(long = "diff-highlight")] + /// Emulate diff-highlight. + /// + /// (https://github.com/git/git/tree/master/contrib/diff-highlight) pub diff_highlight: bool, - #[structopt(long = "diff-so-fancy")] - /// Emulate diff-so-fancy (https://github.com/so-fancy/diff-so-fancy) + #[clap(long = "diff-so-fancy")] + /// Emulate diff-so-fancy. + /// + /// (https://github.com/so-fancy/diff-so-fancy) pub diff_so_fancy: bool, - #[structopt(long = "navigate")] - /// Activate diff navigation: use n to jump forwards and N to jump backwards. To change the - /// file labels used see --file-modified-label, --file-removed-label, --file-added-label, - /// --file-renamed-label. + #[clap(long = "navigate")] + /// Activate diff navigation. + /// + /// Use n to jump forwards and N to jump backwards. To change the file labels used see + /// --file-modified-label, --file-removed-label, --file-added-label, --file-renamed-label. pub navigate: bool, - #[structopt(long = "relative-paths")] - /// Output all file paths relative to the current directory so that they - /// resolve correctly when clicked on or used in shell commands. + #[clap(long = "relative-paths")] + /// Output all file paths relative to the current directory. + /// + /// This means that they will resolve correctly when clicked on or used in shell commands. pub relative_paths: bool, - #[structopt(long = "hyperlinks")] - /// Render commit hashes, file names, and line numbers as hyperlinks, - /// according to the hyperlink spec for terminal emulators: - /// https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda. By - /// default, file names and line numbers link to the local file using a file - /// URL, whereas commit hashes link to the commit in GitHub, if the remote - /// repository is hosted by GitHub. See --hyperlinks-file-link-format for - /// full control over the file URLs emitted. Hyperlinks are supported by - /// several common terminal emulators. To make them work, you must use less - /// version >= 581 with the -R flag (or use -r with older less versions, but - /// this will break e.g. --navigate). If you use tmux, then you will also - /// need a patched fork of tmux (see https://github.com/dandavison/tmux). + #[clap(long = "hyperlinks")] + /// Render commit hashes, file names, and line numbers as hyperlinks. + /// + /// Following the hyperlink spec for terminal emulators: + /// https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda. By default, file names + /// and line numbers link to the local file using a file URL, whereas commit hashes link to the + /// commit in GitHub, if the remote repository is hosted by GitHub. See + /// --hyperlinks-file-link-format for full control over the file URLs emitted. Hyperlinks are + /// supported by several common terminal emulators. To make them work, you must use less version + /// >= 581 with the -R flag (or use -r with older less versions, but this will break e.g. + /// --navigate). If you use tmux, then you will also need a patched fork of tmux (see + /// https://github.com/dandavison/tmux). pub hyperlinks: bool, - #[structopt(long = "keep-plus-minus-markers")] - /// Prefix added/removed lines with a +/- character, exactly as git does. By default, delta - /// does not emit any prefix, so code can be copied directly from delta's output. + #[clap(long = "keep-plus-minus-markers")] + /// Prefix added/removed lines with a +/- character, as git does. + /// + /// By default, delta does not emit any prefix, so code can be copied directly from delta's + /// output. pub keep_plus_minus_markers: bool, - /// Display the active values for all Delta options. Style options are displayed with - /// foreground and background colors. This can be used to experiment with colors by combining - /// this option with other options such as --minus-style, --zero-style, --plus-style, --light, - /// --dark, etc. - #[structopt(long = "show-config")] + #[clap(long = "show-config")] + /// Display the active values for all Delta options. + /// + /// Style string options are displayed with foreground and background colors. This can be used to + /// experiment with colors by combining this option with other options such as --minus-style, + /// --zero-style, --plus-style, --light, --dark, etc. pub show_config: bool, + #[clap(long = "list-languages")] /// List supported languages and associated file extensions. - #[structopt(long = "list-languages")] pub list_languages: bool, + #[clap(long = "list-syntax-themes")] /// List available syntax-highlighting color themes. - #[structopt(long = "list-syntax-themes")] pub list_syntax_themes: bool, - /// Show all available syntax-highlighting themes, each with an example of highlighted diff output. + #[clap(long = "show-syntax-themes")] + /// Show example diff for available syntax-highlighting themes. + /// /// If diff output is supplied on standard input then this will be used for the demo. For /// example: `git show | delta --show-syntax-themes`. - #[structopt(long = "show-syntax-themes")] pub show_syntax_themes: bool, - /// Show available delta themes, each with an example of highlighted diff - /// output. A delta theme is a delta named feature (see --features) that - /// sets either `light` or `dark`. See - /// https://github.com/dandavison/delta#custom-color-themes. If diff output - /// is supplied on standard input then this will be used for the demo. For - /// example: `git show | delta --show-themes`. By default shows dark or - /// light themes only, according to whether delta is in dark or light mode - /// (as set by the user or inferred from BAT_THEME). To control the themes - /// shown, use --dark or --light, or both, on the command line together with - /// this option. - #[structopt(long = "show-themes")] + #[clap(long = "show-themes")] + /// Show example diff for available delta themes. + /// + /// A delta theme is a delta named feature (see --features) that sets either `light` or `dark`. + /// See https://github.com/dandavison/delta#custom-color-themes. If diff output is supplied on + /// standard input then this will be used for the demo. For example: `git show | delta + /// --show-themes`. By default shows dark or light themes only, according to whether delta is in + /// dark or light mode (as set by the user or inferred from BAT_THEME). To control the themes + /// shown, use --dark or --light, or both, on the command line together with this option. pub show_themes: bool, - /// Show available named colors. In addition to named colors, arbitrary - /// colors can be specified using RGB hex codes. See COLORS section. - #[structopt(long = "show-colors")] + #[clap(long = "show-colors")] + /// Show available named colors. + /// + /// In addition to named colors, arbitrary colors can be specified using RGB hex codes. See + /// COLORS section. pub show_colors: bool, - /// Parse ANSI color escape sequences in input and display them as git style - /// strings. Example usage: git show --color=always | delta --parse-ansi + #[clap(long = "parse-ansi")] + /// Display ANSI color escape sequences in human-readable form. + /// + /// Example usage: git show --color=always | delta --parse-ansi /// This can be used to help identify input style strings to use with map-styles. - #[structopt(long = "parse-ansi")] pub parse_ansi: bool, - #[structopt(long = "no-gitconfig")] - /// Do not take any settings from git config. See GIT CONFIG section. + #[clap(long = "no-gitconfig")] + /// Do not read any settings from git config. + /// + /// See GIT CONFIG section. pub no_gitconfig: bool, - #[structopt(long = "raw")] - /// Do not alter the input in any way. This is mainly intended for testing delta. + #[clap(long = "raw")] + /// Do not alter the input in any way. + /// + /// This is mainly intended for testing delta. pub raw: bool, - #[structopt(long = "color-only")] - /// Do not alter the input structurally in any way, but color and highlight hunk lines - /// according to your delta configuration. This is mainly intended for other tools that use - /// delta. + #[clap(long = "color-only")] + /// Do not alter the input structurally in any way. + /// + /// But color and highlight hunk lines according to your delta configuration. This is mainly + /// intended for other tools that use delta. pub color_only: bool, //////////////////////////////////////////////////////////////////////////////////////////// - #[structopt(long = "features")] - /// Name of delta features to use (space-separated). A feature is a named collection of delta - /// options in ~/.gitconfig. See FEATURES section. The environment variable DELTA_FEATURES can - /// be set to a space-separated list of feature names. If this is preceded with a space, the - /// features from the environment variable will be added to those specified in git config. E.g. - /// DELTA_FEATURES=+side-by-side can be used to activate side-by-side temporarily. + #[clap(long = "features")] + /// Names of delta features to activate (space-separated). + /// + /// A feature is a named collection of delta options in ~/.gitconfig. See FEATURES section. The + /// environment variable DELTA_FEATURES can be set to a space-separated list of feature names. + /// If this is preceded with a space, the features from the environment variable will be added + /// to those specified in git config. E.g. DELTA_FEATURES=+side-by-side can be used to activate + /// side-by-side temporarily. pub features: Option<String>, - #[structopt(long = "syntax-theme")] - /// The code syntax-highlighting theme to use. Use --show-syntax-themes to demo available - /// themes. Defaults to the value of the BAT_THEME environment variable, if that contains a - /// valid theme name. --syntax-theme=none disables all syntax highlighting. + #[clap(long = "syntax-theme")] + /// The syntax-highlighting theme to use. + /// + /// Use --show-syntax-themes to demo available themes. Defaults to the value of the BAT_THEME + /// environment variable, if that contains a valid theme name. --syntax-theme=none disables all + /// syntax highlighting. pub syntax_theme: Option<String>, - #[structopt(long = "minus-style", default_value = "normal auto")] - /// Style (foreground, background, attributes) for removed lines. See STYLES section. + #[clap(long = "minus-style", default_value = "normal auto")] + /// Style string for removed lines. + /// + /// See STYLES section. pub minus_style: String, - #[structopt(long = "zero-style", default_value = "syntax normal")] - /// Style (foreground, background, attributes) for unchanged lines. See STYLES section. + #[clap(long = "zero-style", default_value = "syntax normal")] + /// Style string for unchanged lines. + /// + /// See STYLES section. pub zero_style: String, - #[structopt(long = "plus-style", default_value = "syntax auto")] - /// Style (foreground, background, attributes) for added lines. See STYLES section. + #[clap(long = "plus-style", default_value = "syntax auto")] + /// Style string for added lines. + /// + /// See STYLES section. pub plus_style: String, - #[structopt(long = "minus-emph-style", default_value = "normal auto")] - /// Style (foreground, background, attributes) for emphasized sections of removed lines. See - /// STYLES section. + #[clap(long = "minus-emph-style", default_value = "normal auto")] + /// Style string for emphasized sections of removed lines. + /// + /// See STYLES section. pub minus_emph_style: String, - #[structopt(long = "minus-non-emph-style", default_value = "minus-style")] - /// Style (foreground, background, attributes) for non-emphasized sections of removed lines - /// that have an emphasized section. See STYLES section. + #[clap(long = "minus-non-emph-style", default_value = "minus-style")] + /// Style string for non-emphasized sections of removed lines that have an emphasized section. + /// + /// See STYLES section. pub minus_non_emph_style: String, - #[structopt(long = "plus-emph-style", default_value = "syntax auto")] - /// Style (foreground, background, attributes) for emphasized sections of added lines. See - /// STYLES section. + #[clap(long = "plus-emph-style", default_value = "syntax auto")] + /// Style string for emphasized sections of added lines. + /// + /// See STYLES section. pub plus_emph_style: String, - #[structopt(long = "plus-non-emph-style", default_value = "plus-style")] - /// Style (foreground, background, attributes) for non-emphasized sections of added lines that - /// have an emphasized section. See STYLES section. + #[clap(long = "plus-non-emph-style", default_value = "plus-style")] + /// Style string for non-emphasized sections of added lines that have an emphasized section. + /// + /// See STYLES section. pub plus_non_emph_style: String, - #[structopt(long = "commit-style", default_value = "raw")] - /// Style (foreground, background, attributes) for the commit hash line. See STYLES section. - /// The style 'omit' can be used to remove the commit hash line from the output. + #[clap(long = "commit-style", default_value = "raw")] + /// Style string for the commit hash line. + /// + /// See STYLES section. The style 'omit' can be used to remove the commit hash line from the + /// output. pub commit_style: String, - #[structopt(long = "commit-decoration-style", default_value = "")] - /// Style (foreground, background, attributes) for the commit hash decoration. See STYLES - /// section. The style string should contain one of the special attributes 'box', 'ul' - /// (underline), 'ol' (overline), or the combination 'ul ol'. + #[clap(long = "commit-decoration-style", default_value = "")] + /// Style string for the commit hash decoration. + /// + /// See STYLES section. The style string should contain one of the special attributes 'box', + /// 'ul' (underline), 'ol' (overline), or the combination 'ul ol'. pub commit_decoration_style: String, - /// The regular expression used to identify the commit line when parsing git output. - #[structopt(long = "commit-regex", default_value = r"^commit ")] + #[clap(long = "commit-regex", default_value = r"^commit ")] + /// Regular expression used to identify the commit line when parsing git output. pub commit_regex: String, - #[structopt(long = "file-style", default_value = "blue")] - /// Style (foreground, background, attributes) for the file section. See STYLES section. The - /// style 'omit' can be used to remove the file section from the output. + #[clap(long = "file-style", default_value = "blue")] + /// Style string for the file section. + /// + /// See STYLES section. The style 'omit' can be used to remove the file section from the output. pub file_style: String, - #[structopt(long = "file-decoration-style", default_value = "blue ul")] - /// Style (foreground, background, attributes) for the file decoration. See STYLES section. The - /// style string should contain one of the special attributes 'box', 'ul' (underline), 'ol' - /// (overline), or the combination 'ul ol'. + #[clap(long = "file-decoration-style", default_value = "blue ul")] + /// Style string for the file decoration. + /// + /// See STYLES section. The style string should contain one of the special attributes 'box', + /// 'ul' (underline), 'ol' (overline), or the combination 'ul ol'. pub file_decoration_style: String, #[structopt(long = "file-transformation")] - /// A sed-style command specifying how file paths should be transformed for display. + /// A sed-style command transforming file paths for display. pub file_regex_replacement: Option<String>, - /// Format string for commit hyperlinks (requires --hyperlinks). The - /// placeholder "{commit}" will be replaced by the commit hash. For example: + #[clap(long = "hyperlinks-commit-link-format")] + /// Format string for commit hyperlinks (requires --hyperlinks). + /// + /// The placeholder "{commit}" will be replaced by the commit hash. For example: /// --hyperlinks-commit-link-format='https://mygitrepo/{commit}/' - #[structopt(long = "hyperlinks-commit-link-format")] pub hyperlinks_commit_link_format: Option<String>, - /// Format string for file hyperlinks (requires --hyperlinks). The - /// placeholders "{path}" and "{line}" will be replaced by the absolute file - /// path and the line number, respectively. The default value of this option - /// creates hyperlinks using standard file URLs; your operating system - /// should open these in the application registered for that file type. - /// However, these do not make use of the line number. In order for the link - /// to open the file at the correct line number, you could use a custom URL - /// format such as "file-line://{path}:{line}" and register an application - /// to handle the custom "file-line" URL scheme by opening the file in your - /// editor/IDE at the indicated line number. See + #[clap(long = "hyperlinks-file-link-format", default_value = "file://{path}")] + /// Format string for file hyperlinks (requires --hyperlinks). + /// + /// The placeholders "{path}" and "{line}" will be replaced by the absolute file path and the + /// line number, respectively. The default value of this option creates hyperlinks using + /// standard file URLs; your operating system should open these in the application registered + /// for that file type. However, these do not make use of the line number. In order for the link + /// to open the file at the correct line number, you could use a custom URL format such as + /// "file-line://{path}:{line}" and register an application to handle the custom "file-line" URL + /// scheme by opening the file in your editor/IDE at the indicated line number. See /// https://github.com/dandavison/open-in-editor for an example. - #[structopt(long = "hyperlinks-file-link-format", default_value = "file://{path}")] pub hyperlinks_file_link_format: String, - #[structopt(long = "hunk-header-style", default_value = "line-number syntax")] - /// Style (foreground, background, attributes) for the hunk-header. See STYLES section. Special - /// attributes 'file' and 'line-number' can be used to include the file path, and number of - /// first hunk line, in the hunk header. The style 'omit' can be used to remove the hunk header - /// section from the output. + #[clap(long = "hunk-header-style", default_value = "line-number syntax")] + /// Style string for the hunk-header. + /// + /// See STYLES section. Special attributes 'file' and 'line-number' can be used to include the + /// file path, and number of first hunk line, in the hunk header. The style 'omit' can be used + /// to remove the hunk header section from the output. pub hunk_header_style: String, - #[structopt(long = "hunk-header-file-style", default_value = "blue")] - /// Style (foreground, background, attributes) for the file path part of the hunk-header. See - /// STYLES section. The file path will only be displayed if hunk-header-style contains the + #[clap(long = "hunk-header-file-style", default_value = "blue")] + /// Style string for the file path part of the hunk-header. + /// + /// See STYLES section. The file path will only be displayed if hunk-header-style contains the /// 'file' special attribute. pub hunk_header_file_style: String, - #[structopt(long = "hunk-header-line-number-style", default_value = "blue")] - /// Style (foreground, background, attributes) for the line number part of the hunk-header. See - /// STYLES section. The line number will only be displayed if hunk-header-style contains the + #[clap(long = "hunk-header-line-number-style", default_value = "blue")] + /// Style string for the line number part of the hunk-header. + /// + /// See STYLES section. The line number will only be displayed if hunk-header-style contains the /// 'line-number' special attribute. pub hunk_header_line_number_style: String, - #[structopt(long = "hunk-header-decoration-style", default_value = "blue box")] - /// Style (foreground, background, attributes) for the hunk-header decoration. See STYLES - /// section. The style string should contain one of the special attributes 'box', 'ul' - /// (underline), 'ol' (overline), or the combination 'ul ol'. + #[clap(long = "hunk-header-decoration-style", default_value = "blue box")] + /// Style string for the hunk-header decoration. + /// + /// See STYLES section. The style string should contain one of the special attributes 'box', + /// 'ul' (underline), 'ol' (overline), or the combination 'ul ol'. pub hunk_header_decoration_style: String, - #[structopt(long = "merge-conflict-begin-symbol", default_value = "▼")] - /// A string that is repeated to form the line marking the beginning of a merge conflict region. + #[clap(long = "merge-conflict-begin-symbol", default_value = "▼")] + /// String marking the beginning of a merge conflict region. + /// + /// The string will be repeated until it reaches the required length. pub merge_conflict_begin_symbol: String, - #[structopt(long = "merge-conflict-end-symbol", default_value = "▲")] - /// A string that is repeated to form the line marking the end of a merge conflict region. + #[clap(long = "merge-conflict-end-symbol", default_value = "▲")] + /// String marking the end of a merge conflict region. + /// + /// The string will be repeated until it reaches the required length. pub merge_conflict_end_symbol: String, - #[structopt( + #[clap( long = "merge-conflict-ours-diff-header-style", default_value = "normal" )] - /// Style (foreground, background, attributes) for the header above the diff between the - /// ancestral commit and 'our' branch. See STYLES section. + /// Style string for the header above the 'ours' branch merge conflict diff. + /// + /// See STYLES section. pub merge_conflict_ours_diff_header_style: String, - #[structopt( + #[clap( long = "merge-conflict-ours-diff-header-decoration-style", default_value = "box" )] - /// Style (foreground, background, attributes) for the decoration of the header above the diff - /// between the ancestral commit and 'our' branch. See STYLES section. The style string should - /// contain one of the special attributes 'box', 'ul' (underline), 'ol' (overline), or the - /// combination 'ul ol'. + /// Style string for the decoration of the header above the 'ours' merge conflict diff. + /// + /// This styles the decoration of the header above the diff between the ancestral commit and the + /// 'ours' branch. See STYLES section. The style string should contain one of the special + /// attributes 'box', 'ul' (underline), 'ol' (overline), or the combination 'ul ol'. pub merge_conflict_ours_diff_header_decoration_style: String, - #[structopt( + #[clap( long = "merge-conflict-theirs-diff-header-style", default_value = "normal" )] - /// Style (foreground, background, attributes) for the header above the diff between the - /// ancestral commit and 'their' branch. See STYLES section. + /// Style string for the header above the 'theirs' branch merge conflict diff. + /// + /// This styles the header above the diff between the ancestral commit and 'their' branch. See + /// STYLES section. pub merge_conflict_theirs_diff_header_style: String, - #[structopt( + #[clap( long = "merge-conflict-theirs-diff-header-decoration-style", default_value = "box" )] - /// Style (foreground, background, attributes) for the decoration of the header above the diff - /// between the ancestral commit and 'their' branch. See STYLES section. The style string should - /// contain one of the special attributes 'box', 'ul' (underline), 'ol' (overline), or the - /// combination 'ul ol'. + /// Style string for the decoration of the header above the 'theirs' merge conflict diff. + /// + /// This styles the decoration of the header above the diff between the ancestral commit and + /// 'their' branch. See STYLES section. The style string should contain one of the special + /// attributes 'box', 'ul' (underline), 'ol' (overline), or the combination 'ul ol'. pub merge_conflict_theirs_diff_header_decoration_style: String, - #[structopt(long = "map-styles")] - /// A string specifying a mapping styles encountered in raw input to desired - /// output styles. An example is - /// --map-styles='bold purple => red "#eeeeee", bold cyan => syntax "#eeeeee"' + #[clap(long = "map-styles")] + /// Map styles encountered in raw input to desired output styles. + /// + /// An example is --map-styles='bold purple => red "#eeeeee", bold cyan => syntax "#eeeeee"' pub map_styles: Option<String>, - /// Format string for git blame commit metadata. Available placeholders are - /// "{timestamp}", "{author}", and "{commit}". - #[structopt( + #[clap( long = "blame-format", default_value = "{timestamp:<15} {author:<15.14} {commit:<8}" )] + /// Format string for git blame commit metadata. + /// + /// Available placeholders are "{timestamp}", "{author}", and "{commit}". pub blame_format: String, - /// Separator between the commit metadata and code sections of a line of git blame output. - #[structopt(long = "blame-separator", default_value = "│")] + #[clap(long = "blame-separator", default_value = "│")] + /// Separator between the commit metadata and code sections of a git blame line. pub blame_separator: String, - #[structopt(long = "blame-separator-style")] - /// Style (foreground, background, attributes) for the separator between the commit metadata and - /// code sections of a line of `git blame` output. + #[clap(long = "blame-separator-style")] + /// Style string for the separator between the commit metadata and code sections of a git blame line. pub blame_separator_style: Option<String>, - #[structopt(long = "blame-code-style")] - /// Style (foreground, background, attributes) for the code section of a line of `git blame` - /// output. By default the code will be syntax-highlighted with the same background color as the - /// blame format section of the line (the background color is determined by blame-palette). E.g. + #[clap(long = "blame-code-style")] + /// Style string for the code section of a git blame line. + /// + /// By default the code will be syntax-highlighted with the same background color as the blame + /// format section of the line (the background color is determined by blame-palette). E.g. /// setting this option to 'syntax' will syntax-highlight the code with no background color. pub blame_code_style: Option<String>, + #[clap(long = "blame-palette")] /// Background colors used for git blame lines (space-separated string). - /// Lines added by the same commit are painted with the same color; colors - /// are recycled as needed. - #[structopt(long = "blame-palette")] + /// + /// Lines added by the same commit are painted with the same color; colors are recycled as + /// needed. pub blame_palette: Option<String>, - /// Format of `git blame` timestamp in raw git output received by delta. - #[structopt( + #[clap( long = "blame-timestamp-format", default_value = "%Y-%m-%d %H:%M:%S %z" )] + /// Format of `git blame` timestamp in raw git output received by delta. pub blame_timestamp_format: String, - #[structopt(long = "grep-match-line-style")] - /// Style (foreground, background, attributes) for matching lines of code in - /// grep output. See STYLES section. Defaults to plus-style. + #[clap(long = "grep-match-line-style")] + /// Style string for matching lines of grep output. + /// + /// See STYLES section. Defaults to plus-style. pub grep_match_line_style: Option<String>, - #[structopt(long = "grep-match-word-style")] - /// Style (foreground, background, attributes) for the specific matching - /// substrings within a matching line of code in grep output. See STYLES - /// section. Defaults to plus-style. + #[clap(long = "grep-match-word-style")] + /// Style string for the matching substrings within a matching line of grep output. + /// + /// See STYLES section. Defaults to plus-style. pub grep_match_word_style: Option<String>, - #[structopt(long = "grep-context-line-style")] - /// Style (foreground, background, attributes) for non-matching lines of - /// code in grep output. See STYLES section. Defaults to zero-style. + #[clap(long = "grep-context-line-style")] + /// Style string for non-matching lines of grep output. + /// + /// See STYLES section. Defaults to zero-style. pub grep_context_line_style: Option<String>, - #[structopt(long = "grep-file-style")] - /// Style (foreground, background, attributes) for file paths in grep - /// output. See STYLES section. Defaults to hunk-header-file-path-style. + #[clap(long = "grep-file-style")] + /// Style string for file paths in grep output. + /// + /// See STYLES section. Defaults to hunk-header-file-path-style. pub grep_file_style: Option<String>, - #[structopt(long = "grep-line-number-style")] - /// Style (foreground, background, attributes) for line numbers in grep - /// output. See STYLES section. Defaults to hunk-header-line-number-style. + #[clap(long = "grep-line-number-style")] + /// Style string for line numbers in grep output. + /// + /// See STYLES section. Defaults to hunk-header-line-number-style. pub grep_line_number_style: Option<String>, - #[structopt(long = "grep-separator-symbol", default_value = ":")] - /// Symbol used in grep output to separate file path (and line number) from - /// the line of file contents. Defaults to ":" for both match and context - /// lines, since many terminal emulators recognize constructs like - /// "/path/to/file:7:". However, standard grep output uses "-" for context + #[clap(long = "grep-separator-symbol", default_value = ":")] + /// Separator symbol printed after the file path and line number in grep output. + /// + /// Defaults to ":" for both match and context lines, since many terminal emulators recognize + /// constructs like "/path/to/file:7:". However, standard grep output uses "-" for context /// lines: set this option to "keep" to keep the original separator symbols. pub grep_separator_symbol: String, - /// Default language used for syntax highlighting when this cannot be - /// inferred from a filename. It will typically make sense to set this in - /// per-repository git config (.git/config) - #[structopt(long = "default-language")] + #[clap(long = "default-language")] + /// Default language used for syntax highlighting. + /// + /// Used when the language cannot be inferred from a filename. It will typically make sense to + /// set this in per-repository git config (.git/config) pub default_language: Option<String>, - #[structopt(long = "inline-hint-style", default_value = "blue")] - /// Style (foreground, background, attributes) for content added by delta to - /// the original diff such as special characters to highlight tabs, and the - /// symbols used to indicate wrapped lines. See STYLES section. + #[clap(long = "inline-hint-style", default_value = "blue")] + /// Style string for short inline hint text. + /// + /// This styles certain content added by delta to the original diff such as special characters + /// to highlight tabs, and the symbols used to indicate wrapped lines. See STYLES section. pub inline_hint_style: String, + #[clap(long = "word-diff-regex", default_value = r"\w+")] + /// Regular expression defining a 'word' in within-line diff algorithm. + /// /// The regular expression used to decide what a word is for the within-line highlight /// algorithm. For less fine-grained matching than the default try --word-diff-regex="\S+" /// --max-line-distance=1.0 (this is more similar to `git --word-diff`). - #[structopt(long = "word-diff-regex", default_value = r"\w+")] pub tokenization_regex: String, - /// The maximum distance between two lines for them to be inferred to be homologous. Homologous - /// line pairs are highlighted according to the deletion and insertion operations transforming - /// one into the other. - #[structopt(long = "max-line-distance", default_value = "0.6")] + #[clap(long = "max-line-distance", default_value = "0.6")] + /// Maximum line pair distance parameter in within-line diff algorithm. + /// + /// This parameter is the maximum di |