clipmenu

Simple clipboard management using dmenu
git clone https://git.sinitax.com/cdown/clipmenu
Log | Files | Refs | README | LICENSE | sfeed.txt

commit caab3f6a62af041305b2c6a68ff68e67d0fdd2e4
parent 728d242d3c196a3fb2ed99c388581eab8edf3b6e
Author: Chris Down <chris@chrisdown.name>
Date:   Mon, 19 Feb 2018 18:21:44 +0000

Add $CM_SELECTIONS to limit which selections we copy

Closes #60.

Diffstat:
Mclipmenud | 22++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/clipmenud b/clipmenud @@ -5,6 +5,7 @@ : "${CM_DEBUG=0}" : "${CM_DIR="${XDG_RUNTIME_DIR-"${TMPDIR-/tmp}"}"}" : "${CM_MAX_CLIPS=1000}" +: "${CM_SELECTIONS=clipboard primary}" major_version=4 cache_dir=$CM_DIR/clipmenu.$major_version.$USER/ @@ -13,6 +14,11 @@ lock_file=$cache_dir/lock lock_timeout=5 has_clipnotify=0 +# This comes from the environment, so we rely on word splitting. +# shellcheck disable=SC2206 +cm_selections=( $CM_SELECTIONS ) + + xsel_log=/dev/null for file in /proc/self/fd/2 /dev/stderr; do [[ -f "$file" ]] || continue @@ -64,6 +70,17 @@ debug() { fi } +element_in() { + local item element + item="$1" + for element in "${@:2}"; do + if [[ "$item" == "$element" ]]; then + return 0 + fi + done + return 1 +} + if [[ $1 == --help ]] || [[ $1 == -h ]]; then cat << 'EOF' clipmenud is the daemon that collects and caches what's on the clipboard. @@ -76,6 +93,7 @@ Environment variables: - $CM_OWN_CLIPBOARD: take ownership of the clipboard (default: 1) - $CM_MAX_CLIPS: maximum number of clips to store, 0 for inf (default: 1000) - $CM_DIR: specify the base directory to store the cache dir in (default: $XDG_RUNTIME_DIR, $TMPDIR, or /tmp) +- $CM_SELECTIONS: space separated list of the selections to manage (default: "clipboard primary") EOF exit 0 fi @@ -99,7 +117,7 @@ sleep_cmd=(sleep "${CM_SLEEP:-0.5}") while true; do # We need to take ownership synchronously before we run `clipnotify` as # otherwise we could enter an infinite loop. - if (( CM_OWN_CLIPBOARD )); then + if (( CM_OWN_CLIPBOARD )) && element_in clipboard "${cm_selections[@]}"; then # Take ownership of the clipboard, in case the original application # is unable to serve the clipboard request (due to being suspended, # etc). @@ -129,7 +147,7 @@ while true; do exit 1 fi - for selection in clipboard primary; do + for selection in "${cm_selections[@]}"; do data=$(_xsel -o --"$selection"; printf x) debug "Data before stripping: $data"