aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Heinritz <jon.heinritz@protonmail.com>2025-03-10 21:14:34 +0100
committerGitHub <noreply@github.com>2025-03-10 20:14:34 +0000
commit87b6c1262544a463703a34d8404ef339b7d18536 (patch)
tree97334c2dd0de14ec3602096ce806e58b3b048e6d
parentb351f6ff220560d96a260d8dd3ad794000923481 (diff)
downloadniri-87b6c1262544a463703a34d8404ef339b7d18536.tar.gz
niri-87b6c1262544a463703a34d8404ef339b7d18536.tar.bz2
niri-87b6c1262544a463703a34d8404ef339b7d18536.zip
Add Shell completions (#1226)
* feat(cli): add subcommand to generate shell completions * Update src/cli.rs Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com> --------- Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com>
-rw-r--r--Cargo.lock10
-rw-r--r--Cargo.toml1
-rw-r--r--src/cli.rs3
-rw-r--r--src/main.rs6
4 files changed, 19 insertions, 1 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 3a089b20..91fca63b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -636,6 +636,15 @@ dependencies = [
]
[[package]]
+name = "clap_complete"
+version = "4.5.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e3040c8291884ddf39445dc033c70abc2bc44a42f0a3a00571a0f483a83f0cd"
+dependencies = [
+ "clap",
+]
+
+[[package]]
name = "clap_derive"
version = "4.5.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2219,6 +2228,7 @@ dependencies = [
"calloop 0.14.2",
"calloop-wayland-source 0.4.0",
"clap",
+ "clap_complete",
"directories",
"drm-ffi",
"fastrand",
diff --git a/Cargo.toml b/Cargo.toml
index 2dfcd155..557222bf 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -59,6 +59,7 @@ bitflags.workspace = true
bytemuck = { version = "1.22.0", features = ["derive"] }
calloop = { version = "0.14.2", features = ["executor", "futures-io"] }
clap = { workspace = true, features = ["string"] }
+clap_complete = "4.5.45"
directories = "6.0.0"
drm-ffi = "0.9.0"
fastrand = "2.3.0"
diff --git a/src/cli.rs b/src/cli.rs
index 9b106485..a01bc109 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -2,6 +2,7 @@ use std::ffi::OsString;
use std::path::PathBuf;
use clap::{Parser, Subcommand};
+use clap_complete::Shell;
use niri_ipc::{Action, OutputAction};
use crate::utils::version;
@@ -54,6 +55,8 @@ pub enum Sub {
},
/// Cause a panic to check if the backtraces are good.
Panic,
+ /// Generate shell completions.
+ Completions { shell: Shell },
}
#[derive(Subcommand)]
diff --git a/src/main.rs b/src/main.rs
index e11cd112..fd34ae82 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -9,7 +9,7 @@ use std::path::{Path, PathBuf};
use std::process::Command;
use std::{env, mem};
-use clap::Parser;
+use clap::{CommandFactory, Parser};
use directories::ProjectDirs;
use niri::cli::{Cli, Sub};
#[cfg(feature = "dbus")]
@@ -106,6 +106,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
return Ok(());
}
Sub::Panic => cause_panic(),
+ Sub::Completions { shell } => {
+ clap_complete::generate(shell, &mut Cli::command(), "niri", &mut io::stdout());
+ return Ok(());
+ }
}
}