Detailed changes
@@ -17,18 +17,8 @@
"cmd-enter": "menu::SecondaryConfirm",
"escape": "menu::Cancel",
"ctrl-c": "menu::Cancel",
- "cmd-{": "pane::ActivatePrevItem",
- "cmd-}": "pane::ActivateNextItem",
- "alt-cmd-left": "pane::ActivatePrevItem",
- "alt-cmd-right": "pane::ActivateNextItem",
- "cmd-w": "pane::CloseActiveItem",
- "alt-cmd-t": "pane::CloseInactiveItems",
- "ctrl-alt-cmd-w": "workspace::CloseInactiveTabsAndPanes",
- "cmd-k u": "pane::CloseCleanItems",
- "cmd-k cmd-w": "pane::CloseAllItems",
"cmd-shift-w": "workspace::CloseWindow",
- "cmd-s": "workspace::Save",
- "cmd-shift-s": "workspace::SaveAs",
+ "cmd-o": "workspace::Open",
"cmd-=": "zed::IncreaseBufferFontSize",
"cmd-+": "zed::IncreaseBufferFontSize",
"cmd--": "zed::DecreaseBufferFontSize",
@@ -38,15 +28,7 @@
"cmd-h": "zed::Hide",
"alt-cmd-h": "zed::HideOthers",
"cmd-m": "zed::Minimize",
- "ctrl-cmd-f": "zed::ToggleFullScreen",
- "cmd-n": "workspace::NewFile",
- "cmd-shift-n": "workspace::NewWindow",
- "cmd-o": "workspace::Open",
- "alt-cmd-o": "projects::OpenRecent",
- "alt-cmd-b": "branches::OpenRecent",
- "ctrl-~": "workspace::NewTerminal",
- "ctrl-`": "terminal_panel::ToggleFocus",
- "shift-escape": "workspace::ToggleZoom"
+ "ctrl-cmd-f": "zed::ToggleFullScreen"
}
},
{
@@ -284,6 +266,15 @@
{
"context": "Pane",
"bindings": {
+ "cmd-{": "pane::ActivatePrevItem",
+ "cmd-}": "pane::ActivateNextItem",
+ "alt-cmd-left": "pane::ActivatePrevItem",
+ "alt-cmd-right": "pane::ActivateNextItem",
+ "cmd-w": "pane::CloseActiveItem",
+ "alt-cmd-t": "pane::CloseInactiveItems",
+ "ctrl-alt-cmd-w": "workspace::CloseInactiveTabsAndPanes",
+ "cmd-k u": "pane::CloseCleanItems",
+ "cmd-k cmd-w": "pane::CloseAllItems",
"cmd-f": "project_search::ToggleFocus",
"cmd-g": "search::SelectNextMatch",
"cmd-shift-g": "search::SelectPrevMatch",
@@ -389,6 +380,15 @@
{
"context": "Workspace",
"bindings": {
+ "alt-cmd-o": "projects::OpenRecent",
+ "alt-cmd-b": "branches::OpenRecent",
+ "ctrl-~": "workspace::NewTerminal",
+ "cmd-s": "workspace::Save",
+ "cmd-shift-s": "workspace::SaveAs",
+ "cmd-n": "workspace::NewFile",
+ "cmd-shift-n": "workspace::NewWindow",
+ "ctrl-`": "terminal_panel::ToggleFocus",
+ "shift-escape": "workspace::ToggleZoom",
"cmd-1": ["workspace::ActivatePane", 0],
"cmd-2": ["workspace::ActivatePane", 1],
"cmd-3": ["workspace::ActivatePane", 2],
@@ -212,27 +212,31 @@ pub fn init(app_state: Arc<AppState>, cx: &mut AppContext) {
init_settings(cx);
notifications::init(cx);
- // cx.add_global_action({
- // let app_state = Arc::downgrade(&app_state);
- // move |_: &Open, cx: &mut AppContext| {
- // let mut paths = cx.prompt_for_paths(PathPromptOptions {
- // files: true,
- // directories: true,
- // multiple: true,
- // });
+ cx.on_action(Workspace::close_global);
+ cx.on_action(restart);
+
+ cx.on_action({
+ let app_state = Arc::downgrade(&app_state);
+ move |_: &Open, cx: &mut AppContext| {
+ let mut paths = cx.prompt_for_paths(PathPromptOptions {
+ files: true,
+ directories: true,
+ multiple: true,
+ });
- // if let Some(app_state) = app_state.upgrade() {
- // cx.spawn(move |mut cx| async move {
- // if let Some(paths) = paths.recv().await.flatten() {
- // cx.update(|cx| {
- // open_paths(&paths, &app_state, None, cx).detach_and_log_err(cx)
- // });
- // }
- // })
- // .detach();
- // }
- // }
- // });
+ if let Some(app_state) = app_state.upgrade() {
+ cx.spawn(move |mut cx| async move {
+ if let Some(paths) = paths.await.log_err().flatten() {
+ cx.update(|cx| {
+ open_paths(&paths, &app_state, None, cx).detach_and_log_err(cx)
+ })
+ .ok();
+ }
+ })
+ .detach();
+ }
+ }
+ });
}
type ProjectItemBuilders =
@@ -1076,7 +1080,6 @@ impl Workspace {
}
}
- // todo!(Non-window-actions)
pub fn close_global(_: &CloseWindow, cx: &mut AppContext) {
cx.windows().iter().find(|window| {
window
@@ -1094,21 +1097,18 @@ impl Workspace {
});
}
- pub fn close(
- &mut self,
- _: &CloseWindow,
- cx: &mut ViewContext<Self>,
- ) -> Option<Task<Result<()>>> {
+ pub fn close_window(&mut self, _: &CloseWindow, cx: &mut ViewContext<Self>) {
let window = cx.window_handle();
let prepare = self.prepare_to_close(false, cx);
- Some(cx.spawn(|_, mut cx| async move {
+ cx.spawn(|_, mut cx| async move {
if prepare.await? {
window.update(&mut cx, |_, cx| {
cx.remove_window();
})?;
}
- Ok(())
- }))
+ anyhow::Ok(())
+ })
+ .detach_and_log_err(cx)
}
pub fn prepare_to_close(
@@ -2325,42 +2325,44 @@ impl Workspace {
}))
}
- // pub fn follow_next_collaborator(
- // &mut self,
- // _: &FollowNextCollaborator,
- // cx: &mut ViewContext<Self>,
- // ) -> Option<Task<Result<()>>> {
- // let collaborators = self.project.read(cx).collaborators();
- // let next_leader_id = if let Some(leader_id) = self.leader_for_pane(&self.active_pane) {
- // let mut collaborators = collaborators.keys().copied();
- // for peer_id in collaborators.by_ref() {
- // if peer_id == leader_id {
- // break;
- // }
- // }
- // collaborators.next()
- // } else if let Some(last_leader_id) =
- // self.last_leaders_by_pane.get(&self.active_pane.downgrade())
- // {
- // if collaborators.contains_key(last_leader_id) {
- // Some(*last_leader_id)
- // } else {
- // None
+ // pub fn follow_next_collaborator(
+ // &mut self,
+ // _: &FollowNextCollaborator,
+ // cx: &mut ViewContext<Self>,
+ // ) {
+ // let collaborators = self.project.read(cx).collaborators();
+ // let next_leader_id = if let Some(leader_id) = self.leader_for_pane(&self.active_pane) {
+ // let mut collaborators = collaborators.keys().copied();
+ // for peer_id in collaborators.by_ref() {
+ // if peer_id == leader_id {
+ // break;
// }
+ // }
+ // collaborators.next()
+ // } else if let Some(last_leader_id) =
+ // self.last_leaders_by_pane.get(&self.active_pane.downgrade())
+ // {
+ // if collaborators.contains_key(last_leader_id) {
+ // Some(*last_leader_id)
// } else {
// None
- // };
-
- // let pane = self.active_pane.clone();
- // let Some(leader_id) = next_leader_id.or_else(|| collaborators.keys().copied().next())
- // else {
- // return None;
- // };
- // if Some(leader_id) == self.unfollow(&pane, cx) {
- // return None;
// }
- // self.follow(leader_id, cx)
+ // } else {
+ // None
+ // };
+
+ // let pane = self.active_pane.clone();
+ // let Some(leader_id) = next_leader_id.or_else(|| collaborators.keys().copied().next())
+ // else {
+ // return;
+ // };
+ // if Some(leader_id) == self.unfollow(&pane, cx) {
+ // return;
// }
+ // if let Some(task) = self.follow(leader_id, cx) {
+ // task.detach();
+ // }
+ // }
pub fn follow(
&mut self,
@@ -2409,6 +2411,18 @@ impl Workspace {
self.start_following(leader_id, cx)
}
+ // // if you're already following, find the right pane and focus it.
+ // for (pane, state) in &self.follower_states {
+ // if leader_id == state.leader_id {
+ // cx.focus(pane);
+ // return None;
+ // }
+ // }
+
+ // // Otherwise, follow.
+ // self.start_following(leader_id, cx)
+ // }
+
pub fn unfollow(&mut self, pane: &View<Pane>, cx: &mut ViewContext<Self>) -> Option<PeerId> {
let state = self.follower_states.remove(pane)?;
let leader_id = state.leader_id;
@@ -3219,13 +3233,8 @@ impl Workspace {
fn actions(&self, div: Div, cx: &mut ViewContext<Self>) -> Div {
self.add_workspace_actions_listeners(div, cx)
- // cx.add_async_action(Workspace::open);
- // cx.add_async_action(Workspace::follow_next_collaborator);
- // cx.add_async_action(Workspace::close);
.on_action(cx.listener(Self::close_inactive_items_and_panes))
.on_action(cx.listener(Self::close_all_items_and_panes))
- // cx.add_global_action(Workspace::close_global);
- // cx.add_global_action(restart);
.on_action(cx.listener(Self::save_all))
.on_action(cx.listener(Self::add_folder_to_project))
.on_action(cx.listener(|workspace, _: &Unfollow, cx| {
@@ -3274,6 +3283,9 @@ impl Workspace {
workspace.close_all_docks(cx);
}),
)
+ .on_action(cx.listener(Workspace::open))
+ .on_action(cx.listener(Workspace::close_window))
+
// cx.add_action(Workspace::activate_pane_at_index);
// cx.add_action(|workspace: &mut Workspace, _: &ReopenClosedItem, cx| {
// workspace.reopen_closed_item(cx).detach();
@@ -168,9 +168,7 @@ pub fn initialize_workspace(app_state: Arc<AppState>, cx: &mut AppContext) {
cx.on_window_should_close(move |cx| {
handle
.update(cx, |workspace, cx| {
- if let Some(task) = workspace.close(&Default::default(), cx) {
- task.detach_and_log_err(cx);
- }
+ workspace.close_window(&Default::default(), cx);
false
})
.unwrap_or(true)