mirror of
https://github.com/helix-editor/helix.git
synced 2025-01-18 21:17:08 +04:00
Make text-width
optional in editor config
When it was only used for `:reflow` it made sense to have a default value set to `80`, but now that soft-wrapping uses this setting, keeping a default set to `80` would make soft-wrapping behave more aggressively.
This commit is contained in:
parent
6aad3fffbe
commit
b247d526d6
@ -1739,20 +1739,24 @@ fn reflow(
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
const DEFAULT_MAX_LEN: usize = 79;
|
||||
|
||||
let scrolloff = cx.editor.config().scrolloff;
|
||||
let cfg_text_width: usize = cx.editor.config().text_width;
|
||||
let cfg_text_width = cx.editor.config().text_width;
|
||||
let (view, doc) = current!(cx.editor);
|
||||
|
||||
// Find the text_width by checking the following sources in order:
|
||||
// - The passed argument in `args`
|
||||
// - The configured text-width for this language in languages.toml
|
||||
// - The configured text-width in the config.toml
|
||||
// - The configured text-width in config.toml
|
||||
// - The const default we set above
|
||||
let text_width: usize = args
|
||||
.get(0)
|
||||
.map(|num| num.parse::<usize>())
|
||||
.transpose()?
|
||||
.or_else(|| doc.language_config().and_then(|config| config.text_width))
|
||||
.unwrap_or(cfg_text_width);
|
||||
.or(cfg_text_width)
|
||||
.unwrap_or(DEFAULT_MAX_LEN);
|
||||
|
||||
let rope = doc.text();
|
||||
|
||||
|
@ -1231,7 +1231,12 @@ pub fn auto_pairs<'a>(&'a self, editor: &'a Editor) -> Option<&'a AutoPairs> {
|
||||
}
|
||||
|
||||
pub fn text_format(&self, mut viewport_width: u16, theme: Option<&Theme>) -> TextFormat {
|
||||
if let Some(text_width) = self.language_config().and_then(|config| config.text_width) {
|
||||
let config = self.config.load();
|
||||
let text_width = self
|
||||
.language_config()
|
||||
.and_then(|config| config.text_width)
|
||||
.or_else(|| config.text_width);
|
||||
if let Some(text_width) = text_width {
|
||||
// We increase max_line_len by 1 because softwrap considers the newline character
|
||||
// as part of the line length while the "typical" expectation is that this is not the case.
|
||||
// In particular other commands like :reflow do not count the line terminator.
|
||||
@ -1239,7 +1244,6 @@ pub fn text_format(&self, mut viewport_width: u16, theme: Option<&Theme>) -> Tex
|
||||
// but having the last visual line exceed the width by 1 seems like a rare edge case.
|
||||
viewport_width = viewport_width.min(text_width as u16 + 1)
|
||||
}
|
||||
let config = self.config.load();
|
||||
let soft_wrap = &config.soft_wrap;
|
||||
let tab_width = self.tab_width() as u16;
|
||||
TextFormat {
|
||||
|
@ -242,7 +242,7 @@ pub struct Config {
|
||||
/// Automatic save on focus lost. Defaults to false.
|
||||
pub auto_save: bool,
|
||||
/// Set a global text_width
|
||||
pub text_width: usize,
|
||||
pub text_width: Option<usize>,
|
||||
/// Time in milliseconds since last keypress before idle timers trigger.
|
||||
/// Used for autocompletion, set to 0 for instant. Defaults to 400ms.
|
||||
#[serde(
|
||||
@ -766,7 +766,7 @@ fn default() -> Self {
|
||||
indent_guides: IndentGuidesConfig::default(),
|
||||
color_modes: false,
|
||||
soft_wrap: SoftWrap::default(),
|
||||
text_width: 80,
|
||||
text_width: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user