Merge pull request #2483 from zed-industries/add-scrollbar-settings

Add scrollbars setting
This commit is contained in:
Mikayla Maki 2023-05-17 14:44:08 -07:00 committed by GitHub
commit 5ef03992c5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 1 deletions

View file

@ -43,6 +43,19 @@
// 3. Draw all invisible symbols:
// "all"
"show_whitespaces": "selection",
// Whether to show the scrollbar in the editor.
// This setting can take four values:
//
// 1. Show the scrollbar if there's important information or
// follow the system's configured behavior (default):
// "auto"
// 2. Match the system's configured behavior:
// "system"
// 3. Always show the scrollbar:
// "always"
// 4. Never show the scrollbar:
// "never"
"show_scrollbars": "auto",
// Whether the screen sharing icon is shown in the os status bar.
"show_call_status_icon": true,
// Whether to use language servers to provide code intelligence.

View file

@ -516,6 +516,15 @@ pub struct EditorSnapshot {
ongoing_scroll: OngoingScroll,
}
impl EditorSnapshot {
fn has_scrollbar_info(&self) -> bool {
self.buffer_snapshot
.git_diff_hunks_in_range(0..self.max_point().row(), false)
.next()
.is_some()
}
}
#[derive(Clone, Debug)]
struct SelectionHistoryEntry {
selections: Arc<[Selection<Anchor>]>,

View file

@ -2058,7 +2058,15 @@ impl Element<Editor> for EditorElement {
));
}
let show_scrollbars = editor.scroll_manager.scrollbars_visible();
let show_scrollbars = match cx.global::<Settings>().show_scrollbars {
settings::ShowScrollbars::Auto => {
snapshot.has_scrollbar_info() || editor.scroll_manager.scrollbars_visible()
}
settings::ShowScrollbars::System => editor.scroll_manager.scrollbars_visible(),
settings::ShowScrollbars::Always => true,
settings::ShowScrollbars::Never => false,
};
let include_root = editor
.project
.as_ref()

View file

@ -46,6 +46,7 @@ pub struct Settings {
pub hover_popover_enabled: bool,
pub show_completions_on_input: bool,
pub show_call_status_icon: bool,
pub show_scrollbars: ShowScrollbars,
pub vim_mode: bool,
pub autosave: Autosave,
pub default_dock_anchor: DockAnchor,
@ -68,6 +69,16 @@ pub struct Settings {
pub base_keymap: BaseKeymap,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum ShowScrollbars {
#[default]
Auto,
System,
Always,
Never,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Default)]
pub enum BaseKeymap {
#[default]
@ -390,6 +401,8 @@ pub struct SettingsFileContent {
#[serde(default)]
pub active_pane_magnification: Option<f32>,
#[serde(default)]
pub show_scrollbars: Option<ShowScrollbars>,
#[serde(default)]
pub cursor_blink: Option<bool>,
#[serde(default)]
pub confirm_quit: Option<bool>,
@ -547,6 +560,7 @@ impl Settings {
features: Features {
copilot: defaults.features.copilot.unwrap(),
},
show_scrollbars: defaults.show_scrollbars.unwrap(),
}
}
@ -598,6 +612,7 @@ impl Settings {
merge(&mut self.autosave, data.autosave);
merge(&mut self.default_dock_anchor, data.default_dock_anchor);
merge(&mut self.base_keymap, data.base_keymap);
merge(&mut self.show_scrollbars, data.show_scrollbars);
merge(&mut self.features.copilot, data.features.copilot);
if let Some(copilot) = data.copilot {
@ -830,6 +845,7 @@ impl Settings {
auto_update: true,
base_keymap: Default::default(),
features: Features { copilot: true },
show_scrollbars: Default::default(),
}
}