summaryrefslogtreecommitdiff
path: root/surf.sh
blob: b6cda248192d986bcf8b285d061514f932fe5353 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/bin/bash

#################################
# This is /home/miguel/bin/surf #
#################################

# TODO: bookmarks with %s to fill in selection from xclip
# TODO: add bookmark with _NET_WM_NAME

SURF=/home/miguel/git/surf/surf
TABBED=/home/miguel/git/tabbed/tabbed
XDOTOOL=/usr/bin/xdotool
DMENU=/usr/bin/dmenu
BOOKMARKS=/home/miguel/doc/BOOKMARKS
SEARCH_DUCKDUCK="https://www.duckduckgo.com?q=%s"
SEARCH_STARTPAGE="https://www.startpage.com/do/search?query=%s" 
SEARCH_GOOGLE="https://www.google.com/search?q=%s" 

BCK="#333"
FOR="#FFF"
SELBCK="#38F"
SELFOR="#FFF"

SEARCH=$SEARCH_DUCKDUCK

WM_CLASSNAME=surf-tabbed

# 4k adjutsment
export GDK_SCALE=2 
export GDK_DPI_SCALE=0.5 

# try to find a running tabbed with our classname.
# if nothing found, start a new instance and return its id.
get_tabbed_id()
{
    local ID=$($XDOTOOL search -classname ^${WM_CLASSNAME}$)

    if [ -z "$ID" ]
    then
       ID=$($TABBED -p +999 -t $SELBCK -T $SELFOR -u $BCK -U $FOR -dcn ${WM_CLASSNAME})
    fi

    echo $ID
}

# get query from dmenu/bookmarks, automatically decide between search or url
# $1 - prompt
# $2 - url (optional)
get_query() 
{   

        query_nocut=$(echo -e  "$2\n  - - - - - - - -" | cat - $BOOKMARKS | $DMENU -i -l 30 -p $1)  
        query=$(echo $query_nocut | cut -s -f 2 -d '*')

        if [ -z "$query" ]
        then
            query=$query_nocut
        fi

        if [ -z "$query" ]
        then
            exit 0
        fi

	[[ "$query" =~ \.|/ ]] || query=$(echo $SEARCH | sed "s/%s/${query}/" | tr " " "+" )

	echo "$query"
}

#open surf:
# $1 window_id 
# $2 OLD - open in existing tab/window
#    NEW - open in new tab/indow
# $3 url to open (optional, otherwise dmenu prompt shown to type url)
#
open_surf()
{
    window_id=$1
    target=$2
    open_url=$3

    if [ "$window_id" -gt 0 ]; then
	url=$(xprop -id $window_id _SURF_URI | sed 's/.*\"\(.*\)\".*/\1/')
    fi

    if [ $# -eq 2 ]; then
	if [ "$target" == "OLD"  ]; then
	    query=$(get_query "surf>" $url)
	else
	    query=$(get_query "SURF>" $url)
	fi 
    elif [ $# -eq 3 ]; then
	    query=$open_url
    else
	echo "illegal number of parameters!"
	exit -1
    fi

    # TODO!
    #query=$(echo $query | sed "s/%s/$(xclip -out)/" | tr " " "+" ) # current url too 

    if [ -z "$query" ]
    then
	exit 0
    fi

    tabbed_id=$(get_tabbed_id)

    echo Opening:  [$query] in tabbed [$tabbed_id] with window id [$window_id]

    if [ "$target" == "OLD"  ]; then
	xprop -id $window_id -f _SURF_GO 8s -set _SURF_GO "${query}"
    else
	$SURF -N -e $tabbed_id  "${query}"  > /dev/null 2>&1  &
	wmctrl -a $tabbed_id -i
    fi
}

main()
{
    if [ $# -eq 2 ]; then
	open_surf $1 $2
    elif [ $# -eq 1 ]; then
	open_surf 0 NEW $1
    elif [ $# -eq 0 ]; then
	open_surf 0 NEW
    else
	echo "illegal number of parameters!"
	exit -1
    fi
}

# call our main with all paramters
main $@