Created
May 4, 2020 02:25
-
-
Save heeh/531dfce32246246addeedb6ffac547df to your computer and use it in GitHub Desktop.
This script enables surfraw to open chrome without address bar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Surfraw -- Shell Users' Revolutionary Front Against the World wide web | |
# | |
# Copyright (c) 2003-2018 The Surfraw-Devel Team | |
# <surfraw-devel@lists.alioth.debian.org> | |
# Copyright (c) 2000-2001 Julian Assange, placed into the public domain | |
# Copyright (c) 2000 Melbourne Institute for Advanced Study, placed into the public domain | |
# | |
# see the file COPYING for further copyright details | |
# | |
surfraw_version=2.3.0 | |
surfraw_api_version=1.0 | |
w3_argv0=`basename "$0"` | |
elvidir="/usr/local/Cellar/surfraw/2.3.0/lib/surfraw" | |
# defaults | |
w3_config_hook () { | |
return 1 | |
} | |
find_global_conf () { | |
base="$1" | |
local conf OIFS | |
conf="" | |
if test -n "$XDG_CONFIG_DIRS"; then | |
OIFS="$IFS" | |
IFS=: | |
set $XDG_CONFIG_DIRS | |
IFS="$OIFS" | |
for i in "$@"; do | |
if test -r "$i/surfraw/$base"; then | |
conf="$i/surfraw/$base" | |
break | |
fi | |
done | |
elif test -r "/usr/local/etc/xdg/surfraw/$base"; then # XDG default | |
conf="/usr/local/etc/xdg/surfraw/$base" | |
elif test -r "/usr/local/etc/surfraw.$base"; then # old surfraw default | |
conf="/usr/local/etc/surfraw.$base" | |
fi | |
echo "$conf" | |
} | |
load_global_conf () { | |
local conf | |
if test -n "$SURFRAW_global_conf" && test -r "$SURFRAW_global_conf"; then | |
conf="$SURFRAW_global_conf" | |
else | |
conf=$(find_global_conf conf) | |
fi | |
if test -z "$conf" || ! test -r "$conf"; then | |
err "couldn't find global config in /usr/local/etc/xdg/surfraw/conf or \$XDG_CONFIG_DIRS" | |
fi | |
. "$conf" | |
} | |
find_local_conf () { | |
base="$1" | |
if test -n "$XDG_CONFIG_HOME" && test -r "$XDG_CONFIG_HOME/surfraw/$base"; then | |
echo "$XDG_CONFIG_HOME/surfraw/$base" | |
elif test -n "$HOME"; then | |
if test -r "$HOME/.config/surfraw/$base"; then | |
echo "$HOME/.config/surfraw/$base" | |
elif test -r "$HOME/.surfraw.$base"; then | |
echo "$HOME/.surfraw.$base" | |
fi | |
fi | |
} | |
load_local_conf () { | |
local conf | |
conf="" | |
if test -n "$SURFRAW_conf" && test -r "$SURFRAW_conf"; then | |
conf="$SURFRAW_conf" | |
else | |
conf="$(find_local_conf conf)" | |
fi | |
if test -n "$conf" && test -r "$conf"; then | |
. $conf | |
fi | |
} | |
get_local_elvi_dir () { | |
if test -n "$XDG_CONFIG_HOME";then | |
echo "$XDG_CONFIG_HOME/surfraw/elvi" | |
elif test -n "$HOME";then | |
echo "$HOME/.config/surfraw/elvi" | |
fi | |
} | |
w3_config () { | |
load_global_conf | |
w3_config_hook | |
load_local_conf | |
} | |
warn () { | |
echo "$w3_argv0 WARNING: ""$@" >&2 | |
} | |
err () { | |
echo "$w3_argv0 ERROR: ""$@" >&2 | |
exit 1 | |
} | |
yesno () { | |
eval value=\$${1} | |
case `echo "$value" | tr A-Z a-z` in | |
yes|true|on|1) return 0 ;; | |
no|false|off|0) return 1 ;; | |
*) err "\"$1\" is not set correctly. Should be (yes|on|1|no|off|0). Is \"$value\"" ;; | |
esac | |
} | |
ifyes () { | |
yesno "$@" && return 0 | |
return 1 | |
} | |
ifno () { | |
yesno "$@" && return 1 | |
return 0 | |
} | |
ok () { | |
yesno "$@" | |
} | |
null () { | |
test -z "$@" && return 0 | |
return 1 | |
} | |
def () { | |
eval value=\$${1} | |
test -z "$value" || return 0 | |
eval ${1}="$2" | |
return 0 | |
} | |
defyn () { | |
eval value=\$${1} | |
test -z "$value" && eval ${1}="$2" | |
yesno "$1" | |
} | |
setopt () { | |
eval value=\$${1} | |
eval ${1}="$2" | |
} | |
setoptyn () { | |
eval value=\$${1} | |
eval ${1}="$2" | |
yesno "$1" | |
} | |
quote_ifs () { | |
if [ -z "$1" ]; then return; fi | |
/usr/bin/perl -e '$ifs=$ENV{IFS} || " "; $arg=shift;if($arg =~/[$ifs]/) { $arg="\"$arg\""; } print "$arg\n"; ' -- "$1" | |
} | |
bookmark_file_search () { | |
search="$1" | |
file="$2" | |
if [ -r "$file" ] | |
then | |
awk -v search="$search" '$1 == search { for (nLoop = 2;nLoop <= NF; nLoop++) printf("%s ", $nLoop); print ""; }' $file | head -n 1 | |
fi | |
} | |
bookmark_lookup () { | |
search="$1" | |
file=$(find_local_conf bookmarks) | |
lookup=$(bookmark_file_search "$search" "$file") | |
if [ -z "$lookup" ] | |
then | |
file=$(find_global_conf bookmarks) | |
lookup=$(bookmark_file_search "$search" "$file") | |
fi | |
if [ -n "$lookup" ] | |
then | |
echo "$lookup" | |
fi | |
} | |
w3_find_prog () { | |
prog="$1" | |
old_ifs="${IFS:-\" \"}" | |
IFS=":" | |
path_ifs="$PATH" | |
for dir in $path_ifs; do | |
test -z "$dir" && dir=. | |
if test -e "$dir/$prog"; then | |
echo "$dir/$prog" | |
IFS="$old_ifs" | |
return 0 | |
fi | |
done | |
IFS="$old_ifs" | |
return 1 | |
} | |
w3_url_escape () { | |
echo "$@" | sed 's/%/%25/g; | |
s/+/%2B/g; | |
# s/ /+/g; | |
s/ /%20/g; | |
s/(/%28/g; | |
s/)/%29/g; | |
s/"/%22/g; | |
s/#/%23/g; | |
s/\$/%24/g; | |
s/&/%26/g; | |
s/,/%2C/g; | |
# s/\./%2E/g; | |
sx/x%2Fxg; | |
s/:/%3A/g; | |
s/;/%3B/g; | |
s/</%3C/g; | |
s/=/%3D/g; | |
s/>/%3E/g; | |
s/?/%3F/g; | |
s/@/%40/g; | |
s/\[/%5B/g; | |
s/\\/%5C/g; | |
s/\]/%5D/g; | |
s/\^/%5E/g; | |
s/{/%7B/g; | |
s/|/%7C/g; | |
s/}/%7D/g; | |
s/~/%7E/g; | |
s/`/%60/g; | |
'"s/'/%27/g" | |
} | |
w3_url_of_arg () { | |
if ok SURFRAW_quote_args; then | |
args=\""$@"\" | |
else | |
args="$@" | |
fi | |
if ok SURFRAW_escape_url_args; then | |
w3_url_escape "$args" | |
else | |
echo "$args" | |
fi | |
} | |
true () { | |
return 0 | |
} | |
false () { | |
return 1 | |
} | |
w3_global_usage () { | |
defyn SURFRAW_local_help no | |
if ifyes SURFRAW_local_help; then | |
return; | |
fi | |
# style: keep sorted | |
#-------------------------------------79 cols---------------------------------- | |
cat <<EOF | |
Global options: | |
-bookmark-search-elvis=ELVIS If args are passed to a non-searchable | |
bookmark, search with this elvis instead. | |
Default: $SURFRAW_bookmark_search_elvis | |
Environment: SURFRAW_bookmark_search_elvis | |
-browser=EXECUTABLE Set browser | |
Default: $SURFRAW_browser | |
-custom-search=PROVIDER Use PROVIDER for custom searches. | |
Supported: google, duckduckgo | |
Default: $SURFRAW_customsearch_provider | |
Environment: SURFRAW_customsearch_provider | |
-elvi List Surfraw mechanisms for conquering evil | |
-escape-url-args=yes|no Apply url escaping to arguments | |
Default: $SURFRAW_escape_url_args | |
Environment: SURFRAW_escape_url_args | |
-g | -graphical Get some windowed sin | |
Default: $SURFRAW_graphical | |
Environment: SURFRAW_graphical | |
-h | -help What you're reading now, dude | |
-lh | -local-help Just show elvi-specific help, not the global options | |
-p | -print Just print search URL, don't pass to browser | |
-o | -o=FILE Fetch URL and dump to stdout or FILE. | |
-new[=yes|no] Start in a new window | |
Default: $SURFRAW_new_window | |
Environment: SURFRAW_new_window | |
-ns[=yes|no] Start in a new screen | |
| -newscreen[=yes|no] Default: $SURFRAW_new_screen | |
Environment: SURFRAW_new_screen | |
-t | -text Back to the yellow brick road | |
-q | -quote Quote arguments with " characters | |
Default: $SURFRAW_quote_args | |
Environment: SURFRAW_quote_args | |
-version Display Surfraw version ($surfraw_version) | |
-- End of options | |
Copyright: | |
Copyright (c) 2003-2013 The Surfraw-Devel Team | |
<surfraw-devel@lists.alioth.debian.org> | |
Copyright (c) 2000-2001 Julian Assange <proff@iq.org> | |
Copyright (c) 2001 Australian Institute for Collaborative Research | |
Copyright (c) 2000 Melbourne Institute for Advanced Study | |
EOF | |
} | |
w3_usage_hook () { | |
echo "Usage: $w3_argv0 [options] [args...]" | |
w3_global_usage | |
} | |
w3_bad_option () { | |
err "bad option \"${opt}\". Try ${w3_argv0} -help for usage information" | |
} | |
w3_parse_option_hook () { | |
return 1 | |
} | |
list_elvi() { | |
local_dir="$1" | |
awk '/^#[ ]+elvis:[ ]+/{ sub("^# elvis: ",""); print $0; }' $(find "$local_dir/" ! -type d ! -type l ! -name '*~' | sort | xargs) | |
for script in $(find "$local_dir/" ! -type d -type l | sort) ; do | |
printf '%-16s--> %s\n' $(basename "$script") $(basename $(readlink "${script}")) | |
done | |
} | |
w3_parse_option () { | |
opt="$1" | |
case "$opt" in | |
-*=*) optarg=`echo "$opt" | sed 's/[-_a-zA-Z0-9]*=//'` | |
esac | |
w3_parse_option_hook "$opt" "$optarg" && return 0 | |
case "$opt" in | |
-bookmark-search-elvis=*) | |
setopt SURFRAW_bookmark_search_elvis $optarg ;; | |
-browser=*) setopt SURFRAW_browser $optarg ;; | |
-elvi) echo " GLOBAL ELVI:" | |
list_elvi "$elvidir" | |
localelvidir=$(get_local_elvi_dir) | |
if [ -d "$localelvidir" ] && [ -n "$(ls "$localelvidir")" ]; then | |
echo " LOCAL ELVI:" | |
list_elvi "$localelvidir" | |
fi | |
exit 0 ;; | |
-escape-url-args=*) setoptyn SURFRAW_escape_url_args $optarg ;; | |
-g | -graphical) setoptyn SURFRAW_graphical yes ;; | |
-help | --help |-h) do_help=1 ;; | |
-local-help | \ | |
--local-help |-lh ) do_help=1 ;setoptyn SURFRAW_local_help yes ;; | |
-q | -quote) setoptyn SURFRAW_quote_args yes ;; | |
-new) setoptyn SURFRAW_new_window yes ;; | |
-new=*) setoptyn SURFRAW_new_window $optarg ;; | |
-ns | -newscreen) setoptyn SURFRAW_new_screen yes ;; | |
-ns=* | -newscreen=*) setoptyn SURFRAW_new_screen $optarg ;; | |
-custom-search=*) setopt SURFRAW_customsearch_provider $optarg ;; | |
-o) setoptyn SURFRAW_dump yes ;; | |
-o=*) setoptyn SURFRAW_dump yes | |
setopt SURFRAW_dump_file $optarg ;; | |
-t | -text) unset DISPLAY | |
setoptyn SURFRAW_graphical no ;; | |
-version) echo $surfraw_version; exit 0 ;; | |
-p | -print) setoptyn SURFRAW_print yes ;; | |
--) setoptyn SURFRAW_end_of_args yes ;; | |
-*) w3_bad_option "$opt" ;; | |
*) return 1 ;; | |
esac | |
return 0 | |
} | |
w3_parse_args () { | |
w3_args= | |
w3_shquoted_args= | |
def SURFRAW_browser none | |
def SURFRAW_browser_args none | |
defyn SURFRAW_quote_ifs yes | |
defyn SURFRAW_end_of_args no | |
do_help=0 | |
mode=unknown | |
for arg in "$@"; do | |
isarg=1 | |
if ifno SURFRAW_end_of_args | |
then | |
w3_parse_option "$arg" | |
isarg=$? | |
fi | |
if [ $isarg -eq 1 ] | |
then | |
if [ -z "$w3_shquoted_args" ] | |
then | |
w3_shquoted_args="`quote "$arg"`" | |
else | |
w3_shquoted_args="$w3_shquoted_args `quote "$arg"`" | |
fi | |
if ok SURFRAW_quote_ifs | |
then | |
arg=`quote_ifs "$arg"` | |
fi | |
if [ -n "$w3_args" ] | |
then | |
w3_args="$w3_args $arg" | |
else | |
w3_args="$arg" | |
fi | |
fi | |
done | |
if test "$SURFRAW_browser" = none; then | |
if ok SURFRAW_graphical && test -n "$DISPLAY"; then | |
SURFRAW_browser="$SURFRAW_graphical_browser" | |
SURFRAW_browser_args="$SURFRAW_graphical_browser_args" | |
mode=graphical | |
else | |
SURFRAW_browser="$SURFRAW_text_browser" | |
SURFRAW_browser_args="$SURFRAW_text_browser_args" | |
mode=text | |
fi | |
fi | |
if ok do_help; then | |
w3_usage_hook | |
exit 0 | |
fi | |
} | |
w3_dump () { | |
if test -z "$SURFRAW_dump_file"; then | |
SURFRAW_dump_file="-" | |
fi | |
if test -x "$(which curl)"; then | |
curl -o "$SURFRAW_dump_file" "$@" | |
elif test -x "$(which wget)"; then | |
wget -q -O "$SURFRAW_dump_file" "$@" | |
elif test -x "$(which GET)"; then | |
if test "$SURFRAW_dump_file" = "-"; then | |
GET "$@" | |
else | |
GET "$@" > "$SURFRAW_dump_file" | |
fi | |
else | |
err "No URL fetcher found: install curl, wget or libwww-perl" | |
fi | |
} | |
w3_browse_url () { | |
if ok SURFRAW_new_screen && test `echo $TERM | cut -c 1-6` = "screen" && | |
test $mode = text; then | |
screen=yes | |
else | |
screen=no | |
fi | |
if ok SURFRAW_dump; then | |
w3_dump "$@" | |
elif ok SURFRAW_print; then | |
echo "$@" | |
elif ok screen; then | |
if [ "$SURFRAW_screen" = "tmux" ]; then | |
if test "$SURFRAW_browser_args" = "none"; then | |
$SURFRAW_screen $SURFRAW_screen_args "$SURFRAW_browser \"--app=$@\"" | |
else | |
$SURFRAW_screen $SURFRAW_screen_args "$SURFRAW_browser $SURFRAW_browser_args \"--app=$@\"" | |
fi | |
else | |
if test $SURFRAW_browser_args = "none"; then | |
$SURFRAW_screen $SURFRAW_screen_args "$SURFRAW_browser" "--app=$@" | |
else | |
$SURFRAW_screen $SURFRAW_screen_args "$SURFRAW_browser" $SURFRAW_browser_args "--app=$@" | |
fi | |
fi | |
else | |
if ok SURFRAW_graphical_remote && test $mode = graphical; then | |
if ok SURFRAW_new_window; then | |
newwin=", new-window" | |
else | |
newwin="" | |
fi | |
if test $SURFRAW_browser_args = "none"; then | |
"$SURFRAW_browser" -remote "openURL($*$newwin)" 2>/dev/null || "$SURFRAW_browser" "--app=$@" & | |
else | |
"$SURFRAW_browser" -remote "openURL($*$newwin)" 2>/dev/null || "$SURFRAW_browser" $SURFRAW_browser_args "--app=$@" & | |
fi | |
else | |
if test $SURFRAW_browser_args = "none"; then | |
"$SURFRAW_browser" "--app=$@" | |
else | |
"$SURFRAW_browser" $SURFRAW_browser_args "--app=$@" | |
fi | |
fi | |
fi | |
} | |
w3_custom_search_usage() { | |
echo "Custom search:" | |
echo " To choose which search engine gets used for custom searches," | |
echo " configure SURFRAW_customsearch_provider" | |
echo " or use -custom-search=PROVIDER" | |
echo " supported: google, duckduckgo" | |
echo " default: $SURFRAW_customsearch_provider" | |
} | |
w3_custom_search() { | |
case "$SURFRAW_customsearch_provider" in | |
google) w3_custom_search_google "$@" ;; | |
duckduckgo) w3_custom_search_duckduckgo "$@" ;; | |
ixquick) w3_custom_search_ixquick "$@" ;; | |
*) w3_custom_search_duckduckgo "$@" ;; | |
esac | |
} | |
w3_custom_search_google() { | |
params=$(eval w3_custom_search_mangle -s site: $*) | |
params=$(eval w3_custom_search_mangle -u inurl: $params) | |
params=$(eval w3_custom_search_inurl_quote_dots $params) | |
url="$(eval surfraw google -p $params )" | |
w3_browse_url "$url" | |
} | |
w3_custom_search_duckduckgo() { | |
params=$(eval w3_custom_search_mangle -s site: $*) | |
params=$(eval w3_custom_search_mangle -u inurl: $params) | |
url="$(eval surfraw duckduckgo -p $params )" | |
w3_browse_url "$url" | |
} | |
w3_custom_search_ixquick() { | |
params=$(eval w3_custom_search_mangle -s host: $*) | |
params=$(eval w3_custom_search_mangle -u url: $params) | |
url="$(eval surfraw ixquick -p $params )" | |
w3_browse_url "$url" | |
} | |
w3_custom_search_mangle() { | |
search="$1" | |
replace="$2" | |
shift | |
shift | |
for arg in "$@" | |
do | |
quote "$(echo "$arg" | sed "s/^${search}=\(.*\)/${replace}\1/")" | |
done | |
} | |
w3_custom_search_inurl_quote_dots() { | |
for arg in "$@" | |
do | |
if echo "$arg" | grep -q -- inurl: | |
then | |
quote "$(echo "$arg" | sed 's/\./\\./g;')" | |
else | |
quote "$arg" | |
fi | |
done | |
} | |
quote () { | |
quoted=`echo "$1"|sed "s/'/'\\\\\''/g"` | |
echo "'$quoted'" | |
} | |
surfraw_usage() { | |
cat <<EOF | |
Usage: $w3_argv0 [-help] [-elvi] elvis [elvioptions] [search terms] | |
$w3_argv0 [options] bookmark [search terms] | |
If you wish to run the elvi directly, run "surfraw-update-path" to append | |
$elvidir to your \$PATH in your shell's config files. | |
See surfraw-update-path(1) for details | |
Options: | |
-elvi List elvi | |
-help This help | |
sr is an alias for surfraw | |
EOF | |
w3_global_usage | |
} | |
# Browse URL or perform a search on URL(s) if search terms | |
# are provided (use the user's elvis of choice if URL has no | |
# %s field or multiple if multiple URLs are provided) | |
parse_bookmark() | |
{ | |
if [ -z "$w3_args" ]; then | |
case "$bookmark" in | |
*"%s"*) | |
# Keep only the domain address, the rest contains %s which should be filtered. | |
bookmark=$(echo $bookmark | awk -F '/' '{print $1 "//" $3}') | |
;; | |
*) | |
# Keep the first URL (if multiple-URL bookmark) as-is, no %s here... | |
bookmark=$(echo $bookmark | cut -f 1 -d ' ') | |
;; | |
esac | |
else | |
escaped_args=$(w3_url_of_arg $w3_args) | |
case "$bookmark" in | |
*"%s"*) | |
bookmark="$(echo $bookmark | sed "s|\%s|$escaped_args|")" | |
;; | |
*) | |
[ -z $SURFRAW_bookmark_search_elvis ] && SURFRAW_bookmark_search_elvis=google | |
bookmark=$(echo $bookmark | sed -e 's|^|site:|' \ | |
-e 's|\ |\ OR\ site:|g' \ | |
-e "s|^|$w3_args |" \ | |
-e "s|^|$SURFRAW_bookmark_search_elvis |") | |
;; | |
esac | |
fi | |
echo $bookmark | |
} | |
if [ "$w3_argv0" = "surfraw" -o "$w3_argv0" = "sr" ] | |
then | |
w3_config | |
opts="" | |
unquoted_opts="" | |
unquoted_searchterms="" | |
elvi="" | |
searchterms="" | |
do_help=0 | |
for arg in "$@" | |
do | |
# if it is an option | |
if [ "$(echo "$arg" | sed 's/^\(.\).*/\1/;' )" = "-" ] | |
then | |
# if option before elvi | |
if [ -z "$elvi" ] | |
then | |
case "$arg" in | |
-help | --help |-h) do_help=1 ;; | |
-local-help | \ | |
--local-help | \ | |
-lh | -\? ) do_help=1 ; setoptyn SURFRAW_local_help yes ;; | |
-elvi*) w3_parse_option -elvi; exit 0 ;; | |
esac | |
fi | |
if ok do_help | |
then | |
surfraw_usage | |
exit 0 | |
fi | |
if [ -z "$opts" ] | |
then | |
opts="`quote "$arg"`" | |
unquoted_opts="$arg" | |
else | |
opts="$opts `quote "$arg"`" | |
unquoted_opts="$unquoted_opts $arg" | |
fi | |
elif [ -z "$elvi" ] | |
then | |
elvi="$arg" | |
else | |
if [ -z "$searchterms" ] | |
then | |
searchterms="`quote "$arg"`" | |
unquoted_searchterms="$arg" | |
else | |
searchterms="$searchterms `quote "$arg"`" | |
unquoted_searchterms="$unquoted_searchterms $arg" | |
fi | |
fi | |
done | |
if [ -z "$elvi" ] | |
then | |
surfraw_usage | |
exit 0 | |
else | |
localelvidir=$(get_local_elvi_dir) | |
if [ -x "$localelvidir/$elvi" ] | |
then | |
sh -c "$localelvidir/$elvi $opts $searchterms" | |
elif [ -x "$elvidir/$elvi" ] | |
then | |
sh -c "$elvidir/$elvi $opts $searchterms" | |
else | |
bookmark=`bookmark_lookup $elvi` | |
if [ -n "$bookmark" ] | |
then | |
w3_parse_args $unquoted_opts $unquoted_searchterms | |
bookmark=$(parse_bookmark) | |
w3_browse_url "$bookmark" | |
exit 0 | |
else | |
echo "`basename $0`: $elvi: No elvis or bookmark with that name" | |
echo "Passing everything to browser and hoping for the best..." | |
$BROWSER "$elvi $opts $unquoted_searchterms" | |
exit 0 | |
fi | |
fi | |
fi | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment