#!/bin/sh # A screen-grab will be saved in $SCREEN_GRAB_DEST_DIR if set, otherwise # in $HOME/screen_grab/ if it exsts; otherwise $HOME. default_basename=cutbuffer_grab default_extension=txt date_format=+%F_%H%M%S SCREEN_GRAB_DEST_DIR=$HOME/$default_basename chdir_to_destination() { [ -d "$SCREEN_GRAB_DEST_DIR" ] || mkdir -p "$SCREEN_GRAB_DEST_DIR" cd "$SCREEN_GRAB_DEST_DIR" } choose_destination() { local stamp basename extension now case $# in 1) ;; 0) now=$(date "$date_format") DESTINATION=$default_basename.$now.$default_extension return ;; *) return 1 ;; esac case "$1" in *.*) basename=${1%.*} extension=${1##*.} ;; *) basename=$1 extension=$default_extension ;; esac DESTINATION=$basename.$extension } get_out_the_way() { local stamp basename extension destination [ -e "$1" ] || return 0 stamp=$(date -r "$1" "$date_format") || return case "$1" in *.*) basename=${1%.*} extension=${1##*.} destination=$basename.$stamp.$extension ;; *) destination=$1.$stamp ;; esac [ ! -e "$destination" ] || return mv "$1" "$destination" } extract() { sort -z -k1,1 -r | head -z -n 1 | xargs -0 printf '%s\n' | cut -d' ' -f2 } set -e chdir_to_destination f=$(find . -maxdepth 1 -type f -printf "%C@ %h/%f\0" | extract) set -x exec 2> /tmp/cbp.log xcb -s 0 < "$f" xsel --input < "$f" mkdir -p .popped mv "$f" -t .popped