summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xinstall29
-rwxr-xr-xuninstall72
2 files changed, 74 insertions, 27 deletions
diff --git a/install b/install
index 7129a01a..5fe2d8ff 100755
--- a/install
+++ b/install
@@ -9,6 +9,9 @@ update_config=2
binary_arch=
allow_legacy=
shells="bash zsh fish"
+prefix='~/.fzf'
+prefix_expand=~/.fzf
+fish_dir=${XDG_CONFIG_HOME:-$HOME/.config}/fish
help() {
cat << EOF
@@ -18,6 +21,7 @@ usage: $0 [OPTIONS]
--bin Download fzf binary only; Do not generate ~/.fzf.{bash,zsh}
--all Download fzf binary and update configuration files
to enable key bindings and fuzzy completion
+ --xdg Generate files under \$XDG_CONFIG_HOME/fzf
--[no-]key-bindings Enable/disable key bindings (CTRL-T, CTRL-R, ALT-C)
--[no-]completion Enable/disable fuzzy completion (bash & zsh)
--[no-]update-rc Whether or not to update shell configuration files
@@ -43,6 +47,11 @@ for opt in "$@"; do
update_config=1
allow_legacy=1
;;
+ --xdg)
+ prefix='"${XDG_CONFIG_HOME:-$HOME/.config}"/fzf/fzf'
+ prefix_expand=${XDG_CONFIG_HOME:-$HOME/.config}/fzf/fzf
+ mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/fzf"
+ ;;
--key-bindings) key_bindings=1 ;;
--no-key-bindings) key_bindings=0 ;;
--completion) auto_completion=1 ;;
@@ -240,8 +249,8 @@ fi
echo
for shell in $shells; do
[[ "$shell" = fish ]] && continue
- echo -n "Generate ~/.fzf.$shell ... "
- src=~/.fzf.${shell}
+ src=${prefix_expand}.${shell}
+ echo -n "Generate $src ... "
fzf_completion="[[ \$- == *i* ]] && source \"$fzf_base/shell/completion.${shell}\" 2> /dev/null"
if [ $auto_completion -eq 0 ]; then
@@ -253,7 +262,7 @@ for shell in $shells; do
fzf_key_bindings="# $fzf_key_bindings"
fi
- cat > $src << EOF
+ cat > "$src" << EOF
# Setup fzf
# ---------
if [[ ! "\$PATH" == *$fzf_base/bin* ]]; then
@@ -281,13 +290,13 @@ if [[ "$shells" =~ fish ]]; then
EOF
[ $? -eq 0 ] && echo "OK" || echo "Failed"
- mkdir -p ~/.config/fish/functions
- if [ -e ~/.config/fish/functions/fzf.fish ]; then
- echo -n "Remove unnecessary ~/.config/fish/functions/fzf.fish ... "
- rm -f ~/.config/fish/functions/fzf.fish && echo "OK" || echo "Failed"
+ mkdir -p "${fish_dir}/functions"
+ if [ -e "${fish_dir}/functions/fzf.fish" ]; then
+ echo -n "Remove unnecessary ${fish_dir}/functions/fzf.fish ... "
+ rm -f "${fish_dir}/functions/fzf.fish" && echo "OK" || echo "Failed"
fi
- fish_binding=~/.config/fish/functions/fzf_key_bindings.fish
+ fish_binding="${fish_dir}/functions/fzf_key_bindings.fish"
if [ $key_bindings -ne 0 ]; then
echo -n "Symlink $fish_binding ... "
ln -sf "$fzf_base/shell/key-bindings.fish" \
@@ -353,11 +362,11 @@ echo
for shell in $shells; do
[[ "$shell" = fish ]] && continue
[ $shell = zsh ] && dest=${ZDOTDIR:-~}/.zshrc || dest=~/.bashrc
- append_line $update_config "[ -f ~/.fzf.${shell} ] && source ~/.fzf.${shell}" "$dest" "~/.fzf.${shell}"
+ append_line $update_config "[ -f ${prefix}.${shell} ] && source ${prefix}.${shell}" "$dest" "${prefix}.${shell}"
done
if [ $key_bindings -eq 1 ] && [[ "$shells" =~ fish ]]; then
- bind_file=~/.config/fish/functions/fish_user_key_bindings.fish
+ bind_file="${fish_dir}/functions/fish_user_key_bindings.fish"
if [ ! -e "$bind_file" ]; then
create_file "$bind_file" \
'function fish_user_key_bindings' \
diff --git a/uninstall b/uninstall
index e2717a37..21744ab9 100755
--- a/uninstall
+++ b/uninstall
@@ -1,12 +1,45 @@
#!/usr/bin/env bash
-confirm() {
- while [ 1 ]; do
- read -p "$1" -n 1 -r
- echo
- if [[ "$REPLY" =~ ^[Yy] ]]; then
+xdg=0
+prefix='~/.fzf'
+prefix_expand=~/.fzf
+fish_dir=${XDG_CONFIG_HOME:-$HOME/.config}/fish
+
+help() {
+ cat << EOF
+usage: $0 [OPTIONS]
+
+ --help Show this message
+ --xdg Remove files generated under \$XDG_CONFIG_HOME/fzf
+EOF
+}
+
+for opt in "$@"; do
+ case $opt in
+ --help)
+ help
+ exit 0
+ ;;
+ --xdg)
+ xdg=1
+ prefix='"${XDG_CONFIG_HOME:-$HOME/.config}"/fzf/fzf'
+ prefix_expand=${XDG_CONFIG_HOME:-$HOME/.config}/fzf/fzf
+ ;;
+ *)
+ echo "unknown option: $opt"
+ help
+ exit 1
+ ;;
+ esac
+done
+
+ask() {
+ while true; do
+ read -p "$1 ([y]/n) " -r
+ REPLY=${REPLY:-"y"}
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
return 0
- elif [[ "$REPLY" =~ ^[Nn] ]]; then
+ elif [[ $REPLY =~ ^[Nn]$ ]]; then
return 1
fi
done
@@ -40,7 +73,7 @@ remove_line() {
content=$(sed 's/^[0-9]*://' <<< "$line")
match=1
echo " - Line #$line_no: $content"
- [ "$content" = "$1" ] || confirm " - Remove (y/n) ? "
+ [ "$content" = "$1" ] || ask " - Remove?"
if [ $? -eq 0 ]; then
awk -v n=$line_no 'NR == n {next} {print}' "$src" > "$src.bak" &&
mv "$src.bak" "$src" || break
@@ -55,25 +88,30 @@ remove_line() {
}
for shell in bash zsh; do
- remove ~/.fzf.${shell}
+ shell_config=${prefix_expand}.${shell}
+ remove "${shell_config}"
remove_line ~/.${shell}rc \
- "[ -f ~/.fzf.${shell} ] && source ~/.fzf.${shell}" \
- "source ~/.fzf.${shell}"
+ "[ -f ${prefix}.${shell} ] && source ${prefix}.${shell}" \
+ "source ${prefix}.${shell}"
done
-bind_file=~/.config/fish/functions/fish_user_key_bindings.fish
+bind_file="${fish_dir}/functions/fish_user_key_bindings.fish"
if [ -f "$bind_file" ]; then
remove_line "$bind_file" "fzf_key_bindings"
fi
-if [ -d ~/.config/fish/functions ]; then
- remove ~/.config/fish/functions/fzf.fish
- remove ~/.config/fish/functions/fzf_key_bindings.fish
+if [ -d "${fish_dir}/functions" ]; then
+ remove "${fish_dir}/functions/fzf.fish"
+ remove "${fish_dir}/functions/fzf_key_bindings.fish"
- if [ "$(ls -A ~/.config/fish/functions)" ]; then
- echo "Can't delete non-empty directory: \"~/.config/fish/functions\""
+ if [ "$(ls -A "${fish_dir}/functions")" ]; then
+ echo "Can't delete non-empty directory: \"${fish_dir}/functions\""
else
- rmdir ~/.config/fish/functions
+ rmdir "${fish_dir}/functions"
fi
fi
+config_dir=$(dirname "$prefix_expand")
+if [[ "$xdg" = 1 ]] && [[ "$config_dir" = */fzf ]] && [[ -d "$config_dir" ]]; then
+ rmdir "$config_dir"
+fi