mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 15:41:02 +00:00
Add support for shell completion (#340)
* Add build script to generate completion scripts * Add installation doc for the shell auto-completion
This commit is contained in:
@@ -101,3 +101,39 @@ You can start a development chain with:
|
||||
```
|
||||
cargo run -- --dev
|
||||
```
|
||||
|
||||
## Shell completion
|
||||
|
||||
The Polkadot cli command supports shell auto-completion. For this to work, you will need to run the completion script matching you build and system.
|
||||
|
||||
Assuming you built a release version using `cargo build --release` and use `bash` run the following:
|
||||
```
|
||||
source target/release/completion-scripts/polkadot.bash
|
||||
```
|
||||
|
||||
You can find completion scripts for:
|
||||
- bash
|
||||
- fish
|
||||
- zsh
|
||||
- elvish
|
||||
- powershell
|
||||
|
||||
To make this change persistent, you can proceed as follow:
|
||||
### First install
|
||||
```
|
||||
COMPL_DIR=$HOME/.completion
|
||||
mkdir -p $COMPL_DIR
|
||||
cp -f target/release/completion-scripts/polkadot.bash $COMPL_DIR/
|
||||
echo "source $COMPL_DIR/polkadot.bash" >> $HOME/.bash_profile
|
||||
source $HOME/.bash_profile
|
||||
```
|
||||
|
||||
### Update
|
||||
When you build a new version of Polkadot, the following will ensure you auto-completion script matches the current binary:
|
||||
```
|
||||
COMPL_DIR=$HOME/.completion
|
||||
mkdir -p $COMPL_DIR
|
||||
cp -f target/release/completion-scripts/polkadot.bash $COMPL_DIR/
|
||||
source $HOME/.bash_profile
|
||||
```
|
||||
|
||||
|
||||
@@ -3,9 +3,10 @@ name = "polkadot-cli"
|
||||
version = "0.2.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
description = "Polkadot node implementation in Rust."
|
||||
build = "build.rs"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "2.27", features = ["yaml"] }
|
||||
clap = { version = "~2.32", features = ["yaml"] }
|
||||
backtrace = "0.3"
|
||||
env_logger = "0.4"
|
||||
error-chain = "0.12"
|
||||
@@ -42,3 +43,6 @@ polkadot-runtime = { path = "../runtime" }
|
||||
polkadot-service = { path = "../service" }
|
||||
polkadot-transaction-pool = { path = "../transaction-pool" }
|
||||
names = "0.11.0"
|
||||
|
||||
[build-dependencies]
|
||||
clap = "~2.32"
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#[macro_use]
|
||||
extern crate clap;
|
||||
|
||||
use std::fs;
|
||||
use std::env;
|
||||
use clap::Shell;
|
||||
use std::path::Path;
|
||||
|
||||
fn main() {
|
||||
build_shell_completion();
|
||||
}
|
||||
|
||||
/// Build shell completion scripts for all known shells
|
||||
/// Full list in https://github.com/kbknapp/clap-rs/blob/e9d0562a1dc5dfe731ed7c767e6cee0af08f0cf9/src/app/parser.rs#L123
|
||||
fn build_shell_completion() {
|
||||
let shells = [Shell::Bash, Shell::Fish, Shell::Zsh, Shell::Elvish, Shell::PowerShell];
|
||||
for shell in shells.iter() {
|
||||
build_completion(shell);
|
||||
}
|
||||
}
|
||||
|
||||
/// Build the shell auto-completion for a given Shell
|
||||
fn build_completion(shell: &Shell) {
|
||||
let yml = load_yaml!("src/cli.yml");
|
||||
|
||||
let outdir = match env::var_os("OUT_DIR") {
|
||||
None => return,
|
||||
Some(dir) => dir,
|
||||
};
|
||||
let path = Path::new(&outdir)
|
||||
.parent().unwrap()
|
||||
.parent().unwrap()
|
||||
.parent().unwrap()
|
||||
.join("completion-scripts");
|
||||
|
||||
fs::create_dir(&path).ok();
|
||||
|
||||
let mut app = clap::App::from_yaml(&yml);
|
||||
app.gen_completions(
|
||||
"polkadot",
|
||||
*shell,
|
||||
&path);
|
||||
}
|
||||
Reference in New Issue
Block a user