Merge branch 'release/4.1.0'

This commit is contained in:
Chris Down 2018-02-08 00:58:19 +00:00
commit fd665a298a
2 changed files with 25 additions and 8 deletions

View file

@ -26,14 +26,14 @@ there, but it basically works like this:
## clipmenud ## clipmenud
1. `clipmenud` polls the clipboard every 0.5 seconds (or another interval as 1. `clipmenud` uses [clipnotify](https://github.com/cdown/clipnotify) to wait
configured with the `CM_SLEEP` environment variable). Unfortunately there's for new clipboard events. If clipnotify is not present on the system, we
no interface to subscribe for changes in X11, so we must poll. poll every 0.5 seconds (or another interval as configured with the
`CM_SLEEP` environment variable).
Instead of polling, you can bind your copy key binding to also issue You can also bind your copy key binding to also issue `CM_ONESHOT=1
`CM_ONESHOT=1 clipmenud`. However, there's no generic way to do this, since clipmenud`. However, there's no generic way to do this, since any keys or
any keys or mouse buttons could be bound to do this action in a number of mouse buttons could be bound to do this action in a number of ways.
ways.
2. If `clipmenud` detects changes to the clipboard contents, it writes them out 2. If `clipmenud` detects changes to the clipboard contents, it writes them out
to the cache directory. to the cache directory.

View file

@ -11,6 +11,7 @@ cache_dir=$CM_DIR/clipmenu.$major_version.$USER/
cache_file=$cache_dir/line_cache cache_file=$cache_dir/line_cache
lock_file=$cache_dir/lock lock_file=$cache_dir/lock
lock_timeout=2 lock_timeout=2
has_clipnotify=0
xsel_log=/dev/null xsel_log=/dev/null
for file in /proc/self/fd/2 /dev/stderr; do for file in /proc/self/fd/2 /dev/stderr; do
@ -86,9 +87,25 @@ mkdir -p -m0700 "$cache_dir"
declare -A last_data declare -A last_data
command -v clipnotify >/dev/null 2>&1 && has_clipnotify=1
if ! (( has_clipnotify )); then
echo "WARN: Consider installing clipnotify for better performance." >&2
echo "WARN: See https://github.com/cdown/clipnotify." >&2
fi
exec {lock_fd}> "$lock_file" exec {lock_fd}> "$lock_file"
while (( CM_ONESHOT )) || sleep "${CM_SLEEP:-0.5}"; do while true; do
if ! (( CM_ONESHOT )); then
if (( has_clipnotify )); then
clipnotify
else
# Use old polling method
sleep "${CM_SLEEP:-0.5}"
fi
fi
if ! flock -x -w "$lock_timeout" "$lock_fd"; then if ! flock -x -w "$lock_timeout" "$lock_fd"; then
if (( CM_ONESHOT )); then if (( CM_ONESHOT )); then
printf 'ERROR: %s\n' 'Timed out waiting for lock' >&2 printf 'ERROR: %s\n' 'Timed out waiting for lock' >&2