mirror of https://github.com/helix-editor/helix
Merge 4855426278
into 395a71bf53
commit
d3667cc04c
|
@ -582,7 +582,7 @@ impl EditorView {
|
|||
let mut x = viewport.x;
|
||||
let current_doc = view!(editor).doc;
|
||||
|
||||
for doc in editor.documents() {
|
||||
for (idx, doc) in editor.documents().enumerate() {
|
||||
let fname = doc
|
||||
.path()
|
||||
.unwrap_or(&scratch)
|
||||
|
@ -597,6 +597,16 @@ impl EditorView {
|
|||
bufferline_inactive
|
||||
};
|
||||
|
||||
// Render the separator before the text if the current document is not first.
|
||||
if idx > 0 {
|
||||
let used_width = viewport.x.saturating_sub(x);
|
||||
let rem_width = surface.area.width.saturating_sub(used_width);
|
||||
let sep = &editor.config().bufferline.separator;
|
||||
x = surface
|
||||
.set_stringn(x, viewport.y, sep, rem_width as usize, bufferline_inactive)
|
||||
.0;
|
||||
}
|
||||
|
||||
let text = format!(" {}{} ", fname, if doc.is_modified() { "[+]" } else { "" });
|
||||
let used_width = viewport.x.saturating_sub(x);
|
||||
let rem_width = surface.area.width.saturating_sub(used_width);
|
||||
|
@ -1494,10 +1504,10 @@ impl Component for EditorView {
|
|||
let config = cx.editor.config();
|
||||
|
||||
// check if bufferline should be rendered
|
||||
use helix_view::editor::BufferLine;
|
||||
let use_bufferline = match config.bufferline {
|
||||
BufferLine::Always => true,
|
||||
BufferLine::Multiple if cx.editor.documents.len() > 1 => true,
|
||||
use helix_view::editor::BufferLineRenderMode;
|
||||
let use_bufferline = match config.bufferline.render_mode {
|
||||
BufferLineRenderMode::Always => true,
|
||||
BufferLineRenderMode::Multiple if cx.editor.documents.len() > 1 => true,
|
||||
_ => false,
|
||||
};
|
||||
|
||||
|
|
|
@ -318,6 +318,8 @@ pub struct Config {
|
|||
/// Whether to display infoboxes. Defaults to true.
|
||||
pub auto_info: bool,
|
||||
pub file_picker: FilePickerConfig,
|
||||
/// Configuration of the bufferline
|
||||
pub bufferline: BufferLineConfig,
|
||||
/// Configuration of the statusline elements
|
||||
pub statusline: StatusLineConfig,
|
||||
/// Shape for cursor in each mode
|
||||
|
@ -335,8 +337,6 @@ pub struct Config {
|
|||
pub rulers: Vec<u16>,
|
||||
#[serde(default)]
|
||||
pub whitespace: WhitespaceConfig,
|
||||
/// Persistently display open buffers along the top
|
||||
pub bufferline: BufferLine,
|
||||
/// Vertical indent width guides.
|
||||
pub indent_guides: IndentGuidesConfig,
|
||||
/// Whether to color modes with different colors. Defaults to `false`.
|
||||
|
@ -502,6 +502,35 @@ pub struct SearchConfig {
|
|||
pub wrap_around: bool,
|
||||
}
|
||||
|
||||
/// bufferline render modes
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum BufferLineRenderMode {
|
||||
/// Don't render bufferline
|
||||
#[default]
|
||||
Never,
|
||||
/// Always render
|
||||
Always,
|
||||
/// Only if multiple buffers are open
|
||||
Multiple,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "kebab-case", default, deny_unknown_fields)]
|
||||
pub struct BufferLineConfig {
|
||||
pub render_mode: BufferLineRenderMode,
|
||||
pub separator: String,
|
||||
}
|
||||
|
||||
impl Default for BufferLineConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
render_mode: BufferLineRenderMode::default(),
|
||||
separator: String::from("│"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "kebab-case", default, deny_unknown_fields)]
|
||||
pub struct StatusLineConfig {
|
||||
|
@ -684,19 +713,6 @@ impl Default for CursorShapeConfig {
|
|||
}
|
||||
}
|
||||
|
||||
/// bufferline render modes
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum BufferLine {
|
||||
/// Don't render bufferline
|
||||
#[default]
|
||||
Never,
|
||||
/// Always render
|
||||
Always,
|
||||
/// Only if multiple buffers are open
|
||||
Multiple,
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum LineNumber {
|
||||
|
@ -1022,6 +1038,7 @@ impl Default for Config {
|
|||
completion_trigger_len: 2,
|
||||
auto_info: true,
|
||||
file_picker: FilePickerConfig::default(),
|
||||
bufferline: BufferLineConfig::default(),
|
||||
statusline: StatusLineConfig::default(),
|
||||
cursor_shape: CursorShapeConfig::default(),
|
||||
true_color: false,
|
||||
|
@ -1031,7 +1048,6 @@ impl Default for Config {
|
|||
terminal: get_terminal_provider(),
|
||||
rulers: Vec::new(),
|
||||
whitespace: WhitespaceConfig::default(),
|
||||
bufferline: BufferLine::default(),
|
||||
indent_guides: IndentGuidesConfig::default(),
|
||||
color_modes: false,
|
||||
soft_wrap: SoftWrap {
|
||||
|
|
Loading…
Reference in New Issue