# misc vars
local char_i escaped_input new_item seek_sec
local -i scrolled=999 # more than any $LINES
- local -i i ret line_int skip_start skip_lookback overflow_lines overflow
+ local -i i ret line_int skip_start skip_lookback
##### begin command line parsing ########
skip_end=$(( skip_start + LINES - 1 ))
(( skip_end <= id_count )) || skip_end=$id_count
- #e "debug: skip_start: $skip_start overflow_lines: $overflow_lines id_count: $id_count"
+ #e "debug: skip_start: $skip_start id_count: $id_count"
for (( i=skip_start; i <= skip_end; i++ )); do
#e "i=$i"
mysrc /a/bin/small-misc-bash/ll-function
mysrc /a/bin/distro-functions/src/package-manager-abstractions
mysrc /a/bin/fai/fai/config/distro-install-common/bash-misc-funcs
+mysrc /a/c/fzf-brc
x() {
local -a arr jspecs
local l
- mapfile -t arr <<<$(jobs)
+ mapfile -t arr <<<"$(jobs)"
for l in "${arr[@]}"; do
[[ ${l:1:1} == [0-9] ]] || continue
l="${l:1}"
local fname="${1##*/}"
[[ ! -L $1 && ( $fname == *.sh || $fname != *.* ) ]] && istext "$1" && [[ $(head -n1 "$1" 2>/dev/null) == '#!/bin/bash'* ]]
}
+# todo: update bash style guide with new exceptions
shellcheck-except() {
local quotes others
quotes=2048,2064,2068,2086,2119,2206,2254,2231
- others=2029,2032,2033,2054,2164,2190,2317
+ others=2024,2029,2032,2033,2054,2164,2185,2190,2317
shellcheck -e $quotes,$others "$@" || return $?
}
# wrapper for shellcheck with better defaults.
if (( $# <= 1 )); then
return
fi
- local cmd="$1"
- shift
- "$cmd" "$@"
+ "$@"
}
# maybe run command with options ended by --
local daystart
daystart=$(date -d 00:00 +%s)
day_mins=$(( ( EPOCHSECONDS - daystart ) / 60 ))
- echo $(date +%j)---$day_mins
+ echo "$(date +%j)---$day_mins"
}
wgkey() {
# versions for a simple license scan.
dedup-node-modules() {
mkdir -p ../deduped
- for d in $(find . -type d -name node_modules | perl -e 'print sort {length $b <=> length $a} <>'); do for mod in $d/*; do [[ -d $mod ]] || rm $mod; n="${m##*/}"; if [[ -d ../deduped/$n ]]; then rm -r $mod; else mv $mod ../deduped; fi; done; done
+ for d in $(find . -type d -name node_modules | perl -e 'print sort {length $b <=> length $a} <>'); do for mod in $d/*; do [[ -d $mod ]] || rm $mod; n="${mod##*/}"; if [[ -d ../deduped/$n ]]; then rm -r $mod; else mv $mod ../deduped; fi; done; done
cd ../deduped
# for each dir that has a min.js file, compare char count of min.js
# files vs char count of files with just .js or .ts, etc. If minified
# is bigger, then flag it by doing an ls.
- for d in $(find -type f -name '*.min.js'|sed -r 's,^./,,;s,/.*$,,' | sort -u); do a=$(cat $(find $d -name '*.min.js')|wc -c); b=$(cat $(find $d -type f \! -name '*.min.js' \( -name '*.js' -o -name '*.ts' -o -name '*.mjs' -o -name '*.tsx' -o -name '*.cts' -o -name '*.mts \)') | wc -c); if ! uintp "$a" "$b"; then e "uint $a, $b"; continue; fi; if (( a < b )); then find $d -name '*.min.js' -delete; else m ll $d; fi; done
+ for d in $(find -type f -name '*.min.js'|sed -r 's,^./,,;s,/.*$,,' | sort -u); do a="$(find $d -name '*.min.js'|wc -c)"; b="$(find $d -type f \! -name '*.min.js' \( -name '*.js' -o -name '*.ts' -o -name '*.mjs' -o -name '*.tsx' -o -name '*.cts' -o -name '*.mts \)' | wc -c)"; if ! uintp "$a" "$b"; then e "uint $a, $b"; continue; fi; if (( a < b )); then find $d -name '*.min.js' -delete; else m ll $d; fi; done
#time /t/sc/scancode --info --classify --only-findings --max-in-memory 300000 -clpue --unknown-licenses --tallies --tallies-with-details --summary --generated --json-pp scan.json .
}
# unset MY_INIT_CMD
# fi
+
+# things to remember:
+# ALT-C - cd into the selected directory
+# CTRL-T - Paste the selected file path into the command line
+#
+# good guide to some of its basic features is the readme file
+# https://github.com/junegunn/fzf
+#
+# Built according to /a/opt/fzf/BUILD.md:
+# make install
+#
+# mv bin/fzf /a/opt/bin
+#
+# todo: do a web search to see if we can decrease fzf binary size with
+# compilation options, it is 4mb.
+
+if ! type -p fzf &>/dev/null; then
+ if [[ -s $bashrc_dir/fzf ]]; then
+ # todo: look into this. I'm not syncing because fzf built on t12 fails to run on t10 with
+ # fzf: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by fzf)
+ # fzf: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by fzf)
+ path_add --ifexists --end $bashrc_dir
+ else
+ return 0
+ fi
+fi
+
+
# ensure no bad programs appending to this file will have an affect
return 0
history -r
}
-
+# source fsf-script-lib # for shellcheck-this-repo
source /a/bin/distro-setup/path_add-function
path_add /a/exe
# add this with absolute paths as needed for better security
if [[ ! $PERL5LIB ]]; then
PERL5LIB=/home/iank/perl5/lib/perl5
PERL_LOCAL_LIB_ROOT=/home/iank/perl5
- PERL_MB_OPT="--install_base \"/home/iank/perl5\""
+ PERL_MB_OPT="--install_base /home/iank/perl5"
PERL_MM_OPT=INSTALL_BASE=/home/iank/perl5
export PERL5LIB PERL_LOCAL_LIB_ROOT PERL_MB_OPT PERL_MM_OPT
fi
return 1
fi
# note, we could save the file name in the webinfo output if our first 2 seds were s/^.* /0 /
+ # shellcheck disable=SC2016 # intentional
tmps=$(webpinfo -summary "${args[@]}" | sed -rn '1{s/.*/0/;x};/^File:/{s/.*/0/;x;p};${x;p}; /^[[:space:]]*Number of frames:[[:space:]]+([2-9]|[1-9][0-9]+)$/{s/^.*[[:space:]]([0-9]+)$/\1/;G;s/\n0//;h}')
unset webp_frames
mapfile -t webp_frames <<<"$tmps"
m sl mail.fsf.org pull-iankfsf
fi
}
-
-########################## ####################################################
-########################## ##########################
-########################## ####################################################
-########################## ##########################
-########################## ####################################################
-########################## ##########################
-########################## ####################################################
-########################## ##########################
-########################## ####################################################
-########################## ##########################
-########################## ####################################################
-########################## ##########################
-########################## ####################################################
-########################## ##########################
-########################## ####################################################
-########################## ##########################
-########################## ####################################################
-########################## ##########################
-########################## ####################################################
-########################## ##########################
-
-
-
-
-
-
-
-# things to remember:
-# ALT-C - cd into the selected directory
-# CTRL-T - Paste the selected file path into the command line
-#
-# good guide to some of its basic features is the readme file
-# https://github.com/junegunn/fzf
-
-path_add --end --ifexists /a/opt/fzf/bin
-
-if ! type -p fzf &>/dev/null; then
- return 0
-fi
-
-##### this is from output of fzf --bash plus a small modification to
-# prevent a command from reporting a superflous nonzero exit, search for
-# iank below.
-
-### key-bindings.bash ###
-# ____ ____
-# / __/___ / __/
-# / /_/_ / / /_
-# / __/ / /_/ __/
-# /_/ /___/_/ key-bindings.bash
-#
-# - $FZF_TMUX_OPTS
-# - $FZF_CTRL_T_COMMAND
-# - $FZF_CTRL_T_OPTS
-# - $FZF_CTRL_R_COMMAND
-# - $FZF_CTRL_R_OPTS
-# - $FZF_ALT_C_COMMAND
-# - $FZF_ALT_C_OPTS
-
-if [[ $- =~ i ]]; then
-
-
- # Key bindings
- # ------------
-
- #----BEGIN shfmt
- #----BEGIN INCLUDE common.sh
- # NOTE: Do not directly edit this section, which is copied from "common.sh".
- # To modify it, one can edit "common.sh" and run "./update.sh" to apply
- # the changes. See code comments in "common.sh" for the implementation details.
-
- __fzf_defaults() {
- printf '%s\n' "--height ${FZF_TMUX_HEIGHT:-40%} --min-height 20+ --bind=ctrl-z:ignore $1"
- command cat "${FZF_DEFAULT_OPTS_FILE-}" 2> /dev/null
- printf '%s\n' "${FZF_DEFAULT_OPTS-} $2"
- }
-
- __fzf_exec_awk() {
- if [[ -z ${__fzf_awk-} ]]; then
- __fzf_awk=awk
- if [[ $OSTYPE == solaris* && -x /usr/xpg4/bin/awk ]]; then
- __fzf_awk=/usr/xpg4/bin/awk
- elif command -v mawk > /dev/null 2>&1; then
- local n x y z d
- IFS=' .' read -r n x y z d <<< $(command mawk -W version 2> /dev/null)
- [[ $n == mawk ]] && ((d >= 20230302 && (x * 1000 + y) * 1000 + z >= 1003004)) && __fzf_awk=mawk
- fi
- fi
- LC_ALL=C exec "$__fzf_awk" "$@"
- }
- #----END INCLUDE
-
- __fzf_select__() {
- FZF_DEFAULT_COMMAND=${FZF_CTRL_T_COMMAND:-} \
- FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse --walker=file,dir,follow,hidden --scheme=path" "${FZF_CTRL_T_OPTS-} -m") \
- FZF_DEFAULT_OPTS_FILE='' $(__fzfcmd) "$@" |
- while read -r item; do
- printf '%q ' "$item" # escape special chars
- done
- }
-
- __fzfcmd() {
- [[ -n ${TMUX_PANE-} ]] && { [[ ${FZF_TMUX:-0} != 0 ]] || [[ -n ${FZF_TMUX_OPTS-} ]]; } &&
- echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- " || echo "fzf"
- }
-
- fzf-file-widget() {
- local selected="$(__fzf_select__ "$@")"
- READLINE_LINE="${READLINE_LINE:0:READLINE_POINT}$selected${READLINE_LINE:READLINE_POINT}"
- READLINE_POINT=$((READLINE_POINT + ${#selected}))
- }
-
- __fzf_cd__() {
- local dir
- dir=$(
- FZF_DEFAULT_COMMAND=${FZF_ALT_C_COMMAND:-} \
- FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse --walker=dir,follow,hidden --scheme=path" "${FZF_ALT_C_OPTS-} +m") \
- FZF_DEFAULT_OPTS_FILE='' $(__fzfcmd)
- ) && printf 'builtin cd -- %q' "$(builtin unset CDPATH && builtin cd -- "$dir" && builtin pwd)"
- }
-
- if command -v perl > /dev/null; then
- __fzf_history__() {
- local output script
- script='BEGIN { getc; $/ = "\n\t"; $HISTCOUNT = $ENV{last_hist} + 1 } s/^[ *]//; s/\n/\n\t/gm; print $HISTCOUNT - $. . "\t$_" if !$seen{$_}++'
- output=$(
- set +o pipefail
- builtin fc -lnr -2147483648 |
- last_hist=$(HISTTIMEFORMAT='' builtin history 1) command perl -n -l0 -e "$script" |
- FZF_DEFAULT_OPTS=$(__fzf_defaults "" "-n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,alt-r:toggle-raw --wrap-sign '"$'\t'"↳ ' --highlight-line ${FZF_CTRL_R_OPTS-} +m --read0") \
- FZF_DEFAULT_OPTS_FILE='' $(__fzfcmd) --query "$READLINE_LINE"
- ) || return
- READLINE_LINE=$(command perl -pe 's/^\d*\t//' <<< "$output")
- if [[ -z $READLINE_POINT ]]; then
- echo "$READLINE_LINE"
- else
- READLINE_POINT=0x7fffffff
- fi
- }
- else # awk - fallback for POSIX systems
- __fzf_history__() {
- local output script
- [[ $(HISTTIMEFORMAT='' builtin history 1) =~ [[:digit:]]+ ]] # how many history entries
- script='function P(b) { ++n; sub(/^[ *]/, "", b); if (!seen[b]++) { printf "%d\t%s%c", '$((BASH_REMATCH + 1))' - n, b, 0 } }
- NR==1 { b = substr($0, 2); next }
- /^\t/ { P(b); b = substr($0, 2); next }
- { b = b RS $0 }
- END { if (NR) P(b) }'
- output=$(
- set +o pipefail
- builtin fc -lnr -2147483648 2> /dev/null | # ( $'\t '<lines>$'\n' )* ; <lines> ::= [^\n]* ( $'\n'<lines> )*
- __fzf_exec_awk "$script" | # ( <counter>$'\t'<lines>$'\000' )*
- FZF_DEFAULT_OPTS=$(__fzf_defaults "" "-n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,alt-r:toggle-raw --wrap-sign '"$'\t'"↳ ' --highlight-line ${FZF_CTRL_R_OPTS-} +m --read0") \
- FZF_DEFAULT_OPTS_FILE='' $(__fzfcmd) --query "$READLINE_LINE"
- ) || return
- READLINE_LINE=${output#*$'\t'}
- if [[ -z $READLINE_POINT ]]; then
- echo "$READLINE_LINE"
- else
- READLINE_POINT=0x7fffffff
- fi
- }
- fi
-
- # Required to refresh the prompt after fzf
- bind -m emacs-standard '"\er": redraw-current-line'
-
- bind -m vi-command '"\C-z": emacs-editing-mode'
- bind -m vi-insert '"\C-z": emacs-editing-mode'
- bind -m emacs-standard '"\C-z": vi-editing-mode'
-
- if ((BASH_VERSINFO[0] < 4)); then
- # CTRL-T - Paste the selected file path into the command line
- if [[ ${FZF_CTRL_T_COMMAND-x} != "" ]]; then
- bind -m emacs-standard '"\C-t": " \C-b\C-k \C-u`__fzf_select__`\e\C-e\er\C-a\C-y\C-h\C-e\e \C-y\ey\C-x\C-x\C-f\C-y\ey\C-_"'
- bind -m vi-command '"\C-t": "\C-z\C-t\C-z"'
- bind -m vi-insert '"\C-t": "\C-z\C-t\C-z"'
- fi
-
- # CTRL-R - Paste the selected command from history into the command line
- if [[ ${FZF_CTRL_R_COMMAND-x} != "" ]]; then
- if [[ -n ${FZF_CTRL_R_COMMAND-} ]]; then
- echo "warning: FZF_CTRL_R_COMMAND is set to a custom command, but custom commands are not yet supported for CTRL-R" >&2
- fi
- bind -m emacs-standard '"\C-r": "\C-e \C-u\C-y\ey\C-u`__fzf_history__`\e\C-e\er"'
- bind -m vi-command '"\C-r": "\C-z\C-r\C-z"'
- bind -m vi-insert '"\C-r": "\C-z\C-r\C-z"'
- fi
- else
- # CTRL-T - Paste the selected file path into the command line
- if [[ ${FZF_CTRL_T_COMMAND-x} != "" ]]; then
- bind -m emacs-standard -x '"\C-t": fzf-file-widget'
- bind -m vi-command -x '"\C-t": fzf-file-widget'
- bind -m vi-insert -x '"\C-t": fzf-file-widget'
- fi
-
- # CTRL-R - Paste the selected command from history into the command line
- if [[ ${FZF_CTRL_R_COMMAND-x} != "" ]]; then
- if [[ -n ${FZF_CTRL_R_COMMAND-} ]]; then
- echo "warning: FZF_CTRL_R_COMMAND is set to a custom command, but custom commands are not yet supported for CTRL-R" >&2
- fi
- bind -m emacs-standard -x '"\C-r": __fzf_history__'
- bind -m vi-command -x '"\C-r": __fzf_history__'
- bind -m vi-insert -x '"\C-r": __fzf_history__'
- fi
- fi
-
- # ALT-C - cd into the selected directory
- if [[ ${FZF_ALT_C_COMMAND-x} != "" ]]; then
- bind -m emacs-standard '"\ec": " \C-b\C-k \C-u`__fzf_cd__`\e\C-e\er\C-m\C-y\C-h\e \C-y\ey\C-x\C-x\C-d\C-y\ey\C-_"'
- bind -m vi-command '"\ec": "\C-z\ec\C-z"'
- bind -m vi-insert '"\ec": "\C-z\ec\C-z"'
- fi
- #----END shfmt
-
-fi
-### end: key-bindings.bash ###
-### completion.bash ###
-# ____ ____
-# / __/___ / __/
-# / /_/_ / / /_
-# / __/ / /_/ __/
-# /_/ /___/_/ completion.bash
-#
-# - $FZF_TMUX (default: 0)
-# - $FZF_TMUX_OPTS (default: empty)
-# - $FZF_COMPLETION_TRIGGER (default: '**')
-# - $FZF_COMPLETION_OPTS (default: empty)
-# - $FZF_COMPLETION_PATH_OPTS (default: empty)
-# - $FZF_COMPLETION_DIR_OPTS (default: empty)
-
-if [[ $- =~ i ]]; then
-
-
- # To use custom commands instead of find, override _fzf_compgen_{path,dir}
- #
- # _fzf_compgen_path() {
- # echo "$1"
- # command find -L "$1" \
- # -name .git -prune -o -name .hg -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \
- # -a -not -path "$1" -print 2> /dev/null | command sed 's@^\./@@'
- # }
- #
- # _fzf_compgen_dir() {
- # command find -L "$1" \
- # -name .git -prune -o -name .hg -prune -o -name .svn -prune -o -type d \
- # -a -not -path "$1" -print 2> /dev/null | command sed 's@^\./@@'
- # }
-
- ###########################################################
-
- #----BEGIN shfmt
- #----BEGIN INCLUDE common.sh
- # NOTE: Do not directly edit this section, which is copied from "common.sh".
- # To modify it, one can edit "common.sh" and run "./update.sh" to apply
- # the changes. See code comments in "common.sh" for the implementation details.
-
- __fzf_defaults() {
- printf '%s\n' "--height ${FZF_TMUX_HEIGHT:-40%} --min-height 20+ --bind=ctrl-z:ignore $1"
- command cat "${FZF_DEFAULT_OPTS_FILE-}" 2> /dev/null
- printf '%s\n' "${FZF_DEFAULT_OPTS-} $2"
- }
-
- __fzf_exec_awk() {
- if [[ -z ${__fzf_awk-} ]]; then
- __fzf_awk=awk
- if [[ $OSTYPE == solaris* && -x /usr/xpg4/bin/awk ]]; then
- __fzf_awk=/usr/xpg4/bin/awk
- elif command -v mawk > /dev/null 2>&1; then
- local n x y z d
- IFS=' .' read -r n x y z d <<< $(command mawk -W version 2> /dev/null)
- [[ $n == mawk ]] && ((d >= 20230302 && (x * 1000 + y) * 1000 + z >= 1003004)) && __fzf_awk=mawk
- fi
- fi
- LC_ALL=C exec "$__fzf_awk" "$@"
- }
- #----END INCLUDE
-
- __fzf_comprun() {
- if [[ "$(type -t _fzf_comprun 2>&1)" == function ]]; then
- _fzf_comprun "$@"
- elif [[ -n ${TMUX_PANE-} ]] && { [[ ${FZF_TMUX:-0} != 0 ]] || [[ -n ${FZF_TMUX_OPTS-} ]]; }; then
- shift
- fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- "$@"
- else
- shift
- fzf "$@"
- fi
- }
-
- __fzf_orig_completion() {
- local l comp f cmd
- while read -r l; do
- if [[ $l =~ ^(.*\ -F)\ *([^ ]*).*\ ([^ ]*)$ ]]; then
- comp="${BASH_REMATCH[1]}"
- f="${BASH_REMATCH[2]}"
- cmd="${BASH_REMATCH[3]}"
- [[ $f == _fzf_* ]] && continue
- printf -v "_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}" "%s" "${comp} %s ${cmd} #${f}"
- if [[ $l == *" -o nospace "* ]] && [[ ${__fzf_nospace_commands-} != *" $cmd "* ]]; then
- __fzf_nospace_commands="${__fzf_nospace_commands-} $cmd "
- fi
- fi
- done
- }
-
- # @param $1 cmd - Command name for which the original completion is searched
- # @var[out] REPLY - Original function name is returned
- __fzf_orig_completion_get_orig_func() {
- local cmd orig_var orig
- cmd=$1
- orig_var="_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}"
- orig="${!orig_var-}"
- REPLY="${orig##*#}"
- [[ $REPLY ]] && type "$REPLY" &> /dev/null
- }
-
- # @param $1 cmd - Command name for which the original completion is searched
- # @param $2 func - Fzf's completion function to replace the original function
- # @var[out] REPLY - Completion setting is returned as a string to "eval"
- __fzf_orig_completion_instantiate() {
- local cmd func orig_var orig
- cmd=$1
- func=$2
- orig_var="_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}"
- orig="${!orig_var-}"
- orig="${orig%#*}"
- [[ $orig == *' %s '* ]] || return 1
- printf -v REPLY "$orig" "$func"
- }
-
- _fzf_opts_completion() {
- local cur prev opts
- COMPREPLY=()
- cur="${COMP_WORDS[COMP_CWORD]}"
- prev="${COMP_WORDS[COMP_CWORD - 1]}"
- opts="
- +c --no-color
- +i --no-ignore-case
- +s --no-sort
- +x --no-extended
- --ansi
- --bash
- --bind
- --border
- --border-label
- --border-label-pos
- --color
- --cycle
- --disabled
- --ellipsis
- --expect
- --filepath-word
- --fish
- --header
- --header-first
- --header-lines
- --height
- --highlight-line
- --history
- --history-size
- --hscroll-off
- --info
- --jump-labels
- --keep-right
- --layout
- --listen
- --listen-unsafe
- --literal
- --man
- --margin
- --marker
- --min-height
- --no-bold
- --no-clear
- --no-hscroll
- --no-mouse
- --no-scrollbar
- --no-separator
- --no-unicode
- --padding
- --pointer
- --preview
- --preview-label
- --preview-label-pos
- --preview-window
- --print-query
- --print0
- --prompt
- --read0
- --reverse
- --scheme
- --scroll-off
- --separator
- --sync
- --tabstop
- --tac
- --tiebreak
- --tmux
- --track
- --version
- --with-nth
- --with-shell
- --wrap
- --zsh
- -0 --exit-0
- -1 --select-1
- -d --delimiter
- -e --exact
- -f --filter
- -h --help
- -i --ignore-case
- -m --multi
- -n --nth
- -q --query
- --"
-
- case "${prev}" in
- --scheme)
- COMPREPLY=($(compgen -W "default path history" -- "$cur"))
- return 0
- ;;
- --tiebreak)
- COMPREPLY=($(compgen -W "length chunk begin end index" -- "$cur"))
- return 0
- ;;
- --color)
- COMPREPLY=($(compgen -W "dark light 16 bw no" -- "$cur"))
- return 0
- ;;
- --layout)
- COMPREPLY=($(compgen -W "default reverse reverse-list" -- "$cur"))
- return 0
- ;;
- --info)
- COMPREPLY=($(compgen -W "default right hidden inline inline-right" -- "$cur"))
- return 0
- ;;
- --preview-window)
- COMPREPLY=($(compgen -W "
- default
- hidden
- nohidden
- wrap
- nowrap
- cycle
- nocycle
- up top
- down bottom
- left
- right
- rounded border border-rounded
- sharp border-sharp
- border-bold
- border-block
- border-thinblock
- border-double
- noborder border-none
- border-horizontal
- border-vertical
- border-up border-top
- border-down border-bottom
- border-left
- border-right
- follow
- nofollow" -- "$cur"))
- return 0
- ;;
- --border)
- COMPREPLY=($(compgen -W "rounded sharp bold block thinblock double horizontal vertical top bottom left right none" -- "$cur"))
- return 0
- ;;
- --border-label-pos | --preview-label-pos)
- COMPREPLY=($(compgen -W "center bottom top" -- "$cur"))
- return 0
- ;;
- esac
-
- if [[ $cur =~ ^-|\+ ]]; then
- COMPREPLY=($(compgen -W "${opts}" -- "$cur"))
- return 0
- fi
-
- return 0
- }
-
- _fzf_handle_dynamic_completion() {
- local cmd ret REPLY orig_cmd orig_complete
- cmd="$1"
- shift
- orig_cmd="$1"
- if __fzf_orig_completion_get_orig_func "$cmd"; then
- "$REPLY" "$@"
- elif [[ -n ${_fzf_completion_loader-} ]]; then
- orig_complete=$(complete -p "$orig_cmd" 2> /dev/null)
- $_fzf_completion_loader "$@"
- ret=$?
- # _completion_loader may not have updated completion for the command
- if [[ "$(complete -p "$orig_cmd" 2> /dev/null)" != "$orig_complete" ]]; then
- __fzf_orig_completion < <(complete -p "$orig_cmd" 2> /dev/null)
- __fzf_orig_completion_get_orig_func "$cmd" || ret=1
-
- # Update orig_complete by _fzf_orig_completion entry
- [[ $orig_complete =~ ' -F '(_fzf_[^ ]+)' ' ]] &&
- __fzf_orig_completion_instantiate "$cmd" "${BASH_REMATCH[1]}" &&
- orig_complete=$REPLY
-
- if [[ ${__fzf_nospace_commands-} == *" $orig_cmd "* ]]; then
- eval "${orig_complete/ -F / -o nospace -F }"
- else
- eval "$orig_complete"
- fi
- fi
- [[ $ret -eq 0 ]] && return 124
- return $ret
- fi
- }
-
- __fzf_generic_path_completion() {
- local cur base dir leftover matches trigger cmd
- cmd="${COMP_WORDS[0]}"
- if [[ $cmd == \\* ]]; then
- cmd="${cmd:1}"
- fi
- COMPREPLY=()
- trigger=${FZF_COMPLETION_TRIGGER-'**'}
- [[ $COMP_CWORD -ge 0 ]] && cur="${COMP_WORDS[COMP_CWORD]}"
- if [[ $cur == *"$trigger" ]] && [[ $cur != *'$('* ]] && [[ $cur != *':='* ]] && [[ $cur != *'`'* ]]; then
- base=${cur:0:${#cur}-${#trigger}}
- eval "base=$base" 2> /dev/null || return
-
- dir=
- [[ $base == *"/"* ]] && dir="$base"
- while true; do
- if [[ -z $dir ]] || [[ -d $dir ]]; then
- leftover=${base/#"$dir"/}
- leftover=${leftover/#\//}
- [[ -z $dir ]] && dir='.'
- [[ $dir != "/" ]] && dir="${dir/%\//}"
- matches=$(
- export FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse --scheme=path" "${FZF_COMPLETION_OPTS-} $2")
- unset FZF_DEFAULT_COMMAND FZF_DEFAULT_OPTS_FILE
- if declare -F "$1" > /dev/null; then
- eval "$1 $(printf %q "$dir")" | __fzf_comprun "$4" -q "$leftover"
- else
- if [[ $1 =~ dir ]]; then
- walker=dir,follow
- eval "rest=(${FZF_COMPLETION_DIR_OPTS-})"
- else
- walker=file,dir,follow,hidden
- eval "rest=(${FZF_COMPLETION_PATH_OPTS-})"
- fi
- __fzf_comprun "$4" -q "$leftover" --walker "$walker" --walker-root="$dir" "${rest[@]}"
- fi | while read -r item; do
- printf "%q " "${item%$3}$3"
- done
- )
- matches=${matches% }
- [[ -z $3 ]] && [[ ${__fzf_nospace_commands-} == *" ${COMP_WORDS[0]} "* ]] && matches="$matches "
- if [[ -n $matches ]]; then
- COMPREPLY=("$matches")
- else
- COMPREPLY=("$cur")
- fi
- # To redraw line after fzf closes (printf '\e[5n')
- bind '"\e[0n": redraw-current-line' 2> /dev/null
- printf '\e[5n'
- return 0
- fi
- dir=$(command dirname "$dir")
- [[ $dir =~ /$ ]] || dir="$dir"/
- done
- else
- shift
- shift
- shift
- _fzf_handle_dynamic_completion "$cmd" "$@"
- fi
- }
-
- _fzf_complete() {
- # Split arguments around --
- local args rest str_arg i sep
- args=("$@")
- sep=
- for i in "${!args[@]}"; do
- if [[ ${args[$i]} == -- ]]; then
- sep=$i
- break
- fi
- done
- if [[ -n $sep ]]; then
- str_arg=
- rest=("${args[@]:$((sep + 1)):${#args[@]}}")
- args=("${args[@]:0:sep}")
- else
- str_arg=$1
- args=()
- shift
- rest=("$@")
- fi
-
- local cur selected trigger cmd post
- post="$(caller 0 | __fzf_exec_awk '{print $2}')_post"
- type -t "$post" > /dev/null 2>&1 || post='command cat'
-
- trigger=${FZF_COMPLETION_TRIGGER-'**'}
- cmd="${COMP_WORDS[0]}"
- cur="${COMP_WORDS[COMP_CWORD]}"
- if [[ $cur == *"$trigger" ]] && [[ $cur != *'$('* ]] && [[ $cur != *':='* ]] && [[ $cur != *'`'* ]]; then
- cur=${cur:0:${#cur}-${#trigger}}
-
- selected=$(
- FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse" "${FZF_COMPLETION_OPTS-} $str_arg") \
- FZF_DEFAULT_OPTS_FILE='' \
- __fzf_comprun "${rest[0]}" "${args[@]}" -q "$cur" | eval "$post" | command tr '\n' ' '
- )
- selected=${selected% } # Strip trailing space not to repeat "-o nospace"
- if [[ -n $selected ]]; then
- COMPREPLY=("$selected")
- else
- COMPREPLY=("$cur")
- fi
- bind '"\e[0n": redraw-current-line' 2> /dev/null
- printf '\e[5n'
- return 0
- else
- _fzf_handle_dynamic_completion "$cmd" "${rest[@]}"
- fi
- }
-
- _fzf_path_completion() {
- __fzf_generic_path_completion _fzf_compgen_path "-m" "" "$@"
- }
-
- # Deprecated. No file only completion.
- _fzf_file_completion() {
- _fzf_path_completion "$@"
- }
-
- _fzf_dir_completion() {
- __fzf_generic_path_completion _fzf_compgen_dir "" "/" "$@"
- }
-
- _fzf_complete_kill() {
- _fzf_proc_completion "$@"
- }
-
- _fzf_proc_completion() {
- local transformer
- transformer='
- if [[ $FZF_KEY =~ ctrl|alt|shift ]] && [[ -n $FZF_NTH ]]; then
- nths=( ${FZF_NTH//,/ } )
- new_nths=()
- found=0
- for nth in ${nths[@]}; do
- if [[ $nth = $FZF_CLICK_HEADER_NTH ]]; then
- found=1
- else
- new_nths+=($nth)
- fi
- done
- [[ $found = 0 ]] && new_nths+=($FZF_CLICK_HEADER_NTH)
- new_nths=${new_nths[*]}
- new_nths=${new_nths// /,}
- echo "change-nth($new_nths)+change-prompt($new_nths> )"
- else
- if [[ $FZF_NTH = $FZF_CLICK_HEADER_NTH ]]; then
- echo "change-nth()+change-prompt(> )"
- else
- echo "change-nth($FZF_CLICK_HEADER_NTH)+change-prompt($FZF_CLICK_HEADER_WORD> )"
- fi
- fi
- '
- _fzf_complete -m --header-lines=1 --no-preview --wrap --color fg:dim,nth:regular \
- --bind "click-header:transform:$transformer" -- "$@" < <(
- command ps -eo user,pid,ppid,start,time,command 2> /dev/null ||
- command ps -eo user,pid,ppid,time,args 2> /dev/null || # For BusyBox
- command ps --everyone --full --windows # For cygwin
- )
- }
-
- _fzf_proc_completion_post() {
- __fzf_exec_awk '{print $2}'
- }
-
- # To use custom hostname lists, override __fzf_list_hosts.
- # The function is expected to print hostnames, one per line as well as in the
- # desired sorting and with any duplicates removed, to standard output.
- #
- # e.g.
- # # Use bash-completions’s _known_hosts_real() for getting the list of hosts
- # __fzf_list_hosts() {
- # # Set the local attribute for any non-local variable that is set by _known_hosts_real()
- # local COMPREPLY=()
- # _known_hosts_real ''
- # printf '%s\n' "${COMPREPLY[@]}" | command sort -u --version-sort
- # }
- if ! declare -F __fzf_list_hosts > /dev/null; then
- __fzf_list_hosts() {
- command sort -u \
- <(
- # Note: To make the pathname expansion of "~/.ssh/config.d/*" work
- # properly, we need to adjust the related shell options. We need to
- # unset "set -f" and "GLOBIGNORE", which disable the pathname expansion
- # totally or partially. We need to unset "dotglob" and "nocaseglob" to
- # avoid matching unwanted files. We need to unset "failglob" to avoid
- # outputting the error messages to the terminal when no matching is
- # found. We need to set "nullglob" to avoid attempting to read the
- # literal filename '~/.ssh/config.d/*' when no matching is found.
- set +f
- GLOBIGNORE=
- shopt -u dotglob nocaseglob failglob
- shopt -s nullglob
-
- __fzf_exec_awk '
- # Note: mawk <= 1.3.3-20090705 does not support the POSIX brackets of
- # the form [[:blank:]], and Ubuntu 18.04 LTS still uses this
- # 16-year-old mawk unfortunately. We need to use [ \t] instead.
- match(tolower($0), /^[ \t]*host(name)?[ \t]*[ \t=]/) {
- $0 = substr($0, RLENGTH + 1) # Remove "Host(name)?=?"
- sub(/#.*/, "")
- for (i = 1; i <= NF; i++)
- if ($i !~ /[*?%]/)
- print $i
- }
- ' ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2> /dev/null
- ) \
- <(
- __fzf_exec_awk -F ',' '
- match($0, /^[][a-zA-Z0-9.,:-]+/) {
- $0 = substr($0, 1, RLENGTH)
- gsub(/[][]|:[^,]*/, "")
- for (i = 1; i <= NF; i++)
- print $i
- }
- ' ~/.ssh/known_hosts 2> /dev/null
- ) \
- <(
- __fzf_exec_awk '
- {
- sub(/#.*/, "")
- for (i = 2; i <= NF; i++)
- if ($i != "0.0.0.0")
- print $i
- }
- ' /etc/hosts 2> /dev/null
- )
- }
- fi
-
- _fzf_host_completion() {
- _fzf_complete +m -- "$@" < <(__fzf_list_hosts)
- }
-
- # Values for $1 $2 $3 are described here
- # https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html
- # > the first argument ($1) is the name of the command whose arguments are being completed,
- # > the second argument ($2) is the word being completed,
- # > and the third argument ($3) is the word preceding the word being completed on the current command line.
- _fzf_complete_ssh() {
- case $3 in
- -i | -F | -E)
- _fzf_path_completion "$@"
- ;;
- *)
- local user=
- [[ $2 =~ '@' ]] && user="${2%%@*}@"
- _fzf_complete +m -- "$@" < <(__fzf_list_hosts | __fzf_exec_awk -v user="$user" '{print user $0}')
- ;;
- esac
- }
-
- _fzf_var_completion() {
- _fzf_complete -m -- "$@" < <(
- declare -xp | command sed -En 's|^declare [^ ]+ ([^=]+).*|\1|p'
- )
- }
-
- _fzf_alias_completion() {
- _fzf_complete -m -- "$@" < <(
- alias | command sed -En 's|^alias ([^=]+).*|\1|p'
- )
- }
-
- # fzf options
- complete -o default -F _fzf_opts_completion fzf
- # fzf-tmux is a thin fzf wrapper that has only a few more options than fzf
- # itself. As a quick improvement we take fzf's completion. Adding the few extra
- # fzf-tmux specific options (like `-w WIDTH`) are left as a future patch.
- complete -o default -F _fzf_opts_completion fzf-tmux
-
- # Default path completion
- __fzf_default_completion() {
- __fzf_generic_path_completion _fzf_compgen_path "-m" "" "$@"
-
- # Dynamic completion loader has updated the completion for the command
- if [[ $? -eq 124 ]]; then
- # We trigger _fzf_setup_completion so that fuzzy completion for the command
- # still works. However, loader can update the completion for multiple
- # commands at once, and fuzzy completion will no longer work for those
- # other commands. e.g. pytest -> py.test, pytest-2, pytest-3, etc
- _fzf_setup_completion path "$1"
- return 124
- fi
- }
-
- # Set fuzzy path completion as the default completion for all commands.
- # We can't set up default completion,
- # 1. if it's already set up by another script
- # 2. or if the current version of bash doesn't support -D option
- complete | command grep -q __fzf_default_completion ||
- complete | command grep -- '-D$' | command grep -qv _comp_complete_load ||
- complete -D -F __fzf_default_completion -o default -o bashdefault 2> /dev/null
-
- d_cmds="${FZF_COMPLETION_DIR_COMMANDS-cd pushd rmdir}"
-
- # NOTE: $FZF_COMPLETION_PATH_COMMANDS and $FZF_COMPLETION_VAR_COMMANDS are
- # undocumented and subject to change in the future.
- #
- # NOTE: Although we have default completion, we still need to set up completion
- # for each command in case they already have completion set up by another script.
- a_cmds="${FZF_COMPLETION_PATH_COMMANDS-"
- awk bat cat code diff diff3
- emacs emacsclient ex file ftp g++ gcc gvim head hg hx java
- javac ld less more mvim nvim patch perl python ruby
- sed sftp sort source tail tee uniq vi view vim wc xdg-open
- basename bunzip2 bzip2 chmod chown curl cp dirname du
- find git grep gunzip gzip hg jar
- ln ls mv open rm rsync scp
- svn tar unzip zip"}"
- v_cmds="${FZF_COMPLETION_VAR_COMMANDS-export unset printenv}"
-
- # Preserve existing completion
- # iank: added ||: at the end, exit is nonzero due to some commands not having a completion spec.
- __fzf_orig_completion < <(complete -p $d_cmds $a_cmds $v_cmds unalias kill ssh 2> /dev/null ||:)
-
- if type _comp_load > /dev/null 2>&1; then
- # _comp_load was added in bash-completion 2.12 to replace _completion_loader.
- # We use it without -D option so that it does not use _comp_complete_minimal as the fallback.
- _fzf_completion_loader=_comp_load
- elif type __load_completion > /dev/null 2>&1; then
- # In bash-completion 2.11, _completion_loader internally calls __load_completion
- # and if it returns a non-zero status, it sets the default 'minimal' completion.
- _fzf_completion_loader=__load_completion
- elif type _completion_loader > /dev/null 2>&1; then
- _fzf_completion_loader=_completion_loader
- fi
-
- __fzf_defc() {
- local cmd func opts REPLY
- cmd="$1"
- func="$2"
- opts="$3"
- if __fzf_orig_completion_instantiate "$cmd" "$func"; then
- eval "$REPLY"
- else
- eval "complete -F \"$func\" $opts \"$cmd\""
- fi
- }
-
- # Anything
- for cmd in $a_cmds; do
- __fzf_defc "$cmd" _fzf_path_completion "-o default -o bashdefault"
- done
-
- # Directory
- for cmd in $d_cmds; do
- __fzf_defc "$cmd" _fzf_dir_completion "-o bashdefault -o nospace -o dirnames"
- done
-
- # Variables
- for cmd in $v_cmds; do
- __fzf_defc "$cmd" _fzf_var_completion "-o default -o nospace -v"
- done
-
- # Aliases
- __fzf_defc unalias _fzf_alias_completion "-a"
-
- # Processes
- __fzf_defc kill _fzf_proc_completion "-o default -o bashdefault"
-
- # ssh
- __fzf_defc ssh _fzf_complete_ssh "-o default -o bashdefault"
-
- unset cmd d_cmds a_cmds v_cmds
-
- _fzf_setup_completion() {
- local kind fn cmd
- kind=$1
- fn=_fzf_${1}_completion
- if [[ $# -lt 2 ]] || ! type -t "$fn" > /dev/null; then
- echo "usage: ${FUNCNAME[0]} path|dir|var|alias|host|proc COMMANDS..."
- return 1
- fi
- shift
- __fzf_orig_completion < <(complete -p "$@" 2> /dev/null)
- for cmd in "$@"; do
- case "$kind" in
- dir) __fzf_defc "$cmd" "$fn" "-o nospace -o dirnames" ;;
- var) __fzf_defc "$cmd" "$fn" "-o default -o nospace -v" ;;
- alias) __fzf_defc "$cmd" "$fn" "-a" ;;
- *) __fzf_defc "$cmd" "$fn" "-o default -o bashdefault" ;;
- esac
- done
- }
- #----END shfmt
-
-fi
-### end: completion.bash ###
-
-
-# ensure no bad programs appending to this file will have an affect
-return 0
# regex="("$'\n'"|^)$string("$'\n'"|$)"
name-list-test() {
- local t=$(mktemp)
+ local t
+ t=$(mktemp)
cat >$t <<'EOF'
bonny (destroyer) williams
Sean O'brien
cat $t
}
name-list-clean() {
- local tmp=$(mktemp)
+ local tmp
+ tmp=$(mktemp)
cat >$tmp <<'EOF'
# aliases
s/'[^']+'//g;
# https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html
if $restore; then
set -x
+ # shellcheck disable=SC2043 # intentional
for ncdir in /var/www/ncninja; do
ncbase=${ncdir##*/}
ssh root@$host sudo -u www-data php $ncdir/occ -q maintenance:mode --on ||: # might not be running
ret=0
if [[ $HOSTNAME == "$MAIL_HOST" ]]; then
mkdir -p /p/bkbackup
+ # shellcheck disable=SC2043 # intentional
for ncdir in /var/www/ncninja; do
ncbase=${ncdir##*/}
mkdir -p /p/bkbackup/$ncbase
--- /dev/null
+##### this is from output of fzf --bash plus a small modification to
+# prevent a command from reporting a superflous nonzero exit, search for
+# iank below.
+
+### key-bindings.bash ###
+# ____ ____
+# / __/___ / __/
+# / /_/_ / / /_
+# / __/ / /_/ __/
+# /_/ /___/_/ key-bindings.bash
+#
+# - $FZF_TMUX_OPTS
+# - $FZF_CTRL_T_COMMAND
+# - $FZF_CTRL_T_OPTS
+# - $FZF_CTRL_R_COMMAND
+# - $FZF_CTRL_R_OPTS
+# - $FZF_ALT_C_COMMAND
+# - $FZF_ALT_C_OPTS
+
+if [[ $- =~ i ]]; then
+
+
+ # Key bindings
+ # ------------
+
+ #----BEGIN shfmt
+ #----BEGIN INCLUDE common.sh
+ # NOTE: Do not directly edit this section, which is copied from "common.sh".
+ # To modify it, one can edit "common.sh" and run "./update.sh" to apply
+ # the changes. See code comments in "common.sh" for the implementation details.
+
+ __fzf_defaults() {
+ printf '%s\n' "--height ${FZF_TMUX_HEIGHT:-40%} --min-height 20+ --bind=ctrl-z:ignore $1"
+ command cat "${FZF_DEFAULT_OPTS_FILE-}" 2> /dev/null
+ printf '%s\n' "${FZF_DEFAULT_OPTS-} $2"
+ }
+
+ __fzf_exec_awk() {
+ if [[ -z ${__fzf_awk-} ]]; then
+ __fzf_awk=awk
+ if [[ $OSTYPE == solaris* && -x /usr/xpg4/bin/awk ]]; then
+ __fzf_awk=/usr/xpg4/bin/awk
+ elif command -v mawk > /dev/null 2>&1; then
+ local n x y z d
+ IFS=' .' read -r n x y z d <<< $(command mawk -W version 2> /dev/null)
+ [[ $n == mawk ]] && ((d >= 20230302 && (x * 1000 + y) * 1000 + z >= 1003004)) && __fzf_awk=mawk
+ fi
+ fi
+ LC_ALL=C exec "$__fzf_awk" "$@"
+ }
+ #----END INCLUDE
+
+ __fzf_select__() {
+ FZF_DEFAULT_COMMAND=${FZF_CTRL_T_COMMAND:-} \
+ FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse --walker=file,dir,follow,hidden --scheme=path" "${FZF_CTRL_T_OPTS-} -m") \
+ FZF_DEFAULT_OPTS_FILE='' $(__fzfcmd) "$@" |
+ while read -r item; do
+ printf '%q ' "$item" # escape special chars
+ done
+ }
+
+ __fzfcmd() {
+ [[ -n ${TMUX_PANE-} ]] && { [[ ${FZF_TMUX:-0} != 0 ]] || [[ -n ${FZF_TMUX_OPTS-} ]]; } &&
+ echo "fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- " || echo "fzf"
+ }
+
+ fzf-file-widget() {
+ local selected="$(__fzf_select__ "$@")"
+ READLINE_LINE="${READLINE_LINE:0:READLINE_POINT}$selected${READLINE_LINE:READLINE_POINT}"
+ READLINE_POINT=$((READLINE_POINT + ${#selected}))
+ }
+
+ __fzf_cd__() {
+ local dir
+ dir=$(
+ FZF_DEFAULT_COMMAND=${FZF_ALT_C_COMMAND:-} \
+ FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse --walker=dir,follow,hidden --scheme=path" "${FZF_ALT_C_OPTS-} +m") \
+ FZF_DEFAULT_OPTS_FILE='' $(__fzfcmd)
+ ) && printf 'builtin cd -- %q' "$(builtin unset CDPATH && builtin cd -- "$dir" && builtin pwd)"
+ }
+
+ if command -v perl > /dev/null; then
+ __fzf_history__() {
+ local output script
+ script='BEGIN { getc; $/ = "\n\t"; $HISTCOUNT = $ENV{last_hist} + 1 } s/^[ *]//; s/\n/\n\t/gm; print $HISTCOUNT - $. . "\t$_" if !$seen{$_}++'
+ output=$(
+ set +o pipefail
+ builtin fc -lnr -2147483648 |
+ last_hist=$(HISTTIMEFORMAT='' builtin history 1) command perl -n -l0 -e "$script" |
+ FZF_DEFAULT_OPTS=$(__fzf_defaults "" "-n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,alt-r:toggle-raw --wrap-sign '"$'\t'"↳ ' --highlight-line ${FZF_CTRL_R_OPTS-} +m --read0") \
+ FZF_DEFAULT_OPTS_FILE='' $(__fzfcmd) --query "$READLINE_LINE"
+ ) || return
+ READLINE_LINE=$(command perl -pe 's/^\d*\t//' <<< "$output")
+ if [[ -z $READLINE_POINT ]]; then
+ echo "$READLINE_LINE"
+ else
+ READLINE_POINT=0x7fffffff
+ fi
+ }
+ else # awk - fallback for POSIX systems
+ __fzf_history__() {
+ local output script
+ [[ $(HISTTIMEFORMAT='' builtin history 1) =~ [[:digit:]]+ ]] # how many history entries
+ script='function P(b) { ++n; sub(/^[ *]/, "", b); if (!seen[b]++) { printf "%d\t%s%c", '$((BASH_REMATCH + 1))' - n, b, 0 } }
+ NR==1 { b = substr($0, 2); next }
+ /^\t/ { P(b); b = substr($0, 2); next }
+ { b = b RS $0 }
+ END { if (NR) P(b) }'
+ output=$(
+ set +o pipefail
+ builtin fc -lnr -2147483648 2> /dev/null | # ( $'\t '<lines>$'\n' )* ; <lines> ::= [^\n]* ( $'\n'<lines> )*
+ __fzf_exec_awk "$script" | # ( <counter>$'\t'<lines>$'\000' )*
+ FZF_DEFAULT_OPTS=$(__fzf_defaults "" "-n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,alt-r:toggle-raw --wrap-sign '"$'\t'"↳ ' --highlight-line ${FZF_CTRL_R_OPTS-} +m --read0") \
+ FZF_DEFAULT_OPTS_FILE='' $(__fzfcmd) --query "$READLINE_LINE"
+ ) || return
+ READLINE_LINE=${output#*$'\t'}
+ if [[ -z $READLINE_POINT ]]; then
+ echo "$READLINE_LINE"
+ else
+ READLINE_POINT=0x7fffffff
+ fi
+ }
+ fi
+
+ # Required to refresh the prompt after fzf
+ bind -m emacs-standard '"\er": redraw-current-line'
+
+ bind -m vi-command '"\C-z": emacs-editing-mode'
+ bind -m vi-insert '"\C-z": emacs-editing-mode'
+ bind -m emacs-standard '"\C-z": vi-editing-mode'
+
+ if ((BASH_VERSINFO[0] < 4)); then
+ # CTRL-T - Paste the selected file path into the command line
+ if [[ ${FZF_CTRL_T_COMMAND-x} != "" ]]; then
+ bind -m emacs-standard '"\C-t": " \C-b\C-k \C-u`__fzf_select__`\e\C-e\er\C-a\C-y\C-h\C-e\e \C-y\ey\C-x\C-x\C-f\C-y\ey\C-_"'
+ bind -m vi-command '"\C-t": "\C-z\C-t\C-z"'
+ bind -m vi-insert '"\C-t": "\C-z\C-t\C-z"'
+ fi
+
+ # CTRL-R - Paste the selected command from history into the command line
+ if [[ ${FZF_CTRL_R_COMMAND-x} != "" ]]; then
+ if [[ -n ${FZF_CTRL_R_COMMAND-} ]]; then
+ echo "warning: FZF_CTRL_R_COMMAND is set to a custom command, but custom commands are not yet supported for CTRL-R" >&2
+ fi
+ bind -m emacs-standard '"\C-r": "\C-e \C-u\C-y\ey\C-u`__fzf_history__`\e\C-e\er"'
+ bind -m vi-command '"\C-r": "\C-z\C-r\C-z"'
+ bind -m vi-insert '"\C-r": "\C-z\C-r\C-z"'
+ fi
+ else
+ # CTRL-T - Paste the selected file path into the command line
+ if [[ ${FZF_CTRL_T_COMMAND-x} != "" ]]; then
+ bind -m emacs-standard -x '"\C-t": fzf-file-widget'
+ bind -m vi-command -x '"\C-t": fzf-file-widget'
+ bind -m vi-insert -x '"\C-t": fzf-file-widget'
+ fi
+
+ # CTRL-R - Paste the selected command from history into the command line
+ if [[ ${FZF_CTRL_R_COMMAND-x} != "" ]]; then
+ if [[ -n ${FZF_CTRL_R_COMMAND-} ]]; then
+ echo "warning: FZF_CTRL_R_COMMAND is set to a custom command, but custom commands are not yet supported for CTRL-R" >&2
+ fi
+ bind -m emacs-standard -x '"\C-r": __fzf_history__'
+ bind -m vi-command -x '"\C-r": __fzf_history__'
+ bind -m vi-insert -x '"\C-r": __fzf_history__'
+ fi
+ fi
+
+ # ALT-C - cd into the selected directory
+ if [[ ${FZF_ALT_C_COMMAND-x} != "" ]]; then
+ bind -m emacs-standard '"\ec": " \C-b\C-k \C-u`__fzf_cd__`\e\C-e\er\C-m\C-y\C-h\e \C-y\ey\C-x\C-x\C-d\C-y\ey\C-_"'
+ bind -m vi-command '"\ec": "\C-z\ec\C-z"'
+ bind -m vi-insert '"\ec": "\C-z\ec\C-z"'
+ fi
+ #----END shfmt
+
+fi
+### end: key-bindings.bash ###
+### completion.bash ###
+# ____ ____
+# / __/___ / __/
+# / /_/_ / / /_
+# / __/ / /_/ __/
+# /_/ /___/_/ completion.bash
+#
+# - $FZF_TMUX (default: 0)
+# - $FZF_TMUX_OPTS (default: empty)
+# - $FZF_COMPLETION_TRIGGER (default: '**')
+# - $FZF_COMPLETION_OPTS (default: empty)
+# - $FZF_COMPLETION_PATH_OPTS (default: empty)
+# - $FZF_COMPLETION_DIR_OPTS (default: empty)
+
+if [[ $- =~ i ]]; then
+
+
+ # To use custom commands instead of find, override _fzf_compgen_{path,dir}
+ #
+ # _fzf_compgen_path() {
+ # echo "$1"
+ # command find -L "$1" \
+ # -name .git -prune -o -name .hg -prune -o -name .svn -prune -o \( -type d -o -type f -o -type l \) \
+ # -a -not -path "$1" -print 2> /dev/null | command sed 's@^\./@@'
+ # }
+ #
+ # _fzf_compgen_dir() {
+ # command find -L "$1" \
+ # -name .git -prune -o -name .hg -prune -o -name .svn -prune -o -type d \
+ # -a -not -path "$1" -print 2> /dev/null | command sed 's@^\./@@'
+ # }
+
+ ###########################################################
+
+ #----BEGIN shfmt
+ #----BEGIN INCLUDE common.sh
+ # NOTE: Do not directly edit this section, which is copied from "common.sh".
+ # To modify it, one can edit "common.sh" and run "./update.sh" to apply
+ # the changes. See code comments in "common.sh" for the implementation details.
+
+ __fzf_defaults() {
+ printf '%s\n' "--height ${FZF_TMUX_HEIGHT:-40%} --min-height 20+ --bind=ctrl-z:ignore $1"
+ command cat "${FZF_DEFAULT_OPTS_FILE-}" 2> /dev/null
+ printf '%s\n' "${FZF_DEFAULT_OPTS-} $2"
+ }
+
+ __fzf_exec_awk() {
+ if [[ -z ${__fzf_awk-} ]]; then
+ __fzf_awk=awk
+ if [[ $OSTYPE == solaris* && -x /usr/xpg4/bin/awk ]]; then
+ __fzf_awk=/usr/xpg4/bin/awk
+ elif command -v mawk > /dev/null 2>&1; then
+ local n x y z d
+ IFS=' .' read -r n x y z d <<< $(command mawk -W version 2> /dev/null)
+ [[ $n == mawk ]] && ((d >= 20230302 && (x * 1000 + y) * 1000 + z >= 1003004)) && __fzf_awk=mawk
+ fi
+ fi
+ LC_ALL=C exec "$__fzf_awk" "$@"
+ }
+ #----END INCLUDE
+
+ __fzf_comprun() {
+ if [[ "$(type -t _fzf_comprun 2>&1)" == function ]]; then
+ _fzf_comprun "$@"
+ elif [[ -n ${TMUX_PANE-} ]] && { [[ ${FZF_TMUX:-0} != 0 ]] || [[ -n ${FZF_TMUX_OPTS-} ]]; }; then
+ shift
+ fzf-tmux ${FZF_TMUX_OPTS:--d${FZF_TMUX_HEIGHT:-40%}} -- "$@"
+ else
+ shift
+ fzf "$@"
+ fi
+ }
+
+ __fzf_orig_completion() {
+ local l comp f cmd
+ while read -r l; do
+ if [[ $l =~ ^(.*\ -F)\ *([^ ]*).*\ ([^ ]*)$ ]]; then
+ comp="${BASH_REMATCH[1]}"
+ f="${BASH_REMATCH[2]}"
+ cmd="${BASH_REMATCH[3]}"
+ [[ $f == _fzf_* ]] && continue
+ printf -v "_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}" "%s" "${comp} %s ${cmd} #${f}"
+ if [[ $l == *" -o nospace "* ]] && [[ ${__fzf_nospace_commands-} != *" $cmd "* ]]; then
+ __fzf_nospace_commands="${__fzf_nospace_commands-} $cmd "
+ fi
+ fi
+ done
+ }
+
+ # @param $1 cmd - Command name for which the original completion is searched
+ # @var[out] REPLY - Original function name is returned
+ __fzf_orig_completion_get_orig_func() {
+ local cmd orig_var orig
+ cmd=$1
+ orig_var="_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}"
+ orig="${!orig_var-}"
+ REPLY="${orig##*#}"
+ [[ $REPLY ]] && type "$REPLY" &> /dev/null
+ }
+
+ # @param $1 cmd - Command name for which the original completion is searched
+ # @param $2 func - Fzf's completion function to replace the original function
+ # @var[out] REPLY - Completion setting is returned as a string to "eval"
+ __fzf_orig_completion_instantiate() {
+ local cmd func orig_var orig
+ cmd=$1
+ func=$2
+ orig_var="_fzf_orig_completion_${cmd//[^A-Za-z0-9_]/_}"
+ orig="${!orig_var-}"
+ orig="${orig%#*}"
+ [[ $orig == *' %s '* ]] || return 1
+ printf -v REPLY "$orig" "$func"
+ }
+
+ _fzf_opts_completion() {
+ local cur prev opts
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD - 1]}"
+ opts="
+ +c --no-color
+ +i --no-ignore-case
+ +s --no-sort
+ +x --no-extended
+ --ansi
+ --bash
+ --bind
+ --border
+ --border-label
+ --border-label-pos
+ --color
+ --cycle
+ --disabled
+ --ellipsis
+ --expect
+ --filepath-word
+ --fish
+ --header
+ --header-first
+ --header-lines
+ --height
+ --highlight-line
+ --history
+ --history-size
+ --hscroll-off
+ --info
+ --jump-labels
+ --keep-right
+ --layout
+ --listen
+ --listen-unsafe
+ --literal
+ --man
+ --margin
+ --marker
+ --min-height
+ --no-bold
+ --no-clear
+ --no-hscroll
+ --no-mouse
+ --no-scrollbar
+ --no-separator
+ --no-unicode
+ --padding
+ --pointer
+ --preview
+ --preview-label
+ --preview-label-pos
+ --preview-window
+ --print-query
+ --print0
+ --prompt
+ --read0
+ --reverse
+ --scheme
+ --scroll-off
+ --separator
+ --sync
+ --tabstop
+ --tac
+ --tiebreak
+ --tmux
+ --track
+ --version
+ --with-nth
+ --with-shell
+ --wrap
+ --zsh
+ -0 --exit-0
+ -1 --select-1
+ -d --delimiter
+ -e --exact
+ -f --filter
+ -h --help
+ -i --ignore-case
+ -m --multi
+ -n --nth
+ -q --query
+ --"
+
+ case "${prev}" in
+ --scheme)
+ COMPREPLY=($(compgen -W "default path history" -- "$cur"))
+ return 0
+ ;;
+ --tiebreak)
+ COMPREPLY=($(compgen -W "length chunk begin end index" -- "$cur"))
+ return 0
+ ;;
+ --color)
+ COMPREPLY=($(compgen -W "dark light 16 bw no" -- "$cur"))
+ return 0
+ ;;
+ --layout)
+ COMPREPLY=($(compgen -W "default reverse reverse-list" -- "$cur"))
+ return 0
+ ;;
+ --info)
+ COMPREPLY=($(compgen -W "default right hidden inline inline-right" -- "$cur"))
+ return 0
+ ;;
+ --preview-window)
+ COMPREPLY=($(compgen -W "
+ default
+ hidden
+ nohidden
+ wrap
+ nowrap
+ cycle
+ nocycle
+ up top
+ down bottom
+ left
+ right
+ rounded border border-rounded
+ sharp border-sharp
+ border-bold
+ border-block
+ border-thinblock
+ border-double
+ noborder border-none
+ border-horizontal
+ border-vertical
+ border-up border-top
+ border-down border-bottom
+ border-left
+ border-right
+ follow
+ nofollow" -- "$cur"))
+ return 0
+ ;;
+ --border)
+ COMPREPLY=($(compgen -W "rounded sharp bold block thinblock double horizontal vertical top bottom left right none" -- "$cur"))
+ return 0
+ ;;
+ --border-label-pos | --preview-label-pos)
+ COMPREPLY=($(compgen -W "center bottom top" -- "$cur"))
+ return 0
+ ;;
+ esac
+
+ if [[ $cur =~ ^-|\+ ]]; then
+ COMPREPLY=($(compgen -W "${opts}" -- "$cur"))
+ return 0
+ fi
+
+ return 0
+ }
+
+ _fzf_handle_dynamic_completion() {
+ local cmd ret REPLY orig_cmd orig_complete
+ cmd="$1"
+ shift
+ orig_cmd="$1"
+ if __fzf_orig_completion_get_orig_func "$cmd"; then
+ "$REPLY" "$@"
+ elif [[ -n ${_fzf_completion_loader-} ]]; then
+ orig_complete=$(complete -p "$orig_cmd" 2> /dev/null)
+ $_fzf_completion_loader "$@"
+ ret=$?
+ # _completion_loader may not have updated completion for the command
+ if [[ "$(complete -p "$orig_cmd" 2> /dev/null)" != "$orig_complete" ]]; then
+ __fzf_orig_completion < <(complete -p "$orig_cmd" 2> /dev/null)
+ __fzf_orig_completion_get_orig_func "$cmd" || ret=1
+
+ # Update orig_complete by _fzf_orig_completion entry
+ [[ $orig_complete =~ ' -F '(_fzf_[^ ]+)' ' ]] &&
+ __fzf_orig_completion_instantiate "$cmd" "${BASH_REMATCH[1]}" &&
+ orig_complete=$REPLY
+
+ if [[ ${__fzf_nospace_commands-} == *" $orig_cmd "* ]]; then
+ eval "${orig_complete/ -F / -o nospace -F }"
+ else
+ eval "$orig_complete"
+ fi
+ fi
+ [[ $ret -eq 0 ]] && return 124
+ return $ret
+ fi
+ }
+
+ __fzf_generic_path_completion() {
+ local cur base dir leftover matches trigger cmd
+ cmd="${COMP_WORDS[0]}"
+ if [[ $cmd == \\* ]]; then
+ cmd="${cmd:1}"
+ fi
+ COMPREPLY=()
+ trigger=${FZF_COMPLETION_TRIGGER-'**'}
+ [[ $COMP_CWORD -ge 0 ]] && cur="${COMP_WORDS[COMP_CWORD]}"
+ if [[ $cur == *"$trigger" ]] && [[ $cur != *'$('* ]] && [[ $cur != *':='* ]] && [[ $cur != *'`'* ]]; then
+ base=${cur:0:${#cur}-${#trigger}}
+ eval "base=$base" 2> /dev/null || return
+
+ dir=
+ [[ $base == *"/"* ]] && dir="$base"
+ while true; do
+ if [[ -z $dir ]] || [[ -d $dir ]]; then
+ leftover=${base/#"$dir"/}
+ leftover=${leftover/#\//}
+ [[ -z $dir ]] && dir='.'
+ [[ $dir != "/" ]] && dir="${dir/%\//}"
+ matches=$(
+ export FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse --scheme=path" "${FZF_COMPLETION_OPTS-} $2")
+ unset FZF_DEFAULT_COMMAND FZF_DEFAULT_OPTS_FILE
+ if declare -F "$1" > /dev/null; then
+ eval "$1 $(printf %q "$dir")" | __fzf_comprun "$4" -q "$leftover"
+ else
+ if [[ $1 =~ dir ]]; then
+ walker=dir,follow
+ eval "rest=(${FZF_COMPLETION_DIR_OPTS-})"
+ else
+ walker=file,dir,follow,hidden
+ eval "rest=(${FZF_COMPLETION_PATH_OPTS-})"
+ fi
+ __fzf_comprun "$4" -q "$leftover" --walker "$walker" --walker-root="$dir" "${rest[@]}"
+ fi | while read -r item; do
+ printf "%q " "${item%$3}$3"
+ done
+ )
+ matches=${matches% }
+ [[ -z $3 ]] && [[ ${__fzf_nospace_commands-} == *" ${COMP_WORDS[0]} "* ]] && matches="$matches "
+ if [[ -n $matches ]]; then
+ COMPREPLY=("$matches")
+ else
+ COMPREPLY=("$cur")
+ fi
+ # To redraw line after fzf closes (printf '\e[5n')
+ bind '"\e[0n": redraw-current-line' 2> /dev/null
+ printf '\e[5n'
+ return 0
+ fi
+ dir=$(command dirname "$dir")
+ [[ $dir =~ /$ ]] || dir="$dir"/
+ done
+ else
+ shift
+ shift
+ shift
+ _fzf_handle_dynamic_completion "$cmd" "$@"
+ fi
+ }
+
+ _fzf_complete() {
+ # Split arguments around --
+ local args rest str_arg i sep
+ args=("$@")
+ sep=
+ for i in "${!args[@]}"; do
+ if [[ ${args[$i]} == -- ]]; then
+ sep=$i
+ break
+ fi
+ done
+ if [[ -n $sep ]]; then
+ str_arg=
+ rest=("${args[@]:$((sep + 1)):${#args[@]}}")
+ args=("${args[@]:0:sep}")
+ else
+ str_arg=$1
+ args=()
+ shift
+ rest=("$@")
+ fi
+
+ local cur selected trigger cmd post
+ post="$(caller 0 | __fzf_exec_awk '{print $2}')_post"
+ type -t "$post" > /dev/null 2>&1 || post='command cat'
+
+ trigger=${FZF_COMPLETION_TRIGGER-'**'}
+ cmd="${COMP_WORDS[0]}"
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ if [[ $cur == *"$trigger" ]] && [[ $cur != *'$('* ]] && [[ $cur != *':='* ]] && [[ $cur != *'`'* ]]; then
+ cur=${cur:0:${#cur}-${#trigger}}
+
+ selected=$(
+ FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse" "${FZF_COMPLETION_OPTS-} $str_arg") \
+ FZF_DEFAULT_OPTS_FILE='' \
+ __fzf_comprun "${rest[0]}" "${args[@]}" -q "$cur" | eval "$post" | command tr '\n' ' '
+ )
+ selected=${selected% } # Strip trailing space not to repeat "-o nospace"
+ if [[ -n $selected ]]; then
+ COMPREPLY=("$selected")
+ else
+ COMPREPLY=("$cur")
+ fi
+ bind '"\e[0n": redraw-current-line' 2> /dev/null
+ printf '\e[5n'
+ return 0
+ else
+ _fzf_handle_dynamic_completion "$cmd" "${rest[@]}"
+ fi
+ }
+
+ _fzf_path_completion() {
+ __fzf_generic_path_completion _fzf_compgen_path "-m" "" "$@"
+ }
+
+ # Deprecated. No file only completion.
+ _fzf_file_completion() {
+ _fzf_path_completion "$@"
+ }
+
+ _fzf_dir_completion() {
+ __fzf_generic_path_completion _fzf_compgen_dir "" "/" "$@"
+ }
+
+ _fzf_complete_kill() {
+ _fzf_proc_completion "$@"
+ }
+
+ _fzf_proc_completion() {
+ local transformer
+ transformer='
+ if [[ $FZF_KEY =~ ctrl|alt|shift ]] && [[ -n $FZF_NTH ]]; then
+ nths=( ${FZF_NTH//,/ } )
+ new_nths=()
+ found=0
+ for nth in ${nths[@]}; do
+ if [[ $nth = $FZF_CLICK_HEADER_NTH ]]; then
+ found=1
+ else
+ new_nths+=($nth)
+ fi
+ done
+ [[ $found = 0 ]] && new_nths+=($FZF_CLICK_HEADER_NTH)
+ new_nths=${new_nths[*]}
+ new_nths=${new_nths// /,}
+ echo "change-nth($new_nths)+change-prompt($new_nths> )"
+ else
+ if [[ $FZF_NTH = $FZF_CLICK_HEADER_NTH ]]; then
+ echo "change-nth()+change-prompt(> )"
+ else
+ echo "change-nth($FZF_CLICK_HEADER_NTH)+change-prompt($FZF_CLICK_HEADER_WORD> )"
+ fi
+ fi
+ '
+ _fzf_complete -m --header-lines=1 --no-preview --wrap --color fg:dim,nth:regular \
+ --bind "click-header:transform:$transformer" -- "$@" < <(
+ command ps -eo user,pid,ppid,start,time,command 2> /dev/null ||
+ command ps -eo user,pid,ppid,time,args 2> /dev/null || # For BusyBox
+ command ps --everyone --full --windows # For cygwin
+ )
+ }
+
+ _fzf_proc_completion_post() {
+ __fzf_exec_awk '{print $2}'
+ }
+
+ # To use custom hostname lists, override __fzf_list_hosts.
+ # The function is expected to print hostnames, one per line as well as in the
+ # desired sorting and with any duplicates removed, to standard output.
+ #
+ # e.g.
+ # # Use bash-completions’s _known_hosts_real() for getting the list of hosts
+ # __fzf_list_hosts() {
+ # # Set the local attribute for any non-local variable that is set by _known_hosts_real()
+ # local COMPREPLY=()
+ # _known_hosts_real ''
+ # printf '%s\n' "${COMPREPLY[@]}" | command sort -u --version-sort
+ # }
+ if ! declare -F __fzf_list_hosts > /dev/null; then
+ __fzf_list_hosts() {
+ command sort -u \
+ <(
+ # Note: To make the pathname expansion of "~/.ssh/config.d/*" work
+ # properly, we need to adjust the related shell options. We need to
+ # unset "set -f" and "GLOBIGNORE", which disable the pathname expansion
+ # totally or partially. We need to unset "dotglob" and "nocaseglob" to
+ # avoid matching unwanted files. We need to unset "failglob" to avoid
+ # outputting the error messages to the terminal when no matching is
+ # found. We need to set "nullglob" to avoid attempting to read the
+ # literal filename '~/.ssh/config.d/*' when no matching is found.
+ set +f
+ GLOBIGNORE=
+ shopt -u dotglob nocaseglob failglob
+ shopt -s nullglob
+
+ __fzf_exec_awk '
+ # Note: mawk <= 1.3.3-20090705 does not support the POSIX brackets of
+ # the form [[:blank:]], and Ubuntu 18.04 LTS still uses this
+ # 16-year-old mawk unfortunately. We need to use [ \t] instead.
+ match(tolower($0), /^[ \t]*host(name)?[ \t]*[ \t=]/) {
+ $0 = substr($0, RLENGTH + 1) # Remove "Host(name)?=?"
+ sub(/#.*/, "")
+ for (i = 1; i <= NF; i++)
+ if ($i !~ /[*?%]/)
+ print $i
+ }
+ ' ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2> /dev/null
+ ) \
+ <(
+ __fzf_exec_awk -F ',' '
+ match($0, /^[][a-zA-Z0-9.,:-]+/) {
+ $0 = substr($0, 1, RLENGTH)
+ gsub(/[][]|:[^,]*/, "")
+ for (i = 1; i <= NF; i++)
+ print $i
+ }
+ ' ~/.ssh/known_hosts 2> /dev/null
+ ) \
+ <(
+ __fzf_exec_awk '
+ {
+ sub(/#.*/, "")
+ for (i = 2; i <= NF; i++)
+ if ($i != "0.0.0.0")
+ print $i
+ }
+ ' /etc/hosts 2> /dev/null
+ )
+ }
+ fi
+
+ _fzf_host_completion() {
+ _fzf_complete +m -- "$@" < <(__fzf_list_hosts)
+ }
+
+ # Values for $1 $2 $3 are described here
+ # https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html
+ # > the first argument ($1) is the name of the command whose arguments are being completed,
+ # > the second argument ($2) is the word being completed,
+ # > and the third argument ($3) is the word preceding the word being completed on the current command line.
+ _fzf_complete_ssh() {
+ case $3 in
+ -i | -F | -E)
+ _fzf_path_completion "$@"
+ ;;
+ *)
+ local user=
+ [[ $2 =~ '@' ]] && user="${2%%@*}@"
+ _fzf_complete +m -- "$@" < <(__fzf_list_hosts | __fzf_exec_awk -v user="$user" '{print user $0}')
+ ;;
+ esac
+ }
+
+ _fzf_var_completion() {
+ _fzf_complete -m -- "$@" < <(
+ declare -xp | command sed -En 's|^declare [^ ]+ ([^=]+).*|\1|p'
+ )
+ }
+
+ _fzf_alias_completion() {
+ _fzf_complete -m -- "$@" < <(
+ alias | command sed -En 's|^alias ([^=]+).*|\1|p'
+ )
+ }
+
+ # fzf options
+ complete -o default -F _fzf_opts_completion fzf
+ # fzf-tmux is a thin fzf wrapper that has only a few more options than fzf
+ # itself. As a quick improvement we take fzf's completion. Adding the few extra
+ # fzf-tmux specific options (like `-w WIDTH`) are left as a future patch.
+ complete -o default -F _fzf_opts_completion fzf-tmux
+
+ # Default path completion
+ __fzf_default_completion() {
+ __fzf_generic_path_completion _fzf_compgen_path "-m" "" "$@"
+
+ # Dynamic completion loader has updated the completion for the command
+ if [[ $? -eq 124 ]]; then
+ # We trigger _fzf_setup_completion so that fuzzy completion for the command
+ # still works. However, loader can update the completion for multiple
+ # commands at once, and fuzzy completion will no longer work for those
+ # other commands. e.g. pytest -> py.test, pytest-2, pytest-3, etc
+ _fzf_setup_completion path "$1"
+ return 124
+ fi
+ }
+
+ # Set fuzzy path completion as the default completion for all commands.
+ # We can't set up default completion,
+ # 1. if it's already set up by another script
+ # 2. or if the current version of bash doesn't support -D option
+ complete | command grep -q __fzf_default_completion ||
+ complete | command grep -- '-D$' | command grep -qv _comp_complete_load ||
+ complete -D -F __fzf_default_completion -o default -o bashdefault 2> /dev/null
+
+ d_cmds="${FZF_COMPLETION_DIR_COMMANDS-cd pushd rmdir}"
+
+ # NOTE: $FZF_COMPLETION_PATH_COMMANDS and $FZF_COMPLETION_VAR_COMMANDS are
+ # undocumented and subject to change in the future.
+ #
+ # NOTE: Although we have default completion, we still need to set up completion
+ # for each command in case they already have completion set up by another script.
+ a_cmds="${FZF_COMPLETION_PATH_COMMANDS-"
+ awk bat cat code diff diff3
+ emacs emacsclient ex file ftp g++ gcc gvim head hg hx java
+ javac ld less more mvim nvim patch perl python ruby
+ sed sftp sort source tail tee uniq vi view vim wc xdg-open
+ basename bunzip2 bzip2 chmod chown curl cp dirname du
+ find git grep gunzip gzip hg jar
+ ln ls mv open rm rsync scp
+ svn tar unzip zip"}"
+ v_cmds="${FZF_COMPLETION_VAR_COMMANDS-export unset printenv}"
+
+ # Preserve existing completion
+ # iank: added ||: at the end, exit is nonzero due to some commands not having a completion spec.
+ __fzf_orig_completion < <(complete -p $d_cmds $a_cmds $v_cmds unalias kill ssh 2> /dev/null ||:)
+
+ if type _comp_load > /dev/null 2>&1; then
+ # _comp_load was added in bash-completion 2.12 to replace _completion_loader.
+ # We use it without -D option so that it does not use _comp_complete_minimal as the fallback.
+ _fzf_completion_loader=_comp_load
+ elif type __load_completion > /dev/null 2>&1; then
+ # In bash-completion 2.11, _completion_loader internally calls __load_completion
+ # and if it returns a non-zero status, it sets the default 'minimal' completion.
+ _fzf_completion_loader=__load_completion
+ elif type _completion_loader > /dev/null 2>&1; then
+ _fzf_completion_loader=_completion_loader
+ fi
+
+ __fzf_defc() {
+ local cmd func opts REPLY
+ cmd="$1"
+ func="$2"
+ opts="$3"
+ if __fzf_orig_completion_instantiate "$cmd" "$func"; then
+ eval "$REPLY"
+ else
+ eval "complete -F \"$func\" $opts \"$cmd\""
+ fi
+ }
+
+ # Anything
+ for cmd in $a_cmds; do
+ __fzf_defc "$cmd" _fzf_path_completion "-o default -o bashdefault"
+ done
+
+ # Directory
+ for cmd in $d_cmds; do
+ __fzf_defc "$cmd" _fzf_dir_completion "-o bashdefault -o nospace -o dirnames"
+ done
+
+ # Variables
+ for cmd in $v_cmds; do
+ __fzf_defc "$cmd" _fzf_var_completion "-o default -o nospace -v"
+ done
+
+ # Aliases
+ __fzf_defc unalias _fzf_alias_completion "-a"
+
+ # Processes
+ __fzf_defc kill _fzf_proc_completion "-o default -o bashdefault"
+
+ # ssh
+ __fzf_defc ssh _fzf_complete_ssh "-o default -o bashdefault"
+
+ unset cmd d_cmds a_cmds v_cmds
+
+ _fzf_setup_completion() {
+ local kind fn cmd
+ kind=$1
+ fn=_fzf_${1}_completion
+ if [[ $# -lt 2 ]] || ! type -t "$fn" > /dev/null; then
+ echo "usage: ${FUNCNAME[0]} path|dir|var|alias|host|proc COMMANDS..."
+ return 1
+ fi
+ shift
+ __fzf_orig_completion < <(complete -p "$@" 2> /dev/null)
+ for cmd in "$@"; do
+ case "$kind" in
+ dir) __fzf_defc "$cmd" "$fn" "-o nospace -o dirnames" ;;
+ var) __fzf_defc "$cmd" "$fn" "-o default -o nospace -v" ;;
+ alias) __fzf_defc "$cmd" "$fn" "-a" ;;
+ *) __fzf_defc "$cmd" "$fn" "-o default -o bashdefault" ;;
+ esac
+ done
+ }
+ #----END shfmt
+
+fi
+### end: completion.bash ###
if [[ -e /etc/i3 && ! -w /etc/i3 ]]; then
sudo chown -R iank:iank /etc/i3
fi
-cat common.conf i3.conf $(if [[ -s ~/i3-myx.conf ]]; then echo ~/i3-myx.conf; fi) >$f
+cat common.conf i3.conf "$(if [[ -s ~/i3-myx.conf ]]; then echo ~/i3-myx.conf; fi)" >$f
if [[ $I3SOCK ]]; then
echo $0: i3-msg $i3_cmd
. .bashrc
-# "a", as in, pass to sk -a
+tmp_brc2=$(mktemp)_brc2
+# "a", as in, pass to shk -a
a_files=(
- brc2
+ $tmp_brc2
install-my-scripts
)
a_sourced_files=(
script-files
beet-data
+ beetag
+ bash_unpublished/source-semi-priv
)
+ignore_files=(
+ fzf-brc
+ )
+
declare -a ls_files standard_files
+sed 's/^# source fsf-script-lib # for shellcheck-this-repo/source fsf-script-lib/' brc2 >$tmp_brc2
+
# so, shellcheck doesn't like files that declare variables that are just
# used in other files that source them. Using -a like this is the only
# way to solve it. We can't just -a on everything because then we would
mapfile -t ls_files <<<"$tmp"
for f in "${ls_files[@]}"; do
skip=false
- for fignore in ${a_files[@]} ${a_sourced_files[@]}; do
+ for fignore in ${ignore_files[@]} ${a_files[@]} ${a_sourced_files[@]}; do
if [[ $f == "$fignore" ]]; then
skip=true
break
fi
done
if $skip; then continue; fi
- if sk-p "$f" && [[ $f != *.conf ]]; then
+ if shk-p "$f" && [[ $f != *.conf ]]; then
standard_files+=("$f")
fi
done
} # end write-status
-deactivated_sshd=false
-lock_check_fails=0
-
# This prevents me having to mute notifications when I'm going to bed.
mute() {
local locked