Explicitly use gawk and update dependency list

Fixes #49.
performance
Fox Kiester 6 years ago
parent 7eaa3b517d
commit 183d983e4d
No known key found for this signature in database
GPG Key ID: 316E205D6017DBFF

@ -21,7 +21,12 @@ This is a basic demo where tdrop is used to turn the current window (emacs) into
- Has hooks for executing user commands - Has hooks for executing user commands
* Requirements * Requirements
- bash and basic utilities (awk, sed, etc.) - bash
- basic utilities (probably already installed on linux)
- GNU coreutils (for install, tee, cat, mkdir, head, etc.)
- gawk
- GNU grep
- procps-ng (for pgrep)
- xprop - xprop
- xwininfo - xwininfo
- xdotool - xdotool

76
tdrop

@ -204,7 +204,7 @@ focused_window_exists=true
# * Multiple Monitor Automatic Re-Sizing # * Multiple Monitor Automatic Re-Sizing
percent_of_total() { # percent total percent_of_total() { # percent total
awk "BEGIN {printf(\"%.0f\", 0.01*${1%\%}*$2)}" gawk "BEGIN {printf(\"%.0f\", 0.01*${1%\%}*$2)}"
} }
# acts on globals # acts on globals
@ -252,21 +252,21 @@ update_geometry_settings_for_monitor() {
wm=$(get_window_manager) wm=$(get_window_manager)
if [[ $wm == bspwm ]]; then if [[ $wm == bspwm ]]; then
current_monitor=$(bspc query -T -m | grep -Po '^{"name":.*?",' | \ current_monitor=$(bspc query -T -m | grep -Po '^{"name":.*?",' | \
awk -F ":" '{gsub("[\",]", ""); print $2}') gawk -F ":" '{gsub("[\",]", ""); print $2}')
elif [[ $wm == i3 ]]; then elif [[ $wm == i3 ]]; then
# I'd rather not make jq a dependency # I'd rather not make jq a dependency
current_monitor=$(i3-msg -t get_workspaces | sed 's/{"num"/\n/g' | \ current_monitor=$(i3-msg -t get_workspaces | sed 's/{"num"/\n/g' | \
awk -F ',' '/focused":true/ {sub(".*output",""); gsub("[:\"]",""); print $1}') gawk -F ',' '/focused":true/ {sub(".*output",""); gsub("[:\"]",""); print $1}')
fi fi
local monitor_geo x_begin y_begin x_width y_height local monitor_geo x_begin y_begin x_width y_height
if [[ -n $current_monitor ]]; then if [[ -n $current_monitor ]]; then
monitor_geo=$(xrandr --query | \ monitor_geo=$(xrandr --query | \
awk "/^$current_monitor/ {gsub(\"primary \",\"\"); print \$3}") gawk "/^$current_monitor/ {gsub(\"primary \",\"\"); print \$3}")
x_begin=$(echo "$monitor_geo" | awk -F '+' '{print $2}') x_begin=$(echo "$monitor_geo" | gawk -F '+' '{print $2}')
y_begin=$(echo "$monitor_geo" | awk -F '+' '{print $3}') y_begin=$(echo "$monitor_geo" | gawk -F '+' '{print $3}')
x_width=$(echo "$monitor_geo" | awk -F 'x' '{print $1}') x_width=$(echo "$monitor_geo" | gawk -F 'x' '{print $1}')
y_height=$(echo "$monitor_geo" | awk -F 'x|+' '{print $2}') y_height=$(echo "$monitor_geo" | gawk -F 'x|+' '{print $2}')
else else
local wid wininfo window_x window_y monitors_info x_end y_end local wid wininfo window_x window_y monitors_info x_end y_end
# determine current monitor in generic way # determine current monitor in generic way
@ -276,21 +276,21 @@ update_geometry_settings_for_monitor() {
return 1 return 1
fi fi
wininfo=$(xwininfo -id "$wid") wininfo=$(xwininfo -id "$wid")
window_x=$(echo "$wininfo" | awk '/Absolute.*X/ {print $4}') window_x=$(echo "$wininfo" | gawk '/Absolute.*X/ {print $4}')
window_y=$(echo "$wininfo" | awk '/Absolute.*Y/ {print $4}') window_y=$(echo "$wininfo" | gawk '/Absolute.*Y/ {print $4}')
monitors_info=$(xrandr --query | awk '/ connected/ {gsub("primary ",""); print}') monitors_info=$(xrandr --query | gawk '/ connected/ {gsub("primary ",""); print}')
while read -r monitor; do while read -r monitor; do
monitor_geo=$(echo "$monitor" | awk '{print $3}') monitor_geo=$(echo "$monitor" | gawk '{print $3}')
if [[ $monitor_geo =~ ^[0-9]+x[0-9]+\+[0-9]+\+[0-9]+$ ]]; then if [[ $monitor_geo =~ ^[0-9]+x[0-9]+\+[0-9]+\+[0-9]+$ ]]; then
x_begin=$(echo "$monitor_geo" | awk -F '+' '{print $2}') x_begin=$(echo "$monitor_geo" | gawk -F '+' '{print $2}')
y_begin=$(echo "$monitor_geo" | awk -F '+' '{print $3}') y_begin=$(echo "$monitor_geo" | gawk -F '+' '{print $3}')
x_width=$(echo "$monitor_geo" | awk -F 'x' '{print $1}') x_width=$(echo "$monitor_geo" | gawk -F 'x' '{print $1}')
y_height=$(echo "$monitor_geo" | awk -F 'x|+' '{print $2}') y_height=$(echo "$monitor_geo" | gawk -F 'x|+' '{print $2}')
x_end=$((x_begin+x_width)) x_end=$((x_begin+x_width))
y_end=$((y_begin+y_height)) y_end=$((y_begin+y_height))
if [[ $window_x -ge $x_begin ]] && [[ $window_x -lt $x_end ]] && \ if [[ $window_x -ge $x_begin ]] && [[ $window_x -lt $x_end ]] && \
[[ $window_y -ge $y_begin ]] && [[ $window_y -lt $y_end ]]; then [[ $window_y -ge $y_begin ]] && [[ $window_y -lt $y_end ]]; then
current_monitor=$(echo "$monitor" | awk '{print $1}') current_monitor=$(echo "$monitor" | gawk '{print $1}')
break break
fi fi
fi fi
@ -315,8 +315,8 @@ map_and_reset_geometry() {
get_window_manager() { get_window_manager() {
# xfwm4 and fvwm at least will give two names (hence piping into head) # xfwm4 and fvwm at least will give two names (hence piping into head)
xprop -notype -id "$(xprop -root -notype | \ xprop -notype -id "$(xprop -root -notype | \
awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}')" \ gawk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}')" \
-f _NET_WM_NAME 8u | awk -F "\"" '/WM_NAME/ {print $2}' | head -n 1 -f _NET_WM_NAME 8u | gawk -F "\"" '/WM_NAME/ {print $2}' | head -n 1
} }
set_wm() { set_wm() {
@ -376,8 +376,8 @@ is_floating() {
elif $auto_detect_wm; then elif $auto_detect_wm; then
if [[ $wm == i3 ]]; then if [[ $wm == i3 ]]; then
# TODO make sure this returns 1 on failure # TODO make sure this returns 1 on failure
i3-msg -t get_tree | awk 'gsub(/{"id"/, "\n{\"id\"")' | \ i3-msg -t get_tree | gawk 'gsub(/{"id"/, "\n{\"id\"")' | \
awk '/focused":true.*floating":"user_on/ {print $1}' gawk '/focused":true.*floating":"user_on/ {print $1}'
elif [[ $wm == bspwm ]]; then elif [[ $wm == bspwm ]]; then
bspc query -T -n | grep '"state":"floating"' bspc query -T -n | grep '"state":"floating"'
else else
@ -487,11 +487,11 @@ unmap() {
# * General Helper Functions # * General Helper Functions
get_class_name() { get_class_name() {
xprop -id "$1" WM_CLASS 2> /dev/null | awk '{gsub(/"/, ""); print $4}' xprop -id "$1" WM_CLASS 2> /dev/null | gawk '{gsub(/"/, ""); print $4}'
} }
get_visibility() { get_visibility() {
xwininfo -id "$1" 2> /dev/null | awk '/Map State/ {print $3}' xwininfo -id "$1" 2> /dev/null | gawk '/Map State/ {print $3}'
} }
maybe_cancel_auto_show() { maybe_cancel_auto_show() {
@ -521,11 +521,11 @@ create_win_return_wid() {
elif [[ $program == chromium ]]; then elif [[ $program == chromium ]]; then
# this may work fine # this may work fine
# pid=$(pgrep -xo chromium) # pid=$(pgrep -xo chromium)
pid=$(pgrep -xa chromium | awk '!/--type/ {print $1}') pid=$(pgrep -xa chromium | gawk '!/--type/ {print $1}')
elif [[ $program == chromium-browser ]]; then elif [[ $program == chromium-browser ]]; then
pid=$(pgrep -xa chromium-browse | awk '!/--type/ {print $1}') pid=$(pgrep -xa chromium-browse | gawk '!/--type/ {print $1}')
elif [[ $program =~ ^google-chrome ]]; then elif [[ $program =~ ^google-chrome ]]; then
pid=$(pgrep -xa chrome | awk '!/--type/ {print $1}') pid=$(pgrep -xa chrome | gawk '!/--type/ {print $1}')
elif [[ $program =~ ^emacsclient ]]; then elif [[ $program =~ ^emacsclient ]]; then
blacklist=$(xdotool search --classname emacs) blacklist=$(xdotool search --classname emacs)
fi fi
@ -571,7 +571,7 @@ create_win_return_wid() {
# workaround for urxvt tabbed plugin using -embed # workaround for urxvt tabbed plugin using -embed
if [[ $program =~ $urxvt ]] && [[ -n $program_wid ]]; then if [[ $program =~ $urxvt ]] && [[ -n $program_wid ]]; then
maybe_program_wid=$(xprop -id "$program_wid" | \ maybe_program_wid=$(xprop -id "$program_wid" | \
awk -F '"' '/-embed/ {print $6}') gawk -F '"' '/-embed/ {print $6}')
if [[ -n $maybe_program_wid ]]; then if [[ -n $maybe_program_wid ]]; then
program_wid=$maybe_program_wid program_wid=$maybe_program_wid
fi fi
@ -626,9 +626,9 @@ wid_toggle() {
# deal with percentages/negatives when no -m # deal with percentages/negatives when no -m
if ! $monitor_aware; then if ! $monitor_aware; then
local total_geo total_width total_height local total_geo total_width total_height
total_geo=$(xwininfo -root | awk '/geometry/ {print $2}') total_geo=$(xwininfo -root | gawk '/geometry/ {print $2}')
total_width=$(echo "$total_geo" | awk -F 'x' '{print $1}') total_width=$(echo "$total_geo" | gawk -F 'x' '{print $1}')
total_height=$(echo "$total_geo" | awk -F 'x|+' '{print $2}') total_height=$(echo "$total_geo" | gawk -F 'x|+' '{print $2}')
convert_geometry_to_pixels "$total_width" "$total_height" convert_geometry_to_pixels "$total_width" "$total_height"
fi fi
# get saved window id if already created # get saved window id if already created
@ -720,10 +720,10 @@ get_geometry() {
if is_floating "$1" &> /dev/null; then if is_floating "$1" &> /dev/null; then
local wininfo x y rel_x rel_y width height local wininfo x y rel_x rel_y width height
wininfo=$(xwininfo -id "$1") wininfo=$(xwininfo -id "$1")
x=$(echo "$wininfo" | awk '/Absolute.*X/ {print $4}') x=$(echo "$wininfo" | gawk '/Absolute.*X/ {print $4}')
y=$(echo "$wininfo" | awk '/Absolute.*Y/ {print $4}') y=$(echo "$wininfo" | gawk '/Absolute.*Y/ {print $4}')
rel_x=$(echo "$wininfo" | awk '/Relative.*X/ {print $4}') rel_x=$(echo "$wininfo" | gawk '/Relative.*X/ {print $4}')
rel_y=$(echo "$wininfo" | awk '/Relative.*Y/ {print $4}') rel_y=$(echo "$wininfo" | gawk '/Relative.*Y/ {print $4}')
if [[ $subtract_when_same != false ]]; then if [[ $subtract_when_same != false ]]; then
# behaviour works for most WMs (at least floating ones) # behaviour works for most WMs (at least floating ones)
x=$((x-rel_x)) x=$((x-rel_x))
@ -739,9 +739,9 @@ get_geometry() {
fi fi
fi fi
width=$(xwininfo -id "$(xdotool getactivewindow)" | \ width=$(xwininfo -id "$(xdotool getactivewindow)" | \
awk '/Width/ {print $2}') gawk '/Width/ {print $2}')
height=$(xwininfo -id "$(xdotool getactivewindow)" | \ height=$(xwininfo -id "$(xdotool getactivewindow)" | \
awk '/Height/ {print $2}') gawk '/Height/ {print $2}')
echo -n -e "xoff=$x\nyoff=$y\nwidth=$width\nheight=$height" echo -n -e "xoff=$x\nyoff=$y\nwidth=$width\nheight=$height"
else else
# window is not floating; don't bother saving geometry # window is not floating; don't bother saving geometry
@ -754,8 +754,8 @@ restore_geometry() {
local x_fix y_fix local x_fix y_fix
eval "$(< "$MUTDROP_PATH"/auto_hidden/geometry)" eval "$(< "$MUTDROP_PATH"/auto_hidden/geometry)"
if [[ -n $dec_fix ]]; then if [[ -n $dec_fix ]]; then
x_fix=$(echo "$dec_fix" | awk -F "x" '{print $1}') x_fix=$(echo "$dec_fix" | gawk -F "x" '{print $1}')
y_fix=$(echo "$dec_fix" | awk -F "x" '{print $2}') y_fix=$(echo "$dec_fix" | gawk -F "x" '{print $2}')
xoff=$((xoff-x_fix)) xoff=$((xoff-x_fix))
yoff=$((yoff-y_fix)) yoff=$((yoff-y_fix))
fi fi

Loading…
Cancel
Save