|
|
- #!/usr/bin/env bash
-
- set -x
- set -e
- set -o pipefail
-
- dir=$(./clipctl cache-dir)
- cache_file=$dir/line_cache
-
- if [[ $0 == /* ]]; then
- location=${0%/*}
- else
- location=$PWD/${0#./}
- location=${location%/*}
- fi
-
- cat - "$location/../clipmenu" > /tmp/clipmenu << 'EOF'
- #!/usr/bin/env bash
-
- shopt -s expand_aliases
-
- shim() {
- printf '%s args:' "$1" >&2
- printf ' %q' "${@:2}" >&2
- printf '\n' >&2
-
- i=0
-
- while IFS= read -r line; do
- let i++
- printf '%s line %d stdin: %s\n' "$1" "$i" "$line" >&2
- done
-
- if [[ -v SHIM_STDOUT ]]; then
- printf '%s\n' "$SHIM_STDOUT"
- fi
- }
-
- # Cannot be an alias due to expansion order with $CM_LAUNCHER
- dmenu() {
- SHIM_STDOUT="Selected text. (2 lines)" shim dmenu "$@"
- }
-
- rofi() {
- SHIM_STDOUT="Selected text. (2 lines)" shim rofi "$@"
- }
-
- alias xsel='shim xsel'
- alias xclip='shim xclip'
- alias clipctl='./clipctl'
- EOF
-
- chmod a+x /tmp/clipmenu
-
- rm -rf "$dir"
- mkdir -p "$dir"
-
- cat > "$cache_file" << 'EOF'
- 1234 Selected text. (2 lines)
- 1235 Selected text 2. (2 lines)
- EOF
-
- cat > "$dir/$(cksum <<< 'Selected text. (2 lines)')" << 'EOF'
- Selected text.
- Yes, it's selected text.
- EOF
-
- ### TESTS ###
-
- temp=$(mktemp)
-
- trap 'cat "$temp"' EXIT
-
- /tmp/clipmenu --foo bar > "$temp" 2>&1
-
- # Arguments are transparently passed to dmenu
- grep -Fxq 'dmenu args: -l 8 --foo bar' "$temp"
-
- # Output from cache file should get to dmenu, reversed
- grep -Fxq 'dmenu line 1 stdin: Selected text 2. (2 lines)' "$temp"
- grep -Fxq 'dmenu line 2 stdin: Selected text. (2 lines)' "$temp"
-
- # xsel should copy both to clipboard *and* primary
- grep -Fxq 'xsel args: --logfile /dev/null -i --clipboard' "$temp"
- grep -Fxq 'xsel args: --logfile /dev/null -i --primary' "$temp"
-
- grep -Fxq 'xsel line 1 stdin: Selected text.' "$temp"
- grep -Fxq "xsel line 2 stdin: Yes, it's selected text." "$temp"
-
- CM_LAUNCHER=rofi /tmp/clipmenu --foo bar > "$temp" 2>&1
-
- # We have a special case to add -dmenu for rofi
- grep -Fxq 'rofi args: -l 8 -dmenu --foo bar' "$temp"
|