Forked from 3v1n0/fish-shell-bash-complete-function.sh
Created
December 10, 2024 10:11
-
-
Save leonmax/ca41e3b03230b4c6fa3c91d5870c0917 to your computer and use it in GitHub Desktop.
Use bash completions in Fish Shell
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/fish | |
# You can add this to your ~/.config/fish/config.fish | |
function __fish_complete_bash | |
set cmd (commandline -cp) | |
bash -c "source get-bash-completions.sh; get_completions '$cmd'" | |
end | |
# Set the tool to use bash completions | |
complete -xc git -a '(__fish_complete_bash)' | |
complete -xc gdbus -a '(__fish_complete_bash)' | |
complete -xc java -a '(__fish_complete_bash)' | |
# You could also apply this to all the completions, maybe ignoring the fish ones via | |
for completion in /usr/share/bash-completion/completions/* | |
complete -xc (basename $completion) -a '(__fish_complete_bash)' | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Author: Brian Beffa <[email protected]> | |
# Original source: https://brbsix.github.io/2015/11/29/accessing-tab-completion-programmatically-in-bash/ | |
# License: LGPLv3 (http://www.gnu.org/licenses/lgpl-3.0.txt) | |
# | |
get_completions(){ | |
local completion COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS COMPREPLY=() | |
# load bash-completion if necessary | |
declare -F _completion_loader &>/dev/null || { | |
if [ -f /etc/bash_completion ]; then | |
source /etc/bash_completion | |
elif [ -f /usr/share/bash-completion/bash_completion ]; then | |
source /usr/share/bash-completion/bash_completion | |
fi | |
} | |
COMP_LINE=$* | |
COMP_POINT=${#COMP_LINE} | |
eval set -- "$@" | |
COMP_WORDS=("$@") | |
# add '' to COMP_WORDS if the last character of the command line is a space | |
[[ ${COMP_LINE[@]: -1} = ' ' ]] && COMP_WORDS+=('') | |
# index of the last word | |
COMP_CWORD=$(( ${#COMP_WORDS[@]} - 1 )) | |
# load completion | |
_completion_loader "$1" | |
# detect completion | |
completion=$(complete -p "$1" 2>/dev/null | awk '{print $(NF-1)}') | |
# ensure completion was detected | |
[[ -n $completion ]] || return 1 | |
# execute completion function | |
"$completion" | |
# print completions to stdout | |
for ((i = 0; i < ${#COMPREPLY[@]}; i++)); do | |
echo "${COMPREPLY[$i]%%*( )}" | |
done | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment