|
|
- #!/usr/bin/env bash
-
- msg() {
- printf '>>> %s\n' "$@" >&2
- }
-
- dir=$(clipctl cache-dir)
- cache_file=$dir/line_cache
-
- log=$(mktemp)
- tim=$(mktemp)
- clipmenu_shim=$(mktemp)
- num_files=1500
-
- trap 'rm -f -- "$log" "$tim" "$clipmenu_shim"' EXIT
-
- if [[ $0 == /* ]]; then
- location=${0%/*}
- else
- location=$PWD/${0#./}
- location=${location%/*}
- fi
-
- msg 'Setting up edited clipmenu'
-
- cat - "$location/../clipmenu" > /tmp/clipmenu << EOF
- #!/usr/bin/env bash
-
- exec 3>&2 2> >(tee "$log" |
- sed -u 's/^.*$/now/' |
- date -f - +%s.%N > "$tim")
- set -x
-
- dmenu() { :; }
- xsel() { :; }
-
- EOF
-
- chmod a+x /tmp/clipmenu
-
- if ! (( NO_RECREATE )); then
- rm -rf "$dir"
- mkdir -p "$dir"
-
- msg "Writing $num_files clipboard files"
-
- for (( i = 0; i <= num_files; i++ )); do
- (( i % 100 )) || printf '%s... ' "$i"
-
- line_len=$(( (RANDOM % 10000) + 1 ))
- num_lines=$(( (RANDOM % 10) + 1 ))
- data=$(
- tr -dc 'a-zA-Z0-9' < /dev/urandom |
- fold -w "$line_len" |
- head -"$num_lines"
- )
- read -r first_line_raw <<< "$data"
- printf -v first_line '%s (%s lines)\n' "$first_line_raw" "$num_lines"
- printf '%d %s' "$i" "$first_line" >> "$cache_file"
- fn=$dir/$(cksum <<< "$first_line")
- printf '%s' "$data" > "$fn"
- done
-
- printf 'done\n'
- else
- msg 'Not nuking/creating new clipmenu files'
- fi
-
- msg 'Running modified clipmenu'
-
- time /tmp/clipmenu
-
- (( TIME_ONLY )) && exit 0
-
- msg 'Displaying perf data'
-
- # modified from http://stackoverflow.com/a/20855353/945780
- paste <(
- while read -r tim ;do
- [ -z "$last" ] && last=${tim//.} && first=${tim//.}
- crt=000000000$((${tim//.}-10#0$last))
- ctot=000000000$((${tim//.}-10#0$first))
- printf "%12.9f %12.9f\n" ${crt:0:${#crt}-9}.${crt:${#crt}-9} \
- ${ctot:0:${#ctot}-9}.${ctot:${#ctot}-9}
- last=${tim//.}
- done < "$tim"
- ) "$log" | less
|