Skip to content

Commit

Permalink
Completions (#1029)
Browse files Browse the repository at this point in the history
* Handle `shell-completions` before anything else

* Update CHANGELOG.md
  • Loading branch information
Rayzeq authored Feb 20, 2024
1 parent 387d344 commit d96586c
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 11 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 0 additions & 4 deletions crates/eww/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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(())
}
Expand Down
8 changes: 8 additions & 0 deletions crates/eww/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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"))]
Expand Down Expand Up @@ -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,
Expand All @@ -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
Expand Down
14 changes: 7 additions & 7 deletions crates/eww/src/opts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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)]
Expand Down

0 comments on commit d96586c

Please sign in to comment.