Completions (#1029)

* Handle `shell-completions` before anything else

* Update CHANGELOG.md
This commit is contained in:
Rayzeq 2024-02-20 22:42:09 +01:00 committed by GitHub
parent 387d344690
commit d96586c209
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 18 additions and 11 deletions

View File

@ -4,6 +4,9 @@ All notable changes to eww will be listed here, starting at changes since versio
## Unreleased
### Fixes
- The `shell-completions` subcommand is now run before anything is set up
## [0.5.0] (17.02.2024)
### BREAKING CHANGES

View File

@ -6,7 +6,6 @@ use crate::{
paths::EwwPaths,
};
use anyhow::{Context, Result};
use clap::CommandFactory as _;
use std::{
io::{Read, Write},
os::unix::net::UnixStream,
@ -21,9 +20,6 @@ pub fn handle_client_only_action(paths: &EwwPaths, action: ActionClientOnly) ->
.spawn()?
.wait()?;
}
ActionClientOnly::ShellCompletions { shell } => {
clap_complete::generate(shell, &mut opts::RawOpt::command(), "eww", &mut std::io::stdout());
}
}
Ok(())
}

View File

@ -5,6 +5,7 @@ extern crate gtk;
extern crate gtk_layer_shell as gtk_layer_shell;
use anyhow::{Context, Result};
use clap::CommandFactory as _;
use daemon_response::{DaemonResponse, DaemonResponseReceiver};
use display_backend::DisplayBackend;
use opts::ActionWithServer;
@ -44,6 +45,11 @@ fn main() {
pretty_env_logger::formatted_timed_builder().filter(Some("eww"), log_level_filter).init();
}
if let opts::Action::ShellCompletions { shell } = opts.action {
clap_complete::generate(shell, &mut opts::RawOpt::command(), "eww", &mut std::io::stdout());
return;
}
#[allow(unused)]
let use_wayland = opts.force_wayland || detect_wayland();
#[cfg(all(feature = "wayland", feature = "x11"))]
@ -87,6 +93,7 @@ fn run<B: DisplayBackend>(opts: opts::Opt, eww_binary_name: String, display_back
.context("Failed to initialize eww paths")?;
let should_restart = match &opts.action {
opts::Action::ShellCompletions { .. } => unreachable!(),
opts::Action::Daemon => opts.restart,
opts::Action::WithServer(action) => opts.restart && action.can_start_daemon(),
opts::Action::ClientOnly(_) => false,
@ -100,6 +107,7 @@ fn run<B: DisplayBackend>(opts: opts::Opt, eww_binary_name: String, display_back
}
let would_show_logs = match opts.action {
opts::Action::ShellCompletions { .. } => unreachable!(),
opts::Action::ClientOnly(action) => {
client::handle_client_only_action(&paths, action)?;
false

View File

@ -59,6 +59,13 @@ pub(super) struct RawOpt {
#[derive(Subcommand, Debug, Serialize, Deserialize, PartialEq)]
pub enum Action {
/// Generate a shell completion script
ShellCompletions {
#[arg(short, long)]
#[serde(with = "serde_shell")]
shell: clap_complete::shells::Shell,
},
/// Start the Eww daemon.
#[command(name = "daemon", alias = "d")]
Daemon,
@ -75,13 +82,6 @@ pub enum ActionClientOnly {
/// Print and watch the eww logs
#[command(name = "logs")]
Logs,
/// Generate a shell completion script
ShellCompletions {
#[arg(short, long)]
#[serde(with = "serde_shell")]
shell: clap_complete::shells::Shell,
},
}
#[derive(Subcommand, Debug, Serialize, Deserialize, PartialEq)]