mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-10-31 07:04:04 +00:00 
			
		
		
		
	Merge pull request #2309 from johnmatthiggins/master
Added -S flag for truncating long lines
This commit is contained in:
		| @@ -1,6 +1,7 @@ | |||||||
| # unreleased | # unreleased | ||||||
|  |  | ||||||
| ## Features | ## Features | ||||||
|  | - Implemented `-S` and `--chop-long-lines` flags as aliases for `--wrap=never`. See #2309 (@johnmatthiggins) | ||||||
|  |  | ||||||
| ## Bugfixes | ## Bugfixes | ||||||
|  |  | ||||||
|   | |||||||
| @@ -161,17 +161,21 @@ impl App { | |||||||
|                 }), |                 }), | ||||||
|             show_nonprintable: self.matches.get_flag("show-all"), |             show_nonprintable: self.matches.get_flag("show-all"), | ||||||
|             wrapping_mode: if self.interactive_output || maybe_term_width.is_some() { |             wrapping_mode: if self.interactive_output || maybe_term_width.is_some() { | ||||||
|                 match self.matches.get_one::<String>("wrap").map(|s| s.as_str()) { |                 if !self.matches.contains_id("chop-long-lines") { | ||||||
|                     Some("character") => WrappingMode::Character, |                     match self.matches.get_one::<String>("wrap").map(|s| s.as_str()) { | ||||||
|                     Some("never") => WrappingMode::NoWrapping(true), |                         Some("character") => WrappingMode::Character, | ||||||
|                     Some("auto") | None => { |                         Some("never") => WrappingMode::NoWrapping(true), | ||||||
|                         if style_components.plain() { |                         Some("auto") | None => { | ||||||
|                             WrappingMode::NoWrapping(false) |                             if style_components.plain() { | ||||||
|                         } else { |                                 WrappingMode::NoWrapping(false) | ||||||
|                             WrappingMode::Character |                             } else { | ||||||
|  |                                 WrappingMode::Character | ||||||
|  |                             } | ||||||
|                         } |                         } | ||||||
|  |                         _ => unreachable!("other values for --wrap are not allowed"), | ||||||
|                     } |                     } | ||||||
|                     _ => unreachable!("other values for --wrap are not allowed"), |                 } else { | ||||||
|  |                     WrappingMode::NoWrapping(true) | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 // We don't have the tty width when piping to another program. |                 // We don't have the tty width when piping to another program. | ||||||
|   | |||||||
| @@ -201,6 +201,13 @@ pub fn build_app(interactive_output: bool) -> Command<'static> { | |||||||
|                            The '--terminal-width' option can be used in addition to \ |                            The '--terminal-width' option can be used in addition to \ | ||||||
|                            control the output width."), |                            control the output width."), | ||||||
|         ) |         ) | ||||||
|  |         .arg( | ||||||
|  |             Arg::new("chop-long-lines") | ||||||
|  |                 .long("chop-long-lines") | ||||||
|  |                 .short('S') | ||||||
|  |                 .takes_value(false) | ||||||
|  |                 .help("Truncate all lines longer than screen width. Alias for '--wrap=never'."), | ||||||
|  |         ) | ||||||
|         .arg( |         .arg( | ||||||
|             Arg::new("terminal-width") |             Arg::new("terminal-width") | ||||||
|                 .long("terminal-width") |                 .long("terminal-width") | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								tests/examples/long-single-line.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tests/examples/long-single-line.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyz | ||||||
| @@ -1499,6 +1499,47 @@ fn ignored_suffix_arg() { | |||||||
|         .stderr(""); |         .stderr(""); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | fn wrapping_test(wrap_flag: &str, expect_wrap: bool) { | ||||||
|  |     let expected = match expect_wrap { | ||||||
|  |         true => | ||||||
|  |             "abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcde\nfghigklmnopqrstuvxyz\n", | ||||||
|  |         false => | ||||||
|  |             "abcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyzabcdefghigklmnopqrstuvxyz\n", | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     bat() | ||||||
|  |         .arg(wrap_flag) | ||||||
|  |         .arg("--style=rule") | ||||||
|  |         .arg("--color=never") | ||||||
|  |         .arg("--decorations=always") | ||||||
|  |         .arg("--terminal-width=80") | ||||||
|  |         .arg("long-single-line.txt") | ||||||
|  |         .assert() | ||||||
|  |         .success() | ||||||
|  |         .stdout(expected.to_owned()) | ||||||
|  |         .stderr(""); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[test] | ||||||
|  | fn no_line_wrapping_when_set_to_never() { | ||||||
|  |     wrapping_test("--wrap=never", false); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[test] | ||||||
|  | fn line_wrapping_when_auto() { | ||||||
|  |     wrapping_test("--wrap=auto", true); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[test] | ||||||
|  | fn no_line_wrapping_with_s_flag() { | ||||||
|  |     wrapping_test("-S", false); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[test] | ||||||
|  | fn no_wrapping_with_chop_long_lines() { | ||||||
|  |     wrapping_test("--chop-long-lines", false); | ||||||
|  | } | ||||||
|  |  | ||||||
| #[test] | #[test] | ||||||
| fn highlighting_is_skipped_on_long_lines() { | fn highlighting_is_skipped_on_long_lines() { | ||||||
|     let expected = "\u{1b}[38;5;231m{\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;208mapi\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;231m:\u{1b}[0m\n".to_owned() + |     let expected = "\u{1b}[38;5;231m{\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;208mapi\u{1b}[0m\u{1b}[38;5;208m\"\u{1b}[0m\u{1b}[38;5;231m:\u{1b}[0m\n".to_owned() + | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user