logiguard fork: GPUI xdg-activation keyboard-focus serial fix
Some checks failed
Update All Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Triage Project Sync (#84) / Sync triage project (push) Has been cancelled
release_nightly / notify_on_failure (push) Has been cancelled
release_nightly / check_style (push) Has been cancelled
release_nightly / run_tests_windows (push) Has been cancelled
release_nightly / clippy_windows (push) Has been cancelled
release_nightly / bundle_linux_aarch64 (push) Has been cancelled
release_nightly / bundle_linux_x86_64 (push) Has been cancelled
release_nightly / bundle_mac_aarch64 (push) Has been cancelled
release_nightly / bundle_mac_x86_64 (push) Has been cancelled
release_nightly / bundle_windows_aarch64 (push) Has been cancelled
release_nightly / bundle_windows_x86_64 (push) Has been cancelled
release_nightly / build_nix_linux_x86_64 (push) Has been cancelled
release_nightly / build_nix_mac_aarch64 (push) Has been cancelled
release_nightly / update_nightly_tag (push) Has been cancelled
Hotfix Review Monitor / check-hotfix-reviews (push) Has been cancelled
Stale PR Review Reminder / check-stale-prs (push) Has been cancelled
Update Weekly Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Bump collab-staging Tag / update-collab-staging-tag (push) Has been cancelled
compliance_check / scheduled_compliance_check (push) Has been cancelled
Some checks failed
Update All Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Triage Project Sync (#84) / Sync triage project (push) Has been cancelled
release_nightly / notify_on_failure (push) Has been cancelled
release_nightly / check_style (push) Has been cancelled
release_nightly / run_tests_windows (push) Has been cancelled
release_nightly / clippy_windows (push) Has been cancelled
release_nightly / bundle_linux_aarch64 (push) Has been cancelled
release_nightly / bundle_linux_x86_64 (push) Has been cancelled
release_nightly / bundle_mac_aarch64 (push) Has been cancelled
release_nightly / bundle_mac_x86_64 (push) Has been cancelled
release_nightly / bundle_windows_aarch64 (push) Has been cancelled
release_nightly / bundle_windows_x86_64 (push) Has been cancelled
release_nightly / build_nix_linux_x86_64 (push) Has been cancelled
release_nightly / build_nix_mac_aarch64 (push) Has been cancelled
release_nightly / update_nightly_tag (push) Has been cancelled
Hotfix Review Monitor / check-hotfix-reviews (push) Has been cancelled
Stale PR Review Reminder / check-stale-prs (push) Has been cancelled
Update Weekly Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Bump collab-staging Tag / update-collab-staging-tag (push) Has been cancelled
compliance_check / scheduled_compliance_check (push) Has been cancelled
Single-commit orphan branch: full zed-industries/zed @ 8c74db0 source tree with a 3-file patch applied (no upstream history). Patch (crates/gpui_linux/src/linux/wayland/): - serial.rs: add SerialKind::KeyboardEnter - client.rs: store wl_keyboard.enter serial; add latest_serial_of() - window.rs: activate() uses keyboard-enter serial (Mutter focus gate) Mutter honors window activation only when the token carries the keyboard- focus serial from wl_keyboard.enter; GPUI used a stale mouse-press serial. See docs/tray-window-focus-wayland.md in logiguard. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
106
crates/cli/src/cli.rs
Normal file
106
crates/cli/src/cli.rs
Normal file
@@ -0,0 +1,106 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use anyhow::Result;
|
||||
use collections::HashMap;
|
||||
pub use ipc_channel::ipc;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct IpcHandshake {
|
||||
pub requests: ipc::IpcSender<CliRequest>,
|
||||
pub responses: ipc::IpcReceiver<CliResponse>,
|
||||
}
|
||||
|
||||
/// Controls how CLI paths are opened — whether to reuse existing windows,
|
||||
/// create new ones, or add to the sidebar.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum OpenBehavior {
|
||||
/// Consult the user's `cli_default_open_behavior` setting to choose between
|
||||
/// `ExistingWindow` or `Classic`.
|
||||
#[default]
|
||||
Default,
|
||||
/// Always create a new window. No matching against existing worktrees.
|
||||
/// Corresponds to `zed -n`.
|
||||
AlwaysNew,
|
||||
/// Match broadly including subdirectories, and fall back to any existing
|
||||
/// window if no worktree matched. Corresponds to `zed -a`.
|
||||
Add,
|
||||
/// Open directories as a new workspace in the current Zed window's sidebar.
|
||||
/// Reuse existing windows for files in open worktrees.
|
||||
/// Corresponds to `zed -e`.
|
||||
ExistingWindow,
|
||||
/// New window for directories, reuse existing window for files in open
|
||||
/// worktrees. The classic pre-sidebar behavior.
|
||||
/// Corresponds to `zed --classic`.
|
||||
Classic,
|
||||
/// Replace the content of an existing window with a new workspace.
|
||||
/// Corresponds to `zed -r`.
|
||||
Reuse,
|
||||
}
|
||||
|
||||
/// The setting-level enum for configuring default behavior. This only has
|
||||
/// two values because the other modes are always explicitly requested via
|
||||
/// CLI flags.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum CliBehaviorSetting {
|
||||
/// Open directories as a new workspace in the current Zed window's sidebar.
|
||||
ExistingWindow,
|
||||
/// Classic behavior: open directories in a new window, but reuse an
|
||||
/// existing window when opening files that are already part of an open
|
||||
/// project.
|
||||
NewWindow,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub enum CliRequest {
|
||||
Open {
|
||||
paths: Vec<String>,
|
||||
urls: Vec<String>,
|
||||
diff_paths: Vec<[String; 2]>,
|
||||
diff_all: bool,
|
||||
wsl: Option<String>,
|
||||
wait: bool,
|
||||
#[serde(default)]
|
||||
open_behavior: OpenBehavior,
|
||||
env: Option<HashMap<String, String>>,
|
||||
user_data_dir: Option<String>,
|
||||
dev_container: bool,
|
||||
#[serde(default)]
|
||||
cwd: Option<PathBuf>,
|
||||
},
|
||||
SetOpenBehavior {
|
||||
behavior: CliBehaviorSetting,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub enum CliResponse {
|
||||
Ping,
|
||||
Stdout { message: String },
|
||||
Stderr { message: String },
|
||||
Exit { status: i32 },
|
||||
PromptOpenBehavior,
|
||||
}
|
||||
|
||||
/// When Zed started not as an *.app but as a binary (e.g. local development),
|
||||
/// there's a possibility to tell it to behave "regularly".
|
||||
///
|
||||
/// Note that in the main zed binary, this variable is unset after it's read for the first time,
|
||||
/// therefore it should always be accessed through the `FORCE_CLI_MODE` static.
|
||||
pub const FORCE_CLI_MODE_ENV_VAR_NAME: &str = "ZED_FORCE_CLI_MODE";
|
||||
|
||||
/// Abstracts the transport for sending CLI responses (Zed → CLI).
|
||||
///
|
||||
/// Production code uses `IpcSender<CliResponse>`. Tests can provide in-memory
|
||||
/// implementations to avoid OS-level IPC.
|
||||
pub trait CliResponseSink: Send + 'static {
|
||||
fn send(&self, response: CliResponse) -> Result<()>;
|
||||
}
|
||||
|
||||
impl CliResponseSink for ipc::IpcSender<CliResponse> {
|
||||
fn send(&self, response: CliResponse) -> Result<()> {
|
||||
ipc::IpcSender::send(self, response).map_err(|error| anyhow::anyhow!("{error}"))
|
||||
}
|
||||
}
|
||||
1449
crates/cli/src/main.rs
Normal file
1449
crates/cli/src/main.rs
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user