make some things better #7
							
								
								
									
										129
									
								
								xdg-sanity.sh
									
									
									
									
									
								
							
							
						
						
									
										129
									
								
								xdg-sanity.sh
									
									
									
									
									
								
							@ -1,66 +1,85 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INPUT=$(echo $1)
 | 
					argv0="$0"
 | 
				
			||||||
echo "Loading configuration..."
 | 
					 | 
				
			||||||
CONFIG=$(cat /etc/xdg-sanity/xdg-sanity.conf)
 | 
					 | 
				
			||||||
BROWSER=$(echo $CONFIG | sed -ne 's/^browser *= *//p')
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "$BROWSER" = "" ]
 | 
					# cats out the configuration or {'\n', EOF} if it can't be found
 | 
				
			||||||
then
 | 
					stream_config(){
 | 
				
			||||||
echo "Please place the path to your default browser's executable in /etc/xdg-sanity/xdg-sanity.conf"
 | 
						for file in \
 | 
				
			||||||
exit
 | 
								"$HOME"/.config/xdg-sanity.conf \
 | 
				
			||||||
else
 | 
								"$HOME"/.xdg-sanity.conf \
 | 
				
			||||||
echo "Found default browser $BROWSER"
 | 
								/etc/xdg-sanity/xdg-sanity.conf \
 | 
				
			||||||
 | 
								/dev/null
 | 
				
			||||||
 | 
						do
 | 
				
			||||||
 | 
							cat "$file" 2>/dev/null \
 | 
				
			||||||
 | 
								&& break \
 | 
				
			||||||
 | 
								|| true
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# check if usage is valid
 | 
				
			||||||
 | 
					if ! test -n "$1"; then
 | 
				
			||||||
 | 
						printf "Usage: %s [resource...]\n" "$argv0" 1>&2
 | 
				
			||||||
 | 
						exit 64 # sysexits(3) EX_USAGE
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Loading extensions..."
 | 
					# check if we have curl(1)
 | 
				
			||||||
for EXT in /etc/xdg-sanity/extensions/*.sh
 | 
					if ! command -v curl >/dev/null 2>&1; then
 | 
				
			||||||
do
 | 
						printf "%s: Missing dependency: curl(1)\n" "$argv0" 1>&2
 | 
				
			||||||
 | 
						exit 71 # sysexits(3) EX_OSERR
 | 
				
			||||||
if [ "$EXT" = "/etc/xdg-sanity/extensions/*.sh" ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
echo "No extensions to load"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for EXT in /etc/xdg-sanity/extensions/*.sh
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
TYPE=$(cat $EXT | sed -ne 's/^# EXT-TYPE=//p' | tr -d '\n')
 | 
					 | 
				
			||||||
echo "Found $TYPE extension $EXT"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$TYPE" = "replace" ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
echo "Modifying $INPUT..."
 | 
					 | 
				
			||||||
INPUT=$($EXT "$INPUT")
 | 
					 | 
				
			||||||
echo "Got $INPUT"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
if [ "$TYPE" = "mime" ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
echo "Modifying MIME type..."
 | 
					 | 
				
			||||||
MIME=$($EXT "$INPUT")
 | 
					 | 
				
			||||||
echo "Got $MIME"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
done
 | 
					# check if we have handlr(1), but we might not need it
 | 
				
			||||||
 | 
					if ! command -v handlr >/dev/null 2>&1; then
 | 
				
			||||||
 | 
						alias handlr=false
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test -n "$BROWSER" || BROWSER="$(stream_config | sed -ne 's/^browser *= *//p')"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# check if we have a $BROWSER
 | 
				
			||||||
 | 
					if ! test -n "$BROWSER"; then
 | 
				
			||||||
 | 
						printf "\
 | 
				
			||||||
 | 
					%s: \$BROWSER not filled.
 | 
				
			||||||
 | 
						Please place the path to your default browser's executable in
 | 
				
			||||||
 | 
						/etc/xdg-sanity/xdg-sanity.conf
 | 
				
			||||||
 | 
					" "$argv0" 1>&2
 | 
				
			||||||
 | 
						exit 71 # sysexits(3) EX_OSERR
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while test -n "$1"; do
 | 
				
			||||||
 | 
						argv1="$1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# use curl(1) to write out the request header's content_type,
 | 
				
			||||||
 | 
						# strip everything after the first semicolon,
 | 
				
			||||||
 | 
						# chop off any weird whitespace remnants
 | 
				
			||||||
 | 
						MIME="$(curl -Ls -o /dev/null -w '%{content_type}' $1 | sed 's/\;.*//' | xargs echo)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# RESPONSE_CODE=$(curl -fLIs "$INPUT" | sed -ne 's/ [[:space:]]*$//p' | sed -ne 's|^HTTP/.\+ ||p')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for extension in /etc/xdg-sanity/extensions/*.sh; do
 | 
				
			||||||
 | 
							! [ "$extension" = "/etc/xdg-sanity/extensions/*.sh" ] || break
 | 
				
			||||||
 | 
							# switch(extension_type)
 | 
				
			||||||
 | 
							case "$(sed -ne 's/^# EXT-TYPE=//p' <"$extension" | xargs echo)" in
 | 
				
			||||||
 | 
							replace)
 | 
				
			||||||
 | 
								argv1="$("$extension" "$argv1")"
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
							mime)
 | 
				
			||||||
 | 
								argv1="$("$extension" "$argv1")"
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
							esac
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# these commands may fail; this is intentional
 | 
				
			||||||
 | 
						if [ "$MIME" = "text/html" ]; then
 | 
				
			||||||
 | 
							"$BROWSER" "$argv1"
 | 
				
			||||||
 | 
						elif ! handlr launch "$MIME" -- "$argv1"; then
 | 
				
			||||||
 | 
							printf "%s: %s: handlr(1) failed: " "$argv0" "$argv1" 1>&2
 | 
				
			||||||
 | 
							[ "$(command -v handlr)" = "false" ] \
 | 
				
			||||||
 | 
								&& printf "'handlr' program not found\n" 1>&2 \
 | 
				
			||||||
 | 
								|| printf "non-zero exit status\n" 1>&2
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						shift
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "$MIME" = "" ] || [ "$MIME" = "$1" ] || [ "$MIME" = "$INPUT" ]
 | 
					exit 0
 | 
				
			||||||
then
 | 
					 | 
				
			||||||
echo "Determining MIME type of $INPUT:"
 | 
					 | 
				
			||||||
# Determines HTTP code, might use for something else?
 | 
					 | 
				
			||||||
# CODE=$(curl -fLIs "$INPUT" | sed -ne 's/ [[:space:]]*$//p' | sed -ne 's|^HTTP/.\+ ||p')
 | 
					 | 
				
			||||||
MIME=$(curl -fLIs "$INPUT" | sed -ne 's/^[cC]ontent-[tT]ype: //p' | sed -e 's/;.\+//p' | tail -n1 | tr -d '\r')
 | 
					 | 
				
			||||||
echo $MIME
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$MIME" = "text/html" ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
$BROWSER $INPUT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
handlr launch "$MIME" -- "$INPUT"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user