@@ -400,6 +400,13 @@
// 3. Never show the minimap:
// "never" (default)
"show": "never",
+ // Where to show the minimap in the editor.
+ // This setting can take two values:
+ // 1. Show the minimap on the focused editor only:
+ // "active_editor"
+ // 2. Show the minimap on all open editors:
+ // "all_editors" (default)
+ "display_in": "all_editors",
// When to show the minimap thumb.
// This setting can take two values:
// 1. Show the minimap thumb if the mouse is over the minimap:
@@ -130,6 +130,7 @@ pub struct Scrollbar {
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq)]
pub struct Minimap {
pub show: ShowMinimap,
+ pub display_in: DisplayIn,
pub thumb: MinimapThumb,
pub thumb_border: MinimapThumbBorder,
pub current_line_highlight: Option<CurrentLineHighlight>,
@@ -140,6 +141,11 @@ impl Minimap {
self.show != ShowMinimap::Never
}
+ #[inline]
+ pub fn on_active_editor(&self) -> bool {
+ self.display_in == DisplayIn::ActiveEditor
+ }
+
pub fn with_show_override(self) -> Self {
Self {
show: ShowMinimap::Always,
@@ -189,6 +195,19 @@ pub enum ShowMinimap {
Never,
}
+/// Where to show the minimap in the editor.
+///
+/// Default: all_editors
+#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
+#[serde(rename_all = "snake_case")]
+pub enum DisplayIn {
+ /// Show on all open editors.
+ #[default]
+ AllEditors,
+ /// Show the minimap on the active editor only.
+ ActiveEditor,
+}
+
/// When to show the minimap thumb.
///
/// Default: always
@@ -573,6 +592,11 @@ pub struct MinimapContent {
/// Default: never
pub show: Option<ShowMinimap>,
+ /// Where to show the minimap in the editor.
+ ///
+ /// Default: all_editors
+ pub display_in: Option<DisplayIn>,
+
/// When to show the minimap thumb.
///
/// Default: always
@@ -1777,6 +1777,19 @@ impl EditorElement {
let minimap_settings = EditorSettings::get_global(cx).minimap;
+ if minimap_settings.on_active_editor() {
+ let active_editor = self.editor.read(cx).workspace().and_then(|ws| {
+ ws.read(cx)
+ .active_pane()
+ .read(cx)
+ .active_item()
+ .and_then(|i| i.act_as::<Editor>(cx))
+ });
+ if active_editor.is_some_and(|e| e != self.editor) {
+ return None;
+ }
+ }
+
if !snapshot.mode.is_full()
|| minimap_width.is_zero()
|| matches!(