mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-08 07:35:01 +03:00
Add command aliases (#14826)
Co-Authored-By: <tobbe@tlundberg.com> Release Notes: - Added `"command_aliases"` setting to let you abbreviate commands
This commit is contained in:
parent
b22718e643
commit
1dc4d4200f
@ -936,5 +936,13 @@
|
|||||||
// Examples:
|
// Examples:
|
||||||
// - "proxy": "socks5://localhost:10808"
|
// - "proxy": "socks5://localhost:10808"
|
||||||
// - "proxy": "http://127.0.0.1:10809"
|
// - "proxy": "http://127.0.0.1:10809"
|
||||||
"proxy": null
|
"proxy": null,
|
||||||
|
// Set to configure aliases for the command palette.
|
||||||
|
// When typing a query which is a key of this object, the value will be used instead.
|
||||||
|
//
|
||||||
|
// Examples:
|
||||||
|
// {
|
||||||
|
// "W": "workspace::Save"
|
||||||
|
// }
|
||||||
|
"command_aliases": {}
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,10 @@ use gpui::{
|
|||||||
use picker::{Picker, PickerDelegate};
|
use picker::{Picker, PickerDelegate};
|
||||||
|
|
||||||
use postage::{sink::Sink, stream::Stream};
|
use postage::{sink::Sink, stream::Stream};
|
||||||
|
use settings::Settings;
|
||||||
use ui::{h_flex, prelude::*, v_flex, HighlightedLabel, KeyBinding, ListItem, ListItemSpacing};
|
use ui::{h_flex, prelude::*, v_flex, HighlightedLabel, KeyBinding, ListItem, ListItemSpacing};
|
||||||
use util::ResultExt;
|
use util::ResultExt;
|
||||||
use workspace::{ModalView, Workspace};
|
use workspace::{ModalView, Workspace, WorkspaceSettings};
|
||||||
use zed_actions::OpenZedUrl;
|
use zed_actions::OpenZedUrl;
|
||||||
|
|
||||||
actions!(command_palette, [Toggle]);
|
actions!(command_palette, [Toggle]);
|
||||||
@ -248,9 +249,13 @@ impl PickerDelegate for CommandPaletteDelegate {
|
|||||||
|
|
||||||
fn update_matches(
|
fn update_matches(
|
||||||
&mut self,
|
&mut self,
|
||||||
query: String,
|
mut query: String,
|
||||||
cx: &mut ViewContext<Picker<Self>>,
|
cx: &mut ViewContext<Picker<Self>>,
|
||||||
) -> gpui::Task<()> {
|
) -> gpui::Task<()> {
|
||||||
|
let settings = WorkspaceSettings::get_global(cx);
|
||||||
|
if let Some(alias) = settings.command_aliases.get(&query) {
|
||||||
|
query = alias.to_string();
|
||||||
|
}
|
||||||
let (mut tx, mut rx) = postage::dispatch::channel(1);
|
let (mut tx, mut rx) = postage::dispatch::channel(1);
|
||||||
let task = cx.background_executor().spawn({
|
let task = cx.background_executor().spawn({
|
||||||
let mut commands = self.all_commands.clone();
|
let mut commands = self.all_commands.clone();
|
||||||
|
@ -4,15 +4,18 @@ mod vim_test_context;
|
|||||||
|
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
|
use collections::HashMap;
|
||||||
use command_palette::CommandPalette;
|
use command_palette::CommandPalette;
|
||||||
use editor::{display_map::DisplayRow, DisplayPoint};
|
use editor::{display_map::DisplayRow, DisplayPoint};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use gpui::{KeyBinding, Modifiers, MouseButton, TestAppContext};
|
use gpui::{KeyBinding, Modifiers, MouseButton, TestAppContext};
|
||||||
pub use neovim_backed_test_context::*;
|
pub use neovim_backed_test_context::*;
|
||||||
|
use settings::SettingsStore;
|
||||||
pub use vim_test_context::*;
|
pub use vim_test_context::*;
|
||||||
|
|
||||||
use indoc::indoc;
|
use indoc::indoc;
|
||||||
use search::BufferSearchBar;
|
use search::BufferSearchBar;
|
||||||
|
use workspace::WorkspaceSettings;
|
||||||
|
|
||||||
use crate::{insert::NormalBefore, motion, state::Mode, ModeIndicator};
|
use crate::{insert::NormalBefore, motion, state::Mode, ModeIndicator};
|
||||||
|
|
||||||
@ -1298,3 +1301,19 @@ async fn test_plus_minus(cx: &mut gpui::TestAppContext) {
|
|||||||
cx.simulate_shared_keystrokes("+").await;
|
cx.simulate_shared_keystrokes("+").await;
|
||||||
cx.shared_state().await.assert_matches();
|
cx.shared_state().await.assert_matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[gpui::test]
|
||||||
|
async fn test_command_alias(cx: &mut gpui::TestAppContext) {
|
||||||
|
let mut cx = VimTestContext::new(cx, true).await;
|
||||||
|
cx.update_global(|store: &mut SettingsStore, cx| {
|
||||||
|
store.update_user_settings::<WorkspaceSettings>(cx, |s| {
|
||||||
|
let mut aliases = HashMap::default();
|
||||||
|
aliases.insert("Q".to_string(), "upper".to_string());
|
||||||
|
s.command_aliases = Some(aliases)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
cx.set_state("ˇhello world", Mode::Normal);
|
||||||
|
cx.simulate_keystrokes(": Q");
|
||||||
|
cx.set_state("ˇHello world", Mode::Normal);
|
||||||
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use collections::HashMap;
|
||||||
use gpui::AppContext;
|
use gpui::AppContext;
|
||||||
use schemars::JsonSchema;
|
use schemars::JsonSchema;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
@ -15,6 +16,7 @@ pub struct WorkspaceSettings {
|
|||||||
pub drop_target_size: f32,
|
pub drop_target_size: f32,
|
||||||
pub when_closing_with_no_tabs: CloseWindowWhenNoItems,
|
pub when_closing_with_no_tabs: CloseWindowWhenNoItems,
|
||||||
pub use_system_path_prompts: bool,
|
pub use_system_path_prompts: bool,
|
||||||
|
pub command_aliases: HashMap<String, String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Default, Serialize, Deserialize, JsonSchema)]
|
#[derive(Copy, Clone, Default, Serialize, Deserialize, JsonSchema)]
|
||||||
@ -89,6 +91,11 @@ pub struct WorkspaceSettingsContent {
|
|||||||
///
|
///
|
||||||
/// Default: true
|
/// Default: true
|
||||||
pub use_system_path_prompts: Option<bool>,
|
pub use_system_path_prompts: Option<bool>,
|
||||||
|
/// Aliases for the command palette. When you type a key in this map,
|
||||||
|
/// it will be assumed to equal the value.
|
||||||
|
///
|
||||||
|
/// Default: true
|
||||||
|
pub command_aliases: Option<HashMap<String, String>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
|
@ -261,6 +261,11 @@ There are also a few Zed settings that you may also enjoy if you use vim mode:
|
|||||||
"gutter": {
|
"gutter": {
|
||||||
// disable line numbers completely:
|
// disable line numbers completely:
|
||||||
"line_numbers": false
|
"line_numbers": false
|
||||||
|
},
|
||||||
|
"command_aliases": {
|
||||||
|
"W": "w",
|
||||||
|
"Wq": "wq",
|
||||||
|
"Q": "q"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user