Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
source 'https://rubygems.org', cooldown: 7
source 'https://rubygems.org'

# gem 'debug'
gem 'rspec'
Expand Down
2 changes: 1 addition & 1 deletion bashly.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Gem::Specification.new do |s|
s.required_ruby_version = '>= 3.2'

s.add_dependency 'colsole', '~> 1.0'
s.add_dependency 'completely', '~> 0.7.0'
s.add_dependency 'completely', '~> 0.8.0.rc3'
s.add_dependency 'gtx', '~> 0.1.1'
s.add_dependency 'listen', '~> 3.9'
s.add_dependency 'lp', '~> 0.2.0'
Expand Down
1 change: 1 addition & 0 deletions examples/colors-usage/src/lib/colors.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ white() { print_in_color "\e[37m" "$*"; }

bold() { print_in_color "\e[1m" "$*"; }
underlined() { print_in_color "\e[4m" "$*"; }
bold_underlined() { print_in_color "\e[1;4m" "$*"; }

red_bold() { print_in_color "\e[1;31m" "$*"; }
green_bold() { print_in_color "\e[1;32m" "$*"; }
Expand Down
277 changes: 202 additions & 75 deletions examples/completions/src/lib/send_completions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,104 +6,231 @@ send_completions() {
echo $'# completely (https://github.com/bashly-framework/completely)'
echo $'# Modifying it manually is not recommended'
echo $''
echo $'_cli_completions_filter() {'
echo $' local words="$1"'
echo $' local cur=${COMP_WORDS[COMP_CWORD]}'
echo $' local result=()'
echo $''
echo $' # words the user already typed (excluding the command itself)'
echo $' local used=()'
echo $' if ((COMP_CWORD > 1)); then'
echo $' used=("${COMP_WORDS[@]:1:$((COMP_CWORD - 1))}")'
echo $' fi'
echo $''
echo $' if [[ "${cur:0:1}" == "-" ]]; then'
echo $' # Completing an option: offer everything (including options)'
echo $' echo "$words"'
echo $''
echo $' else'
echo $' # Completing a non-option: offer only non-options,'
echo $' # and don\'t re-offer ones already used earlier in the line.'
echo $' for word in $words; do'
echo $' [[ "${word:0:1}" == "-" ]] && continue'
echo $''
echo $' local seen=0'
echo $' for u in "${used[@]}"; do'
echo $' if [[ "$u" == "$word" ]]; then'
echo $' seen=1'
echo $' break'
echo $' fi'
echo $' done'
echo $' ((!seen)) && result+=("$word")'
echo $' done'
echo $'_cli_completions_flag_expects_value() {'
echo $' case "$1" in'
echo $' --handler) return 0 ;;'
echo $' --user|-u) return 0 ;;'
echo $' --password|-p) return 0 ;;'
echo $' esac'
echo $''
echo $' echo "${result[*]}"'
echo $' fi'
echo $' return 1'
echo $'}'
echo $''
echo $'_cli_completions() {'
echo $' local cur=${COMP_WORDS[COMP_CWORD]}'
echo $' local compwords=()'
echo $' local prev='
echo $' if ((COMP_CWORD > 0)); then'
echo $' compwords=("${COMP_WORDS[@]:1:$((COMP_CWORD - 1))}")'
echo $' prev=${COMP_WORDS[$((COMP_CWORD - 1))]}'
echo $' fi'
echo $' local compline="${compwords[*]}"'
echo $''
echo $' COMPREPLY=()'
echo $' local completed=()'
echo $' if ((COMP_CWORD > 1)); then'
echo $' completed=("${COMP_WORDS[@]:1:$((COMP_CWORD - 1))}")'
echo $' fi'
echo $''
echo $' case "$compline" in'
echo $' \'download\'*\'--handler\')'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_cli_completions_filter "curl wget")" -- "$cur")'
echo $' ;;'
echo $' local non_options=()'
echo $' local completed_options=()'
echo $' local skip_next=0'
echo $' for word in "${completed[@]}"; do'
echo $' if ((skip_next)); then'
echo $' skip_next=0'
echo $' continue'
echo $' fi'
echo $''
echo $' if [[ "${word:0:1}" == "-" ]]; then'
echo $' completed_options+=("$word")'
echo $' if _cli_completions_flag_expects_value "$word"; then'
echo $' skip_next=1'
echo $' fi'
echo $' continue'
echo $' fi'
echo $''
echo $' non_options+=("$word")'
echo $' done'
echo $''
echo $' local route_id='
echo $' local route_word_count=-1'
echo $' local route_has_positionals=0'
echo $' local positional_index=0'
echo $' if (( ${#non_options[@]} >= 0 )) &&'
echo $' (( 0 > route_word_count ))'
echo $' then'
echo $' route_id=0'
echo $' route_word_count=0'
echo $' route_has_positionals=0'
echo $' positional_index=$((${#non_options[@]} - 0))'
echo $' fi'
echo $''
echo $' \'upload\'*\'--user\')'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A user -- "$cur")'
echo $' ;;'
echo $' if (( ${#non_options[@]} >= 1 )) &&'
echo $' (( 1 > route_word_count )) &&'
echo $' [[ "${non_options[0]}" == "completions" ]]'
echo $' then'
echo $' route_id=1'
echo $' route_word_count=1'
echo $' route_has_positionals=0'
echo $' positional_index=$((${#non_options[@]} - 1))'
echo $' fi'
echo $''
echo $' \'completions\'*)'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_cli_completions_filter "--help -h")" -- "$cur")'
echo $' ;;'
echo $' if (( ${#non_options[@]} >= 1 )) &&'
echo $' (( 1 > route_word_count )) &&'
echo $' [[ "${non_options[0]}" == "download" || "${non_options[0]}" == "d" ]]'
echo $' then'
echo $' route_id=2'
echo $' route_word_count=1'
echo $' route_has_positionals=1'
echo $' positional_index=$((${#non_options[@]} - 1))'
echo $' fi'
echo $''
echo $' \'d\'*\'--handler\')'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_cli_completions_filter "curl wget")" -- "$cur")'
echo $' ;;'
echo $' if (( ${#non_options[@]} >= 1 )) &&'
echo $' (( 1 > route_word_count )) &&'
echo $' [[ "${non_options[0]}" == "upload" || "${non_options[0]}" == "u" ]]'
echo $' then'
echo $' route_id=3'
echo $' route_word_count=1'
echo $' route_has_positionals=1'
echo $' positional_index=$((${#non_options[@]} - 1))'
echo $' fi'
echo $''
echo $' \'upload\'*\'-u\')'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A user -- "$cur")'
echo $' ;;'
echo $' COMPREPLY=()'
echo $''
echo $' \'download\'*)'
echo $' compopt -o filenames 2>/dev/null'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -W "$(_cli_completions_filter "--force --handler --help -f -h")" -- "$cur")'
echo $' ;;'
echo $' if [[ -z "$route_id" ]] || { (( route_word_count == 0 )) && (( !route_has_positionals )) && [[ "${cur:0:1}" != "-" ]]; }; then'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "completions download d upload u" -- "$cur")'
echo $' return'
echo $' fi'
echo $''
echo $' \'u\'*\'--user\')'
echo $' case "$route_id:$prev" in'
echo $' 2:--handler)'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "curl wget" -- "$cur")'
echo $' return'
echo $' ;;'
echo $' 3:--user|3:-u)'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A user -- "$cur")'
echo $' return'
echo $' ;;'
echo $''
echo $' \'upload\'*)'
echo $' compopt -o filenames 2>/dev/null'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -A user -W "$(_cli_completions_filter "--help --password --user -h -p -u CHANGELOG.md README.md")" -- "$cur")'
echo $' 3:--password|3:-p)'
echo $' return'
echo $' ;;'
echo $' esac'
echo $''
echo $' \'u\'*\'-u\')'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A user -- "$cur")'
echo $' ;;'
echo $' if [[ "${cur:0:1}" == "-" ]]; then'
echo $' case "$route_id" in'
echo $' 0)'
echo $' local words=()'
echo $' local option_seen=0'
echo $' for completed_option in "${completed_options[@]}"; do'
echo $' case "$completed_option" in'
echo $' --help|-h) option_seen=1 ;;'
echo $' esac'
echo $' done'
echo $' if ((!option_seen)); then'
echo $' words+=("--help" "-h")'
echo $' fi'
echo $' local option_seen=0'
echo $' for completed_option in "${completed_options[@]}"; do'
echo $' case "$completed_option" in'
echo $' --version|-v) option_seen=1 ;;'
echo $' esac'
echo $' done'
echo $' if ((!option_seen)); then'
echo $' words+=("--version" "-v")'
echo $' fi'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "${words[*]}" -- "$cur")'
echo $' return'
echo $' ;;'
echo $' 1)'
echo $' local words=()'
echo $' local option_seen=0'
echo $' for completed_option in "${completed_options[@]}"; do'
echo $' case "$completed_option" in'
echo $' --help|-h) option_seen=1 ;;'
echo $' esac'
echo $' done'
echo $' if ((!option_seen)); then'
echo $' words+=("--help" "-h")'
echo $' fi'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "${words[*]}" -- "$cur")'
echo $' return'
echo $' ;;'
echo $' 2)'
echo $' local words=()'
echo $' local option_seen=0'
echo $' for completed_option in "${completed_options[@]}"; do'
echo $' case "$completed_option" in'
echo $' --help|-h) option_seen=1 ;;'
echo $' esac'
echo $' done'
echo $' if ((!option_seen)); then'
echo $' words+=("--help" "-h")'
echo $' fi'
echo $' local option_seen=0'
echo $' for completed_option in "${completed_options[@]}"; do'
echo $' case "$completed_option" in'
echo $' --force|-f) option_seen=1 ;;'
echo $' esac'
echo $' done'
echo $' if ((!option_seen)); then'
echo $' words+=("--force" "-f")'
echo $' fi'
echo $' local option_seen=0'
echo $' for completed_option in "${completed_options[@]}"; do'
echo $' case "$completed_option" in'
echo $' --handler) option_seen=1 ;;'
echo $' esac'
echo $' done'
echo $' if ((!option_seen)); then'
echo $' words+=("--handler")'
echo $' fi'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "${words[*]}" -- "$cur")'
echo $' return'
echo $' ;;'
echo $' 3)'
echo $' local words=()'
echo $' local option_seen=0'
echo $' for completed_option in "${completed_options[@]}"; do'
echo $' case "$completed_option" in'
echo $' --help|-h) option_seen=1 ;;'
echo $' esac'
echo $' done'
echo $' if ((!option_seen)); then'
echo $' words+=("--help" "-h")'
echo $' fi'
echo $' local option_seen=0'
echo $' for completed_option in "${completed_options[@]}"; do'
echo $' case "$completed_option" in'
echo $' --user|-u) option_seen=1 ;;'
echo $' esac'
echo $' done'
echo $' if ((!option_seen)); then'
echo $' words+=("--user" "-u")'
echo $' fi'
echo $' local option_seen=0'
echo $' for completed_option in "${completed_options[@]}"; do'
echo $' case "$completed_option" in'
echo $' --password|-p) option_seen=1 ;;'
echo $' esac'
echo $' done'
echo $' if ((!option_seen)); then'
echo $' words+=("--password" "-p")'
echo $' fi'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "${words[*]}" -- "$cur")'
echo $' return'
echo $' ;;'
echo $' esac'
echo $' fi'
echo $''
echo $' \'d\'*)'
echo $' compopt -o filenames 2>/dev/null'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -W "$(_cli_completions_filter "--force --handler --help -f -h")" -- "$cur")'
echo $' case "$route_id:$positional_index" in'
echo $' 2:0)'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")'
echo $' return'
echo $' ;;'
echo $''
echo $' \'u\'*)'
echo $' compopt -o filenames 2>/dev/null'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -A user -W "$(_cli_completions_filter "--help --password --user -h -p -u CHANGELOG.md README.md")" -- "$cur")'
echo $' 2:1)'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")'
echo $' return'
echo $' ;;'
echo $''
echo $' *)'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_cli_completions_filter "--help --version -h -v completions d download u upload")" -- "$cur")'
echo $' 3:0)'
echo $' while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "README.md CHANGELOG.md" -- "$cur")'
echo $' return'
echo $' ;;'
echo $''
echo $' esac'
echo $'} &&'
echo $' complete -F _cli_completions cli'
Expand Down
2 changes: 1 addition & 1 deletion examples/render-mandoc/docs/download.1
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.\" Automatically generated by Pandoc 3.9
.\"
.TH "download" "1" "May 2026" "Version 0.1.0" "Sample application"
.TH "download" "1" "July 2026" "Version 0.1.0" "Sample application"
.SH NAME
\f[B]download\f[R] \- Sample application
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion examples/render-mandoc/docs/download.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
% download(1) Version 0.1.0 | Sample application
% Lana Lang
% May 2026
% July 2026

NAME
==================================================
Expand Down
5 changes: 3 additions & 2 deletions lib/bashly.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ module Bashly
autoloads 'bashly/refinements', %i[ComposeRefinements]

autoloads 'bashly', %i[
CLI Config ConfigValidator Library LibrarySource LibrarySourceConfig
MessageStrings RenderContext RenderSource Settings VERSION Watch
CLI CompletionBuilder Config ConfigValidator Library LibrarySource
LibrarySourceConfig MessageStrings RenderContext RenderSource Settings
VERSION Watch
]

autoloads 'bashly/concerns', %i[
Expand Down
Loading