mirror of
https://github.com/zed-industries/zed.git
synced 2024-10-26 08:31:04 +00:00
Make Finder "Open With" work correctly
This commit is contained in:
parent
9e5612348c
commit
765773cfe6
1 changed files with 25 additions and 0 deletions
|
@ -75,6 +75,7 @@ fn main() {
|
||||||
};
|
};
|
||||||
|
|
||||||
let (cli_connections_tx, mut cli_connections_rx) = mpsc::unbounded();
|
let (cli_connections_tx, mut cli_connections_rx) = mpsc::unbounded();
|
||||||
|
let (open_paths_tx, open_paths_rx) = mpsc::unbounded();
|
||||||
app.on_open_urls(move |urls, _| {
|
app.on_open_urls(move |urls, _| {
|
||||||
if let Some(server_name) = urls.first().and_then(|url| url.strip_prefix("zed-cli://")) {
|
if let Some(server_name) = urls.first().and_then(|url| url.strip_prefix("zed-cli://")) {
|
||||||
if let Some(cli_connection) = connect_to_cli(server_name).log_err() {
|
if let Some(cli_connection) = connect_to_cli(server_name).log_err() {
|
||||||
|
@ -83,6 +84,16 @@ fn main() {
|
||||||
.map_err(|_| anyhow!("no listener for cli connections"))
|
.map_err(|_| anyhow!("no listener for cli connections"))
|
||||||
.log_err();
|
.log_err();
|
||||||
};
|
};
|
||||||
|
} else {
|
||||||
|
let paths: Vec<_> = urls
|
||||||
|
.iter()
|
||||||
|
.flat_map(|url| url.strip_prefix("file://"))
|
||||||
|
.map(|path| PathBuf::from(path))
|
||||||
|
.collect();
|
||||||
|
open_paths_tx
|
||||||
|
.unbounded_send(paths)
|
||||||
|
.map_err(|_| anyhow!("no listener for open urls requests"))
|
||||||
|
.log_err();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -175,6 +186,9 @@ fn main() {
|
||||||
|
|
||||||
cx.set_menus(menus::menus());
|
cx.set_menus(menus::menus());
|
||||||
|
|
||||||
|
cx.spawn(|cx| handle_open_paths(open_paths_rx, app_state.clone(), cx))
|
||||||
|
.detach();
|
||||||
|
|
||||||
if stdout_is_a_pty() {
|
if stdout_is_a_pty() {
|
||||||
cx.platform().activate(true);
|
cx.platform().activate(true);
|
||||||
let paths = collect_path_args();
|
let paths = collect_path_args();
|
||||||
|
@ -500,6 +514,17 @@ fn load_config_files(
|
||||||
rx
|
rx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn handle_open_paths(
|
||||||
|
mut rx: mpsc::UnboundedReceiver<Vec<PathBuf>>,
|
||||||
|
app_state: Arc<AppState>,
|
||||||
|
mut cx: AsyncAppContext,
|
||||||
|
) {
|
||||||
|
while let Some(paths) = rx.next().await {
|
||||||
|
cx.update(|cx| workspace::open_paths(&paths, &app_state, cx))
|
||||||
|
.detach();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn connect_to_cli(
|
fn connect_to_cli(
|
||||||
server_name: &str,
|
server_name: &str,
|
||||||
) -> Result<(mpsc::Receiver<CliRequest>, IpcSender<CliResponse>)> {
|
) -> Result<(mpsc::Receiver<CliRequest>, IpcSender<CliResponse>)> {
|
||||||
|
|
Loading…
Reference in a new issue