Skip to content

Commit

Permalink
added manpage generation
Browse files Browse the repository at this point in the history
  • Loading branch information
I60R committed Dec 27, 2022
1 parent c8a6539 commit 64a60d6
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 54 deletions.
17 changes: 17 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Expand Up @@ -8,7 +8,7 @@ license = "MIT"
readme = "README.md"
edition = "2021"
rust-version = "1.65.0"
build = "build_shell_completions.rs"
build = "build_shell_completions_and_man_pages.rs"


[dependencies]
Expand All @@ -34,6 +34,7 @@ clap = { version = "4.0.32", features = ["wrap_help", "derive", "env"] }
once_cell = "1.16.0"
clap = { version = "4.0.32", features = ["derive", "env"] }
clap_complete = "4.0.7"
clap_mangen = "0.2.6"


[profile.release]
Expand Down
18 changes: 11 additions & 7 deletions PKGBUILD
Expand Up @@ -30,16 +30,20 @@ package() {
install -D -m755 "target/release/nv" "$pkgdir/usr/bin/nv"

# Find last build directory where completions was generated
completions_dir=$(find "target" -name "shell_completions" -type d -printf "%T+\t%p\n" | sort | awk 'NR==1{print $2}')
out_dir=$(find "target" -name "assets" -type d -printf "%T+\t%p\n" | sort | awk 'NR==1{print $2}')

# Install shell completions
install -D -m644 "$completions_dir/_page" "$pkgdir/usr/share/zsh/site-functions/_page"
install -D -m644 "$completions_dir/page.bash" "$pkgdir/usr/share/bash-completion/completions/page.bash"
install -D -m644 "$completions_dir/page.fish" "$pkgdir/usr/share/fish/completions/page.fish"
install -D -m644 "$out_dir/_page" "$pkgdir/usr/share/zsh/site-functions/_page"
install -D -m644 "$out_dir/page.bash" "$pkgdir/usr/share/bash-completion/completions/page.bash"
install -D -m644 "$out_dir/page.fish" "$pkgdir/usr/share/fish/completions/page.fish"

install -D -m644 "$completions_dir/_nv" "$pkgdir/usr/share/zsh/site-functions/_nv"
install -D -m644 "$completions_dir/nv.bash" "$pkgdir/usr/share/bash-completion/completions/nv.bash"
install -D -m644 "$completions_dir/nv.fish" "$pkgdir/usr/share/fish/completions/nv.fish"
install -D -m644 "$out_dir/_nv" "$pkgdir/usr/share/zsh/site-functions/_nv"
install -D -m644 "$out_dir/nv.bash" "$pkgdir/usr/share/bash-completion/completions/nv.bash"
install -D -m644 "$out_dir/nv.fish" "$pkgdir/usr/share/fish/completions/nv.fish"

# Install man pages
install -D -m644 "$out_dir/page.1" "$pkgdir/usr/share/man/man1/page.1"
install -D -m644 "$out_dir/nv.1" "$pkgdir/usr/share/man/man1/nv.1"

# Install MIT license
install -D -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
Expand Down
46 changes: 0 additions & 46 deletions build_shell_completions.rs

This file was deleted.

84 changes: 84 additions & 0 deletions build_shell_completions_and_man_pages.rs
@@ -0,0 +1,84 @@
use clap_complete::shells::{Zsh, Bash, Fish};
use clap::CommandFactory;

use std::{fs, path::{PathBuf, Path}};


#[cfg(feature = "pager")]
#[allow(dead_code)]
mod pager {
include!("src/pager/cli.rs");
}

#[cfg(feature = "picker")]
#[allow(dead_code)]
mod picker {
include!("src/picker/cli.rs");
}


fn main() -> Result<(), Box<dyn std::error::Error>> {
let out_dir = PathBuf::from(
std::env::var("OUT_DIR")
.unwrap()
).join("assets");

fs::create_dir_all(&out_dir)?;
eprintln!("Assets would be generated in: {}", out_dir.display());

#[cfg(feature = "pager")]
{
let mut app = pager::Options::command();
clap_complete::generate_to(Zsh , &mut app, "page", &out_dir)?;
clap_complete::generate_to(Bash, &mut app, "page", &out_dir)?;
clap_complete::generate_to(Fish, &mut app, "page", &out_dir)?;

let page_1 = Path::new(&out_dir)
.join("page.1");
let mut page_1 = fs::File::create(page_1)?;
let man = clap_mangen::Man::new(app);
man.render_title(&mut page_1)?;
man.render_description_section(&mut page_1)?;
let mut options_section = vec![];
man.render_options_section(&mut options_section)?;
let options_section = String::from_utf8(options_section)?
.replace("{n} ~ ~ ~", "")
.replace("{n} ^ ~ ~ ~", "")
.replace("[", "【\\fB")
.replace("]", "\\fR】")
.replace("【\\fBFILE\\fR】", "[FILE]..")
.replace("【\\fB\\fIFILE\\fR\\fR】", "[FILE]..");
use std::io::Write;
write!(page_1, "{options_section}")?;
man.render_authors_section(&mut page_1)?;
}

#[cfg(feature = "picker")]
{
let mut app = picker::Options::command();
clap_complete::generate_to(Zsh , &mut app, "nv", &out_dir)?;
clap_complete::generate_to(Bash, &mut app, "nv", &out_dir)?;
clap_complete::generate_to(Fish, &mut app, "nv", &out_dir)?;

let nv_1 = Path::new(&out_dir)
.join("nv.1");
let mut nv_1 = fs::File::create(nv_1)?;
let man = clap_mangen::Man::new(app);
man.render_title(&mut nv_1)?;
man.render_description_section(&mut nv_1)?;
let mut options_section = vec![];
man.render_options_section(&mut options_section)?;
let options_section = String::from_utf8(options_section)?
.replace("{n} ~ ~ ~", "")
.replace("{n} ^ ~ ~ ~", "")
.replace("[", "【\\fB")
.replace("]", "\\fR】")
.replace("【\\fBFILE\\fR】", "[FILE]..")
.replace("【\\fB\\fIFILE\\fR\\fR】", "[FILE]..");
use std::io::Write;
write!(nv_1, "{options_section}")?;
man.render_authors_section(&mut nv_1)?;
}

Ok(())
}

0 comments on commit 64a60d6

Please sign in to comment.