683f57484f
Pretty much everyone runs with xsel, so xclip support is becoming more and more questionable. Just have people use xsel.
90 lines
1.9 KiB
Bash
Executable file
90 lines
1.9 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
msg() {
|
|
printf '>>> %s\n' "$@" >&2
|
|
}
|
|
|
|
dir=/tmp/clipmenu.$USER
|
|
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
|
|
#!/bin/bash
|
|
|
|
exec 3>&2 2> >(tee "$log" |
|
|
sed -u 's/^.*$/now/' |
|
|
date -f - +%s.%N > "$tim")
|
|
set -x
|
|
|
|
shopt -s expand_aliases
|
|
|
|
alias dmenu=:
|
|
alias 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 '%s' "$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
|