Pass argument directory to i3lock (#79)

New "--" argument to pass arguments directly to i3lock
String optimizations
This commit is contained in:
Mike Mob 2018-11-04 01:22:53 -04:00 committed by Pavan Jadhaw
parent 533d729a75
commit 5007d00536

View file

@ -6,7 +6,8 @@
# find your resolution so images can be resized to match your screen resolution # find your resolution so images can be resized to match your screen resolution
res=$(xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/') res=$(xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/')
locktext="Type password to unlock..." locktext='Type password to unlock...'
init_filenames() { init_filenames() {
#$1 resolution #$1 resolution
@ -15,9 +16,8 @@ init_filenames() {
res_folder="$HOME/.cache/i3lock/$1" res_folder="$HOME/.cache/i3lock/$1"
folder="$HOME/.cache/i3lock/current" folder="$HOME/.cache/i3lock/current"
echo "Got" $@ $res_folder echo "Got" $@ $res_folder
if [ ! -d $folder -o -n "$2" ] if [ ! -d $folder -o -n "$2" ]; then
then rm -f $folder
rm $folder
ln -s $res_folder $folder ln -s $res_folder $folder
fi fi
@ -44,12 +44,14 @@ init_filenames() {
init_filenames $res init_filenames $res
prelock() { prelock() {
if [ ! -z "$(pidof dunst)" ] ; then if [ ! -z "$(pidof dunst)" ]; then
pkill -u "$USER" -USR1 dunst pkill -u "$USER" -USR1 dunst
fi fi
} }
lock() { lock() {
#$1 image path #$1 image path
letterEnteredColor=d23c3dff letterEnteredColor=d23c3dff
@ -60,24 +62,26 @@ lock() {
foreground=ffffffff foreground=ffffffff
i3lock \ i3lock \
-t -i "$1" \ -t -i "$1" \
--timepos="x+110:h-70" \ --timepos='x+110:h-70' \
--datepos="x+43:h-45" \ --datepos='x+43:h-45' \
--clock --date-align 1 --datestr "$locktext" \ --clock --date-align 1 --datestr "$locktext" \
--insidecolor=$background --ringcolor=$foreground --line-uses-inside \ --insidecolor=$background --ringcolor=$foreground --line-uses-inside \
--keyhlcolor=$letterEnteredColor --bshlcolor=$letterRemovedColor --separatorcolor=$background \ --keyhlcolor=$letterEnteredColor --bshlcolor=$letterRemovedColor --separatorcolor=$background \
--insidevercolor=$passwordCorrect --insidewrongcolor=$passwordIncorrect \ --insidevercolor=$passwordCorrect --insidewrongcolor=$passwordIncorrect \
--ringvercolor=$foreground --ringwrongcolor=$foreground --indpos="x+280:h-70" \ --ringvercolor=$foreground --ringwrongcolor=$foreground --indpos='x+280:h-70' \
--radius=20 --ring-width=4 --veriftext="" --wrongtext="" \ --radius=20 --ring-width=4 --veriftext='' --wrongtext='' \
--verifcolor="$foreground" --timecolor="$foreground" --datecolor="$foreground" \ --verifcolor="$foreground" --timecolor="$foreground" --datecolor="$foreground" \
--noinputtext="" --force-clock $lockargs --noinputtext='' --force-clock $lockargs
} }
postlock() { postlock() {
if [ ! -z "$(pidof dunst)" ] ; then if [ ! -z "$(pidof dunst)" ] ; then
pkill -u "$USER" -USR2 dunst pkill -u "$USER" -USR2 dunst
fi fi
} }
rec_get_random() { rec_get_random() {
dir="$1" dir="$1"
if [ ! -d "$dir" ]; then if [ ! -d "$dir" ]; then
@ -89,207 +93,40 @@ rec_get_random() {
rec_get_random "$dir" rec_get_random "$dir"
} }
lockselect() {
case "$1" in
"")
# default lockscreen
prelock
lock "$l_resized"
postlock
;;
lockselect() {
prelock
case "$1" in
dim) dim)
# lockscreen with dimmed background # lockscreen with dimmed background
prelock
lock "$l_dim" lock "$l_dim"
postlock
;; ;;
blur) blur)
# set lockscreen with blurred background # set lockscreen with blurred background
prelock
lock "$l_blur" lock "$l_blur"
postlock
;; ;;
dimblur) dimblur)
# set lockscreen with dimmed + blurred background # set lockscreen with dimmed + blurred background
prelock
lock "$l_dimblur" lock "$l_dimblur"
postlock
;;
esac
}
usage() {
echo "Important: Update the image cache (e.g. betterlockscreen -u path/to/image.jpg)."
echo " Image cache must be updated to initially configure or update wallpaper used"
echo
echo
echo "See: https://github.com/pavanjadhaw/betterlockscreen for additional info..."
echo
echo
echo "Options:"
echo
echo " -h --help"
echo " For help (e.g. betterlockscreen -h or betterlockscreen --help)."
echo
echo
echo " -u --update"
echo " to update image cache, you should do this before using any other options"
echo " E.g: betterlockscreen -u path/to/image.png when image.png is custom background"
echo " Or you can use betterlockscreen -u path/to/imagedir and a random file will be selected."
echo
echo
echo " -l --lock"
echo " to lock screen (e.g. betterlockscreen -l)"
echo " you can also use dimmed or blurred background for lockscreen."
echo " E.g: betterlockscreen -l dim (for dimmed background)"
echo " E.g: betterlockscreen -l blur (for blurred background)"
echo " E.g: betterlockscreen -l dimblur (for dimmed + blurred background)"
echo
echo
echo " -s --suspend"
echo " to suspend system and lock screen (e.g. betterlockscreen -s)"
echo " you can also use dimmed or blurred background for lockscreen."
echo " E.g: betterlockscreen -s dim (for dimmed background)"
echo " E.g: betterlockscreen -s blur (for blurred background)"
echo " E.g: betterlockscreen -s dimblur (for dimmed + blurred background)"
echo
echo
echo " -w --wall"
echo " you can also set lockscreen background as wallpaper"
echo " to set wallpaper (e.g. betterlockscreen -w or betterlockscreen --wall)"
echo " you can also use dimmed or blurred variants."
echo " E.g: betterlockscreen -w dim (for dimmed wallpaper)"
echo " E.g: betterlockscreen -w blur (for blurred wallpaper)"
echo " E.g: betterlockscreen -w dimblur (for dimmed + blurred wallpaper)"
echo
echo
echo " -r --resolution"
echo " to be used after -u"
echo " used to set a custom resolution for the image cache."
echo " E.g: betterlockscreen -u path/to/image.png -r 1920x1080"
echo " E.g: betterlockscreen -u path/to/image.png --resolution 3840x1080"
echo
echo
echo " -b --blur"
echo " to be used after -u"
echo " used to set blur intensity. Default to 1."
echo " E.g: betterlockscreen -u path/to/image.png -b 3"
echo " E.g: betterlockscreen -u path/to/image.png --blur 0.5"
echo
echo
echo " -t --text"
echo " to set custom lockscreen text (max 31 chars)"
echo " E.g: betterlockscreen -l dim -t \"Don't touch my machine!\""
echo " E.g: betterlockscreen --text \"Hi, user!\" -s blur"
}
# check if --text argument is given
if [ $# -gt 2 ] ; then
if [ "$1" == "-t" -o "$1" == "--text" ] ; then
locktext="$2"
# delete first 2 arguments and reset numbering ( 3 -> 1, 4 -> 2, ...)
set -- "${@:3}"
elif [ \( "$3" == "-t" -o "$3" == "--text" \) -a $# -gt 3 ] ; then
locktext="$4"
fi
fi
# Options
case "$1" in
"")
if [ ! -f $l_dim ]; then
echo "Important: Update the image cache (e.g. betterlockscreen -u path/to/image.jpg)."
echo
echo " Image cache must be updated to initially configure or update wallpaper used"
echo
echo "See also: For other set of options and help use help command."
echo "E.g. betterlockscreen -h or betterlockscreen --help"
echo
echo "See: https://github.com/pavanjadhaw/betterlockscreen for addition info..."
exit 1
else
echo
echo "Seems you havent provided any argument, see below for usage info"
echo
echo "See also: For other set of options and help use help command."
echo "E.g. betterlockscreen -h or betterlockscreen --help"
echo
echo "See: https://github.com/pavanjadhaw/betterlockscreen for addition info..."
echo
exit 1
fi
;; ;;
-h | --help)
usage
;;
-l | --lock)
lockargs="-n"
lockselect "$2"
;;
-s | --suspend)
lockselect "$2"
systemctl suspend
;;
-w | --wall)
case "$2" in
"")
# set resized image as wallpaper if no argument is supplied by user
feh --bg-fill $resized
;;
dim)
# set dimmed image as wallpaper
feh --bg-fill $dim
;;
blur)
# set blurred image as wallpaper
feh --bg-fill $blur
;;
dimblur)
# set dimmed + blurred image as wallpaper
feh --bg-fill $dimblur
;;
esac
;;
-u | --update)
background="$2"
shift 2
# default blur level
blur_level=1
# parse update arguments
while [ $# -gt 0 ]; do
case "$1" in
-r | --resolution )
res="$2"
init_filenames $res force
shift 2
;;
-b | --blur )
blur_level="$2"
shift 2
;;
*) *)
shift ;; # default lockscreen
lock "$l_resized"
;;
esac esac
done postlock
}
update() {
# use
background="$1"
# default blur level; fallback to 1
[[ $blur_level ]] || blur_level=1
rectangles=" " rectangles=" "
SR=$(xrandr --query | grep ' connected' | grep -o '[0-9][0-9]*x[0-9][0-9]*[^ ]*') SR=$(xrandr --query | grep ' connected' | grep -o '[0-9][0-9]*x[0-9][0-9]*[^ ]*')
@ -315,7 +152,7 @@ case "$1" in
# get user image # get user image
cp "$user_input" "$user_image" cp "$user_input" "$user_image"
if [ ! -f $user_image ]; then if [ ! -f $user_image ]; then
echo "Please specify the path to the image you would like to use" echo 'Please specify the path to the image you would like to use'
exit 1 exit 1
fi fi
@ -323,18 +160,18 @@ case "$1" in
cp "$user_image" "$orig_wall" cp "$user_image" "$orig_wall"
rm "$user_image" rm "$user_image"
echo "Generating alternate images based on the image you specified," echo 'Generating alternate images based on the image you specified,'
echo "please wait this might take few seconds..." echo 'please wait this might take few seconds...'
# wallpapers # wallpapers
echo echo
echo "Converting provided image to match your resolution..." echo 'Converting provided image to match your resolution...'
# resize image # resize image
convert "$orig_wall" -resize "$res""^" -gravity center -extent "$res" "$resized" convert "$orig_wall" -resize "$res""^" -gravity center -extent "$res" "$resized"
echo echo
echo "Applying dim and blur effect to resized image" echo 'Applying dim and blur effect to resized image'
# dim # dim
convert "$resized" -fill black -colorize 40% "$dim" convert "$resized" -fill black -colorize 40% "$dim"
@ -359,7 +196,7 @@ case "$1" in
# lockscreen backgrounds # lockscreen backgrounds
echo echo
echo "Caching images for faster screen locking" echo 'Caching images for faster screen locking'
# resized # resized
convert "$resized" -draw "fill rgba(0, 0, 0, 0.4) $rectangles" "$l_resized" convert "$resized" -draw "fill rgba(0, 0, 0, 0.4) $rectangles" "$l_resized"
@ -372,12 +209,185 @@ case "$1" in
# blur # blur
convert "$dimblur" -draw "fill rgba(0, 0, 0, 0.4) $rectangles" "$l_dimblur" convert "$dimblur" -draw "fill rgba(0, 0, 0, 0.4) $rectangles" "$l_dimblur"
echo echo
echo "All required changes have been applied" echo 'All required changes have been applied'
}
wallpaper() {
case "$1" in
'')
# set resized image as wallpaper if no argument is supplied by user
feh --bg-fill $resized
;;
dim)
# set dimmed image as wallpaper
feh --bg-fill $dim
;;
blur)
# set blurred image as wallpaper
feh --bg-fill $blur
;;
dimblur)
# set dimmed + blurred image as wallpaper
feh --bg-fill $dimblur
;;
esac
}
empty() {
if [ -f $l_dim ]; then
echo -e "\nSeems you haven't provided any arguments. See below for usage details."
else
echo 'Important: Update the image cache (e.g. betterlockscreen -u path/to/image.jpg).'
echo
echo ' Image cache must be updated to initially configure or update the wallpaper used.'
fi
echo
echo 'For other sets of options and help, use the help command.'
echo 'e.g. betterlockscreen -h or betterlockscreen --help'
echo
echo 'See: https://github.com/pavanjadhaw/betterlockscreen for additional info...'
exit 1
}
usage() {
echo 'Important: Update the image cache (e.g. betterlockscreen -u path/to/image.jpg).'
echo ' Image cache must be updated to initially configure or update wallpaper used'
echo
echo
echo 'See: https://github.com/pavanjadhaw/betterlockscreen for additional info...'
echo
echo
echo 'Options:'
echo
echo ' -h --help'
echo ' For help (e.g. betterlockscreen -h or betterlockscreen --help).'
echo
echo
echo ' -u --update'
echo ' to update image cache, you should do this before using any other options'
echo ' E.g: betterlockscreen -u path/to/image.png when image.png is custom background'
echo ' Or you can use betterlockscreen -u path/to/imagedir and a random file will be selected.'
echo
echo
echo ' -l --lock'
echo ' to lock screen (e.g. betterlockscreen -l)'
echo ' you can also use dimmed or blurred background for lockscreen.'
echo ' E.g: betterlockscreen -l dim (for dimmed background)'
echo ' E.g: betterlockscreen -l blur (for blurred background)'
echo ' E.g: betterlockscreen -l dimblur (for dimmed + blurred background)'
echo
echo
echo ' -s --suspend'
echo ' to suspend system and lock screen (e.g. betterlockscreen -s)'
echo ' you can also use dimmed or blurred background for lockscreen.'
echo ' E.g: betterlockscreen -s dim (for dimmed background)'
echo ' E.g: betterlockscreen -s blur (for blurred background)'
echo ' E.g: betterlockscreen -s dimblur (for dimmed + blurred background)'
echo
echo
echo ' -w --wall'
echo ' you can also set lockscreen background as wallpaper'
echo ' to set wallpaper (e.g. betterlockscreen -w or betterlockscreen --wall)'
echo ' you can also use dimmed or blurred variants.'
echo ' E.g: betterlockscreen -w dim (for dimmed wallpaper)'
echo ' E.g: betterlockscreen -w blur (for blurred wallpaper)'
echo ' E.g: betterlockscreen -w dimblur (for dimmed + blurred wallpaper)'
echo
echo
echo ' -r --resolution'
echo ' to be used after -u'
echo ' used to set a custom resolution for the image cache.'
echo ' E.g: betterlockscreen -u path/to/image.png -r 1920x1080'
echo ' E.g: betterlockscreen -u path/to/image.png --resolution 3840x1080'
echo
echo
echo ' -b --blur'
echo ' to be used after -u'
echo ' used to set blur intensity. Default to 1.'
echo ' E.g: betterlockscreen -u path/to/image.png -b 3'
echo ' E.g: betterlockscreen -u path/to/image.png --blur 0.5'
echo
echo
echo ' -t --text'
echo ' to set custom lockscreen text (max 31 chars)'
echo " E.g: betterlockscreen -l dim -t \"Don't touch my machine!\""
echo ' E.g: betterlockscreen --text "Hi, user!" -s blur'
}
# Options
[[ "$1" = '' ]] && empty
for arg in "$@"; do
[[ "${arg:0:1}" = '-' ]] || continue
case "$1" in
-h | --help)
usage
break
;;
-s | --suspend)
runsuspend=true
;&
-l | --lock)
runlock=true
[[ $runsuspend ]] || lockargs="$lockargs -n"
[[ ${2:0:1} = '-' ]] && shift 1 || { lockstyle="$2"; shift 2; }
;;
-w | --wall | --wallpaper)
wallpaper "$2"
shift 2
;;
-u | --update)
runupdate=true
imagepath="$2"
shift 2
;;
-t | --text)
locktext="$2"
shift 2
;;
-r | --resolution)
res="$2"
init_filenames $res force
shift 2
;;
-b | --blur)
blur_level="$2"
shift 2
;;
--)
lockargs="$lockargs ${@:2}"
break
;; ;;
*) *)
echo "invalid argument" echo "invalid argument: $1"
break
;; ;;
esac esac
done
# Run image generation
[[ $runupdate ]] && update "$imagepath"
# Activate lockscreen
[[ $runlock ]] && lockselect "$lockstyle" && \
{ [[ $runsuspend ]] && systemctl suspend; }
exit 0 exit 0