pub struct MarginManager {
pub left_config: MarginConfig,
pub right_config: MarginConfig,
/* private fields */
}Expand description
Manages margins and annotations for a buffer This is similar to OverlayManager - a general-purpose primitive for margin decorations
Line indicators use byte-position markers that automatically adjust when the buffer is edited. This ensures indicators stay anchored to the content they represent.
Fields§
§left_config: MarginConfigConfiguration for left margin
right_config: MarginConfigConfiguration for right margin
Implementations§
Source§impl MarginManager
impl MarginManager
Sourcepub fn without_line_numbers() -> Self
pub fn without_line_numbers() -> Self
Create a margin manager with line numbers disabled
Sourcepub fn adjust_for_insert(&mut self, position: usize, length: usize)
pub fn adjust_for_insert(&mut self, position: usize, length: usize)
Adjust all indicator markers after an insertion Call this when text is inserted into the buffer
Sourcepub fn adjust_for_delete(&mut self, position: usize, length: usize)
pub fn adjust_for_delete(&mut self, position: usize, length: usize)
Adjust all indicator markers after a deletion Call this when text is deleted from the buffer
Sourcepub fn set_line_indicator(
&mut self,
byte_offset: usize,
namespace: String,
indicator: LineIndicator,
) -> MarkerId
pub fn set_line_indicator( &mut self, byte_offset: usize, namespace: String, indicator: LineIndicator, ) -> MarkerId
Set a line indicator at a byte position for a specific namespace
The indicator is anchored to the byte position and will automatically shift when text is inserted or deleted before it.
Returns the marker ID that can be used to remove or update the indicator.
Sourcepub fn remove_line_indicator(&mut self, marker_id: MarkerId, namespace: &str)
pub fn remove_line_indicator(&mut self, marker_id: MarkerId, namespace: &str)
Remove line indicator for a specific namespace at a marker
Sourcepub fn clear_line_indicators_for_namespace(&mut self, namespace: &str)
pub fn clear_line_indicators_for_namespace(&mut self, namespace: &str)
Clear all line indicators for a specific namespace
Sourcepub fn get_line_indicator(
&self,
line: usize,
get_line_fn: impl Fn(usize) -> usize,
) -> Option<&LineIndicator>
pub fn get_line_indicator( &self, line: usize, get_line_fn: impl Fn(usize) -> usize, ) -> Option<&LineIndicator>
Get the line indicator for a specific line number
This looks up all indicators whose markers resolve to the given line. Returns the highest priority indicator if multiple exist on the same line.
Note: This is O(n) in the number of indicators. For rendering, prefer
get_indicators_in_viewport which is more efficient.
Sourcepub fn get_indicators_for_viewport(
&self,
viewport_start: usize,
viewport_end: usize,
get_line_fn: impl Fn(usize) -> usize,
) -> BTreeMap<usize, LineIndicator>
pub fn get_indicators_for_viewport( &self, viewport_start: usize, viewport_end: usize, get_line_fn: impl Fn(usize) -> usize, ) -> BTreeMap<usize, LineIndicator>
Get indicators within a viewport byte range
Only queries markers within viewport_start..viewport_end, avoiding
iteration over the entire indicator set.
Returns a map of line_number -> highest priority indicator for that line.
The get_line_fn converts byte offsets to line numbers.
Sourcepub fn get_indicator_position(&self, marker_id: MarkerId) -> Option<usize>
pub fn get_indicator_position(&self, marker_id: MarkerId) -> Option<usize>
Get the byte position of a line indicator’s marker.
Returns the current byte offset for the given marker ID, or None if the marker doesn’t exist. Useful for testing that marker positions survive undo/redo correctly.
Sourcepub fn query_indicator_range(
&self,
start: usize,
end: usize,
) -> Vec<(MarkerId, usize, usize)>
pub fn query_indicator_range( &self, start: usize, end: usize, ) -> Vec<(MarkerId, usize, usize)>
Query indicator markers in a byte range. Returns (MarkerId, start, end) tuples for markers in the range.
Sourcepub fn set_indicator_position(
&mut self,
marker_id: MarkerId,
new_position: usize,
)
pub fn set_indicator_position( &mut self, marker_id: MarkerId, new_position: usize, )
Move a line indicator’s marker to a new byte position.
This is a no-op if the marker doesn’t exist in the indicator markers. Used to restore displaced markers after undo.
Sourcepub fn add_annotation(&mut self, annotation: MarginAnnotation)
pub fn add_annotation(&mut self, annotation: MarginAnnotation)
Add an annotation to a margin
Sourcepub fn remove_by_id(&mut self, id: &str)
pub fn remove_by_id(&mut self, id: &str)
Remove all annotations with a specific ID
Sourcepub fn remove_at_line(&mut self, line: usize, position: MarginPosition)
pub fn remove_at_line(&mut self, line: usize, position: MarginPosition)
Remove all annotations at a specific line
Sourcepub fn clear_position(&mut self, position: MarginPosition)
pub fn clear_position(&mut self, position: MarginPosition)
Clear all annotations in a position
Sourcepub fn get_at_line(
&self,
line: usize,
position: MarginPosition,
) -> Option<&[MarginAnnotation]>
pub fn get_at_line( &self, line: usize, position: MarginPosition, ) -> Option<&[MarginAnnotation]>
Get all annotations at a specific line
Sourcepub fn render_line(
&self,
line: usize,
position: MarginPosition,
_buffer_total_lines: usize,
show_line_numbers: bool,
) -> MarginContent
pub fn render_line( &self, line: usize, position: MarginPosition, _buffer_total_lines: usize, show_line_numbers: bool, ) -> MarginContent
Get the content to render for a specific line in a margin.
If show_line_numbers is true and position is Left, includes line number.
Sourcepub fn update_width_for_buffer(
&mut self,
buffer_total_lines: usize,
show_line_numbers: bool,
)
pub fn update_width_for_buffer( &mut self, buffer_total_lines: usize, show_line_numbers: bool, )
Update the left margin width based on buffer size.
Only adjusts width when show_line_numbers is true.
Sourcepub fn left_total_width(&self) -> usize
pub fn left_total_width(&self) -> usize
Get the total width of the left margin (including separator) The separator includes the diagnostic indicator when present
Sourcepub fn right_total_width(&self) -> usize
pub fn right_total_width(&self) -> usize
Get the total width of the right margin (including separator)
Sourcepub fn configure_for_line_numbers(&mut self, show_line_numbers: bool)
pub fn configure_for_line_numbers(&mut self, show_line_numbers: bool)
Configure left margin layout for line number visibility.
This adjusts left_config.enabled and left_config.width so that
left_total_width() returns the correct gutter size for the given
show_line_numbers setting. Called at render time with the per-split
line number state.
Sourcepub fn annotation_count(&self, position: MarginPosition) -> usize
pub fn annotation_count(&self, position: MarginPosition) -> usize
Get the number of annotations in a position
Trait Implementations§
Source§impl Debug for MarginManager
impl Debug for MarginManager
Auto Trait Implementations§
impl Freeze for MarginManager
impl !RefUnwindSafe for MarginManager
impl !Send for MarginManager
impl !Sync for MarginManager
impl Unpin for MarginManager
impl UnsafeUnpin for MarginManager
impl !UnwindSafe for MarginManager
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more