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
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,16 @@ jobs:
- name: Run cargo clippy
run: cargo clippy -p framework_lib -p framework_tool -- -D warnings

- name: Check shell completions are up to date
run: |
cargo build -p framework_tool
./target/debug/framework_tool --generate-completions bash > /tmp/bash_completions
./target/debug/framework_tool --generate-completions zsh > /tmp/zsh_completions
./target/debug/framework_tool --generate-completions fish > /tmp/fish_completions
diff completions/bash/framework_tool /tmp/bash_completions || { echo "Shell completions are out of date. See completions/README.md for regeneration instructions."; exit 1; }
diff completions/zsh/_framework_tool /tmp/zsh_completions || { echo "Shell completions are out of date. See completions/README.md for regeneration instructions."; exit 1; }
diff completions/fish/framework_tool.fish /tmp/fish_completions || { echo "Shell completions are out of date. See completions/README.md for regeneration instructions."; exit 1; }

# Just make sure doc generation works
doc:
name: Generate docs
Expand Down
10 changes: 10 additions & 0 deletions Cargo.lock

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

54 changes: 54 additions & 0 deletions completions/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Shell Completions

Shell completions for `framework_tool` are auto-generated using `clap_complete`.

## Regenerating

If you modify the CLI arguments, regenerate completions:

```bash
cargo build
./target/debug/framework_tool --generate-completions bash > completions/bash/framework_tool
./target/debug/framework_tool --generate-completions zsh > completions/zsh/_framework_tool
./target/debug/framework_tool --generate-completions fish > completions/fish/framework_tool.fish
```

## Testing

`framework_tool` must be in your PATH for completions to work.

**Bash:**
```bash
export PATH="$PWD/target/debug:$PATH"
source completions/bash/framework_tool
framework_tool --<TAB>
```

**Zsh:**
```zsh
export PATH="$PWD/target/debug:$PATH"
source completions/zsh/_framework_tool
framework_tool --<TAB>
```

**Fish:**
```fish
fish_add_path $PWD/target/debug
source completions/fish/framework_tool.fish
framework_tool --<TAB>
```

**PowerShell:**
```powershell
framework_tool --generate-completions powershell | Invoke-Expression
framework_tool --<TAB>
```

## Persistent Installation

Linux: Should be done by downstream package maintainers.

Windows/PowerShell:
```powershell
framework_tool --generate-completions powershell >> $PROFILE
```
289 changes: 209 additions & 80 deletions completions/bash/framework_tool
Original file line number Diff line number Diff line change
@@ -1,85 +1,214 @@
#!/usr/bin/env bash

# Bash completion for framework_tool

_framework_tool() {
local options
options=(
"--flash-gpu-descriptor"
"-v" "--verbose"
"-q" "--quiet"
"--versions"
"--version"
"--features"
"--esrt"
"--device"
"--compare-version"
"--power"
"--thermal"
"--sensors"
"--pdports"
"--info"
"--pd-info"
"--dp-hdmi-info"
"--dp-hdmi-update"
"--audio-card-info"
"--privacy"
"--pd-bin"
"--ec-bin"
"--capsule"
"--dump"
"--ho2-capsule"
"--dump-ec-flash"
"--flash-ec"
"--flash-ro-ec"
"--flash-rw-ec"
"--intrusion"
"--inputdeck"
"--inputdeck-mode"
"--charge-limit"
"--get-gpio"
"--fp-led-level"
"--fp-brightness"
"--kblight"
"--rgbkbd"
"--tablet-mode"
"--touchscreen-enable"
"--console"
"--reboot-ec"
"--hash"
"--driver"
"--pd-addrs"
"--pd-ports"
"-t" "--test"
"-h" "--help"
)

local devices=("bios" "ec" "pd0" "pd1" "rtm01" "rtm23" "ac-left" "ac-right")
local inputdeck_modes=("auto" "off" "on")
local console_modes=("recent" "follow")
local drivers=("portio" "cros-ec" "windows")
local brightness_options=("high" "medium" "low" "ultra-low")

local current_word prev_word
current_word="${COMP_WORDS[COMP_CWORD]}"
prev_word="${COMP_WORDS[COMP_CWORD-1]}"

# Handle options
if [[ $COMP_CWORD -eq 1 ]]; then
COMPREPLY=( $(compgen -W "${options[*]}" -- "$current_word") )
elif [[ $prev_word == "--device" ]]; then
COMPREPLY=( $(compgen -W "${devices[*]}" -- "$current_word") )
elif [[ $prev_word == "--inputdeck-mode" ]]; then
COMPREPLY=( $(compgen -W "${inputdeck_modes[*]}" -- "$current_word") )
elif [[ $prev_word == "--console" ]]; then
COMPREPLY=( $(compgen -W "${console_modes[*]}" -- "$current_word") )
elif [[ $prev_word == "--driver" ]]; then
COMPREPLY=( $(compgen -W "${drivers[*]}" -- "$current_word") )
elif [[ $prev_word == "--fp-brightness" ]]; then
COMPREPLY=( $(compgen -W "${brightness_options[*]}" -- "$current_word") )
local i cur prev opts cmd
COMPREPLY=()
if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
cur="$2"
else
cur="${COMP_WORDS[COMP_CWORD]}"
fi
prev="$3"
cmd=""
opts=""

for i in "${COMP_WORDS[@]:0:COMP_CWORD}"
do
case "${cmd},${i}" in
",$1")
cmd="framework_tool"
;;
*)
;;
esac
done

return 0
case "${cmd}" in
framework_tool)
opts="-v -q -t -f -h --flash-gpu-descriptor --verbose --quiet --versions --version --features --esrt --device --compare-version --power --thermal --sensors --fansetduty --fansetrpm --autofanctrl --pdports --info --pd-info --pd-reset --pd-disable --pd-enable --dp-hdmi-info --dp-hdmi-update --audio-card-info --privacy --pd-bin --ec-bin --capsule --dump --h2o-capsule --dump-ec-flash --flash-ec --flash-ro-ec --flash-rw-ec --intrusion --inputdeck --inputdeck-mode --expansion-bay --charge-limit --charge-current-limit --charge-rate-limit --get-gpio --fp-led-level --fp-brightness --kblight --remap-key --rgbkbd --ps2-enable --tablet-mode --touchscreen-enable --stylus-battery --console --reboot-ec --ec-hib-delay --uptimeinfo --s0ix-counter --hash --driver --pd-addrs --pd-ports --test --test-retimer --boardid --force --dry-run --flash-gpu-descriptor-file --dump-gpu-descriptor-file --nvidia --generate-completions --help"
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
--flash-gpu-descriptor)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--device)
COMPREPLY=($(compgen -W "bios ec pd0 pd1 rtm01 rtm23 ac-left ac-right" -- "${cur}"))
return 0
;;
--compare-version)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--fansetduty)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--fansetrpm)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--autofanctrl)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--pd-reset)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--pd-disable)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--pd-enable)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--dp-hdmi-update)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--pd-bin)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--ec-bin)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--capsule)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--dump)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--h2o-capsule)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--dump-ec-flash)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--flash-ec)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--flash-ro-ec)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--flash-rw-ec)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--inputdeck-mode)
COMPREPLY=($(compgen -W "auto off on" -- "${cur}"))
return 0
;;
--charge-limit)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--charge-current-limit)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--charge-rate-limit)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--get-gpio)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--fp-led-level)
COMPREPLY=($(compgen -W "high medium low ultra-low auto" -- "${cur}"))
return 0
;;
--fp-brightness)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--kblight)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--remap-key)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--rgbkbd)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--ps2-enable)
COMPREPLY=($(compgen -W "true false" -- "${cur}"))
return 0
;;
--tablet-mode)
COMPREPLY=($(compgen -W "auto tablet laptop" -- "${cur}"))
return 0
;;
--touchscreen-enable)
COMPREPLY=($(compgen -W "true false" -- "${cur}"))
return 0
;;
--console)
COMPREPLY=($(compgen -W "recent follow" -- "${cur}"))
return 0
;;
--reboot-ec)
COMPREPLY=($(compgen -W "reboot jump-ro jump-rw cancel-jump disable-jump" -- "${cur}"))
return 0
;;
--ec-hib-delay)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--hash)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--driver)
COMPREPLY=($(compgen -W "portio cros-ec windows" -- "${cur}"))
return 0
;;
--pd-addrs)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--pd-ports)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--flash-gpu-descriptor-file)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--dump-gpu-descriptor-file)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--generate-completions)
COMPREPLY=($(compgen -W "bash elvish fish powershell zsh" -- "${cur}"))
return 0
;;
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
esac
}

complete -F _framework_tool framework_tool
if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
complete -F _framework_tool -o nosort -o bashdefault -o default framework_tool
else
complete -F _framework_tool -o bashdefault -o default framework_tool
fi
Loading