diff options
| author | Karel Kočí <karel.koci@nic.cz> | 2018-08-02 13:52:42 +0200 | 
|---|---|---|
| committer | Karel Kočí <karel.koci@nic.cz> | 2018-08-02 13:52:42 +0200 | 
| commit | fe047338d08c73e7fa513777a792d78237107e71 (patch) | |
| tree | ec6be1d2e6f5ee09c1d91e97a10c4b243ba6f708 | |
| parent | 8bd8b693baa3d24dc84638c714650c60e2c814d2 (diff) | |
| download | shellrc-fe047338d08c73e7fa513777a792d78237107e71.tar.gz shellrc-fe047338d08c73e7fa513777a792d78237107e71.tar.bz2 shellrc-fe047338d08c73e7fa513777a792d78237107e71.zip | |
Add inotify based inrun and insurf
| -rw-r--r-- | shellrc.d/common | 24 | ||||
| -rw-r--r-- | shellrc.d/desktop | 41 | 
2 files changed, 65 insertions, 0 deletions
| diff --git a/shellrc.d/common b/shellrc.d/common index 6fbbfc1..8a30f3b 100644 --- a/shellrc.d/common +++ b/shellrc.d/common @@ -103,3 +103,27 @@ ssh-clear() {  chroot-bash() {  	sudo chroot "$1" /bin/bash  } + +# Run command with inotifywait +# First argument has to be files then -- is expected and everything else +# is command to be executed when file changes. +inrun () { +	( +	set -e +	local TMPFS="$(mktemp --tmpdir inrun.XXXXXXXX)" +	trap "rm '$TMPFS'; trap '' EXIT; exit 0" EXIT INT QUIT TERM ABRT +	while [ $# -gt 0 -a "$1" != "--" ]; do +		echo "$1" >> "$TMPFS" +		shift +	done +	if [ $# -le 1 ]; then +		echo "Usage: inrun FILE.. -- COMMAND" +		return 1 +	fi +	shift +	while true; do +		inotifywait -qe close_write --fromfile "$TMPFS" || true +		"$@" || true +	done +	) +} diff --git a/shellrc.d/desktop b/shellrc.d/desktop index cc1a3b6..f155eed 100644 --- a/shellrc.d/desktop +++ b/shellrc.d/desktop @@ -3,3 +3,44 @@  alias mutt='neomutt'  alias sdcv='sdcv -c' + +# Following section is applicable for any desktop but only for graphics########## +# TODO add check for wayland +[ -z "$DISPLAY" ] && return + +# This function should not be called externaly +# It expects PID of surf instace as first argument and all other arguments should +# be command to be called before kill is sent. +__insurf_callback() { +	local SPID=$1 +	shift +	"$@" +	echo kill $SPID SIGHUP +	kill -s SIGHUP $SPID || exit 1 +} + +# Same as inrun but it opens first argument it founds in surf and then reloads +# that instance automatically. +insurf() { +	( +	set -e +	# Run surf +	surf "$1" & +	local SPID=$! +	trap "kill $SPID; trap '' EXIT; exit 0" EXIT INT QUIT TERM ABRT +	# Insert our callback +	local ISFIRST=true +	for ARG in "$@"; do +		if $ISFIRST; then +			shift $# +			ISFIRST=false +		fi +		set "$@" "$ARG" +		if [ "$ARG" = "--" ]; then +			set "$@" "__insurf_callback" "$SPID" +		fi +	done +	# Run inrun +	inrun "$@" +	) +} | 
