diff --git a/defaults/keymaps-macos.toml b/defaults/keymaps-macos.toml index a33703ed..ad26d0ef 100644 --- a/defaults/keymaps-macos.toml +++ b/defaults/keymaps-macos.toml @@ -1,3 +1,9 @@ +# --------------------------------- Window --------------------------------------------- + +[[keymaps]] +command = "window_close" +key = "Meta+Shift+W" + # --------------------------------- General -------------------------------------------- [[keymaps]] diff --git a/defaults/keymaps-nonmacos.toml b/defaults/keymaps-nonmacos.toml index 74964adf..109f548a 100644 --- a/defaults/keymaps-nonmacos.toml +++ b/defaults/keymaps-nonmacos.toml @@ -1,3 +1,9 @@ +# --------------------------------- Window --------------------------------------------- + +[[keymaps]] +command = "close_window" +key = "Alt+F4" + # --------------------------------- General -------------------------------------------- [[keymaps]] diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 3fa1d349..799c1951 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -273,6 +273,10 @@ pub enum LapceWorkbenchCommand { #[strum(serialize = "new_window")] NewWindow, + #[strum(message = "Close Window")] + #[strum(serialize = "close_window")] + CloseWindow, + #[strum(message = "New File")] #[strum(serialize = "new_file")] NewFile, @@ -566,6 +570,7 @@ pub enum LapceUICommand { FilterItems, RestartToUpdate(PathBuf, ReleaseInfo), NewWindow(WindowId), + CloseWindow(WindowId), ReloadWindow, CloseBuffers(Vec), RequestPaintRect(Rect), diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 26f36e04..ff4a6bdf 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -1401,6 +1401,13 @@ pub fn run_workbench_command( Target::Global, )); } + LapceWorkbenchCommand::CloseWindow => { + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::CloseWindow(self.window_id), + Target::Auto, + )); + } LapceWorkbenchCommand::ReloadWindow => { ctx.submit_command(Command::new( LAPCE_UI_COMMAND, diff --git a/lapce-ui/src/app.rs b/lapce-ui/src/app.rs index 4b017235..56de535d 100644 --- a/lapce-ui/src/app.rs +++ b/lapce-ui/src/app.rs @@ -498,6 +498,15 @@ fn command( ctx.new_window(desc); return druid::Handled::Yes; } + LapceUICommand::CloseWindow(window_id) => { + ctx.submit_command(Command::new( + druid::commands::CLOSE_WINDOW, + (), + Target::Window(*window_id), + )); + let _ = data.db.save_app(data); + return druid::Handled::Yes; + } _ => (), } } diff --git a/lapce-ui/src/window.rs b/lapce-ui/src/window.rs index ece10217..4a90c465 100644 --- a/lapce-ui/src/window.rs +++ b/lapce-ui/src/window.rs @@ -829,7 +829,11 @@ pub fn window_controls( commands.push(( close_rect, - Command::new(druid::commands::QUIT_APP, (), Target::Global), + Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::CloseWindow(window_id), + Target::Auto, + ), )); let hover_color = {