
### TODO - [x] Make sure keybinding shows up in pane + menu - [x] Selection tool in the editor toolbar - [x] Application Menu - [x] Add more options to pane + menu - Go to File... - Go to Symbol in Project... - [x] Add go items to the selection tool in the editor: - Go to Symbol in Editor... - Go to Line/Column... - Next Problem - Previous Problem - [x] Fix a bug where modals opened from a context menu aren't focused correclty - [x] Determine if or what needs to be done with project actions: - Difficulty is that these are exposed in the UI via clicking the project name in the titlebar or by right clicking the root entry in the project panel. But they require reading and are two clicks away. Is that sufficient? - Add Folder to Project - Open a new project - Open recent - [x] Get a style pass - [x] Implement style pass - [x] Fix the wrong actions in the selection menu - [x] Show selection tool toggle in the 'editor settings' thing - [x] Put preferences section from the app menu onto the right hand user menu - [x] Add Project menu into app menu to replace 'preferences' section, and put the rest of the actions there - [ ] ~~Adopt `...` convention for opening a surface~~ uncertain what this convention is. - [x] Adopt link styling for webview actions - [x] Set lucide hamburger for menu icon - [x] Gate application menu to only show on Linux and Windows Release Notes: - Added a 'selection and movement' tool to the Editor's toolbar, as well as controls to toggle it and a setting to remove it (`"toolbar": {"selections_menu": true/false }`) - Changed the behavior of the `+` menu in the tab bar to use standard actions and keybindings. Replaced 'New Center Terminal' with 'New Terminal', and 'New Search', with the usual 'Deploy Search'. Also added item-creating actions to this menu. - Added an 'application' menu to the titlebar to Linux and Windows builds of Zed
275 lines
8.9 KiB
Rust
275 lines
8.9 KiB
Rust
use gpui::AppContext;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use settings::{Settings, SettingsSources};
|
|
|
|
#[derive(Deserialize, Clone)]
|
|
pub struct EditorSettings {
|
|
pub cursor_blink: bool,
|
|
pub current_line_highlight: CurrentLineHighlight,
|
|
pub hover_popover_enabled: bool,
|
|
pub show_completions_on_input: bool,
|
|
pub show_completion_documentation: bool,
|
|
pub completion_documentation_secondary_query_debounce: u64,
|
|
pub use_on_type_format: bool,
|
|
pub toolbar: Toolbar,
|
|
pub scrollbar: Scrollbar,
|
|
pub gutter: Gutter,
|
|
pub vertical_scroll_margin: f32,
|
|
pub scroll_sensitivity: f32,
|
|
pub relative_line_numbers: bool,
|
|
pub seed_search_query_from_cursor: SeedQuerySetting,
|
|
pub multi_cursor_modifier: MultiCursorModifier,
|
|
pub redact_private_values: bool,
|
|
pub expand_excerpt_lines: u32,
|
|
#[serde(default)]
|
|
pub double_click_in_multibuffer: DoubleClickInMultibuffer,
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum CurrentLineHighlight {
|
|
// Don't highlight the current line.
|
|
None,
|
|
// Highlight the gutter area.
|
|
Gutter,
|
|
// Highlight the editor area.
|
|
Line,
|
|
// Highlight the full line.
|
|
All,
|
|
}
|
|
|
|
/// When to populate a new search's query based on the text under the cursor.
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum SeedQuerySetting {
|
|
/// Always populate the search query with the word under the cursor.
|
|
Always,
|
|
/// Only populate the search query when there is text selected.
|
|
Selection,
|
|
/// Never populate the search query
|
|
Never,
|
|
}
|
|
|
|
/// What to do when multibuffer is double clicked in some of its excerpts (parts of singleton buffers).
|
|
#[derive(Default, Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum DoubleClickInMultibuffer {
|
|
/// Behave as a regular buffer and select the whole word.
|
|
#[default]
|
|
Select,
|
|
/// Open the excerpt clicked as a new buffer in the new tab, if no `alt` modifier was pressed during double click.
|
|
/// Otherwise, behave as a regular buffer and select the whole word.
|
|
Open,
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
pub struct Toolbar {
|
|
pub breadcrumbs: bool,
|
|
pub quick_actions: bool,
|
|
pub selections_menu: bool,
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
pub struct Scrollbar {
|
|
pub show: ShowScrollbar,
|
|
pub git_diff: bool,
|
|
pub selected_symbol: bool,
|
|
pub search_results: bool,
|
|
pub diagnostics: bool,
|
|
pub cursors: bool,
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
pub struct Gutter {
|
|
pub line_numbers: bool,
|
|
pub code_actions: bool,
|
|
pub folds: bool,
|
|
}
|
|
|
|
/// When to show the scrollbar in the editor.
|
|
///
|
|
/// Default: auto
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum ShowScrollbar {
|
|
/// Show the scrollbar if there's important information or
|
|
/// follow the system's configured behavior.
|
|
Auto,
|
|
/// Match the system's configured behavior.
|
|
System,
|
|
/// Always show the scrollbar.
|
|
Always,
|
|
/// Never show the scrollbar.
|
|
Never,
|
|
}
|
|
|
|
/// The key to use for adding multiple cursors
|
|
///
|
|
/// Default: alt
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum MultiCursorModifier {
|
|
Alt,
|
|
#[serde(alias = "cmd", alias = "ctrl")]
|
|
CmdOrCtrl,
|
|
}
|
|
|
|
#[derive(Clone, Default, Serialize, Deserialize, JsonSchema)]
|
|
pub struct EditorSettingsContent {
|
|
/// Whether the cursor blinks in the editor.
|
|
///
|
|
/// Default: true
|
|
pub cursor_blink: Option<bool>,
|
|
/// How to highlight the current line in the editor.
|
|
///
|
|
/// Default: all
|
|
pub current_line_highlight: Option<CurrentLineHighlight>,
|
|
/// Whether to show the informational hover box when moving the mouse
|
|
/// over symbols in the editor.
|
|
///
|
|
/// Default: true
|
|
pub hover_popover_enabled: Option<bool>,
|
|
|
|
/// Whether to pop the completions menu while typing in an editor without
|
|
/// explicitly requesting it.
|
|
///
|
|
/// Default: true
|
|
pub show_completions_on_input: Option<bool>,
|
|
/// Whether to display inline and alongside documentation for items in the
|
|
/// completions menu.
|
|
///
|
|
/// Default: true
|
|
pub show_completion_documentation: Option<bool>,
|
|
/// The debounce delay before re-querying the language server for completion
|
|
/// documentation when not included in original completion list.
|
|
///
|
|
/// Default: 300 ms
|
|
pub completion_documentation_secondary_query_debounce: Option<u64>,
|
|
/// Whether to use additional LSP queries to format (and amend) the code after
|
|
/// every "trigger" symbol input, defined by LSP server capabilities.
|
|
///
|
|
/// Default: true
|
|
pub use_on_type_format: Option<bool>,
|
|
/// Toolbar related settings
|
|
pub toolbar: Option<ToolbarContent>,
|
|
/// Scrollbar related settings
|
|
pub scrollbar: Option<ScrollbarContent>,
|
|
/// Gutter related settings
|
|
pub gutter: Option<GutterContent>,
|
|
/// The number of lines to keep above/below the cursor when auto-scrolling.
|
|
///
|
|
/// Default: 3.
|
|
pub vertical_scroll_margin: Option<f32>,
|
|
/// Scroll sensitivity multiplier. This multiplier is applied
|
|
/// to both the horizontal and vertical delta values while scrolling.
|
|
///
|
|
/// Default: 1.0
|
|
pub scroll_sensitivity: Option<f32>,
|
|
/// Whether the line numbers on editors gutter are relative or not.
|
|
///
|
|
/// Default: false
|
|
pub relative_line_numbers: Option<bool>,
|
|
/// When to populate a new search's query based on the text under the cursor.
|
|
///
|
|
/// Default: always
|
|
pub seed_search_query_from_cursor: Option<SeedQuerySetting>,
|
|
/// The key to use for adding multiple cursors
|
|
///
|
|
/// Default: alt
|
|
pub multi_cursor_modifier: Option<MultiCursorModifier>,
|
|
/// Hide the values of variables in `private` files, as defined by the
|
|
/// private_files setting. This only changes the visual representation,
|
|
/// the values are still present in the file and can be selected / copied / pasted
|
|
///
|
|
/// Default: false
|
|
pub redact_private_values: Option<bool>,
|
|
|
|
/// How many lines to expand the multibuffer excerpts by default
|
|
///
|
|
/// Default: 3
|
|
pub expand_excerpt_lines: Option<u32>,
|
|
|
|
/// What to do when multibuffer is double clicked in some of its excerpts
|
|
/// (parts of singleton buffers).
|
|
///
|
|
/// Default: select
|
|
pub double_click_in_multibuffer: Option<DoubleClickInMultibuffer>,
|
|
}
|
|
|
|
// Toolbar related settings
|
|
#[derive(Clone, Default, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
pub struct ToolbarContent {
|
|
/// Whether to display breadcrumbs in the editor toolbar.
|
|
///
|
|
/// Default: true
|
|
pub breadcrumbs: Option<bool>,
|
|
/// Whether to display quick action buttons in the editor toolbar.
|
|
///
|
|
/// Default: true
|
|
pub quick_actions: Option<bool>,
|
|
|
|
/// Whether to show the selections menu in the editor toolbar
|
|
///
|
|
/// Default: true
|
|
pub selections_menu: Option<bool>,
|
|
}
|
|
|
|
/// Scrollbar related settings
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq)]
|
|
pub struct ScrollbarContent {
|
|
/// When to show the scrollbar in the editor.
|
|
///
|
|
/// Default: auto
|
|
pub show: Option<ShowScrollbar>,
|
|
/// Whether to show git diff indicators in the scrollbar.
|
|
///
|
|
/// Default: true
|
|
pub git_diff: Option<bool>,
|
|
/// Whether to show buffer search result indicators in the scrollbar.
|
|
///
|
|
/// Default: true
|
|
pub search_results: Option<bool>,
|
|
/// Whether to show selected symbol occurrences in the scrollbar.
|
|
///
|
|
/// Default: true
|
|
pub selected_symbol: Option<bool>,
|
|
/// Whether to show diagnostic indicators in the scrollbar.
|
|
///
|
|
/// Default: true
|
|
pub diagnostics: Option<bool>,
|
|
/// Whether to show cursor positions in the scrollbar.
|
|
///
|
|
/// Default: true
|
|
pub cursors: Option<bool>,
|
|
}
|
|
|
|
/// Gutter related settings
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
pub struct GutterContent {
|
|
/// Whether to show line numbers in the gutter.
|
|
///
|
|
/// Default: true
|
|
pub line_numbers: Option<bool>,
|
|
/// Whether to show code action buttons in the gutter.
|
|
///
|
|
/// Default: true
|
|
pub code_actions: Option<bool>,
|
|
/// Whether to show fold buttons in the gutter.
|
|
///
|
|
/// Default: true
|
|
pub folds: Option<bool>,
|
|
}
|
|
|
|
impl Settings for EditorSettings {
|
|
const KEY: Option<&'static str> = None;
|
|
|
|
type FileContent = EditorSettingsContent;
|
|
|
|
fn load(
|
|
sources: SettingsSources<Self::FileContent>,
|
|
_: &mut AppContext,
|
|
) -> anyhow::Result<Self> {
|
|
sources.json_merge()
|
|
}
|
|
}
|