add Benefind search
[shellsnippets/shellsnippets.git] / posix / profile-funcs
1 # Copyright (c) 2011, 2012, 2013
2 #       Thorsten Glaser <tg@mirbsd.org>
3 #
4 # Provided that these terms and disclaimer and all copyright notices
5 # are retained or reproduced in an accompanying document, permission
6 # is granted to deal in this work without restriction, including un-
7 # limited rights to use, publicly perform, distribute, sell, modify,
8 # merge, give away, or sublicence.
9 #
10 # This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
11 # the utmost extent permitted by applicable law, neither express nor
12 # implied; without malicious intent or gross negligence. In no event
13 # may a licensor, author or contributor be held liable for indirect,
14 # direct, other damage, loss, or other issues arising in any way out
15 # of dealing in the work, even if advised of the possibility of such
16 # damage or existence of a defect, except proven that it results out
17 # of said person's immediate fault when using the work as intended.
18 #-
19 # Collection of functions for ~/.profile or similar. POSIX shell, or
20 # compatible, required; workarounds for older shells' bugs included.
21 # Support of 'local' and 'echo -n' required.
22
23 # convenience
24 test -n "$BASH_VERSION" && shopt -s extglob
25
26 # clear screen
27 cls() {
28         local esc='\e'
29
30         echo -n "${esc}c"
31 }
32 # clear screen, kill ssh-agent, logout
33 bye() {
34         local M='\e'
35         M=${M}c
36
37         if test x"$1" = x"k"; then
38                 ssh-agent -k || M="$M Warning: ssh-agent returned error!
39 "
40         fi
41         echo -n "$M"
42         exit 0
43         logout
44 }
45
46 # date -R (RFC 2822)
47 dateR() {
48         date +"%a, %d %b %Y %H:%M:%S %z" "$@"
49 }
50
51 # print disc free stats in a more handy format for terminals
52 # wider than 80 columns, but deal well with LVM
53 df() {
54         command df -P "$@" | sed 's/Mounted on/Mountpoint/' | column -t
55 }
56
57 # various web-calling things
58
59 # pipe into pastebin
60 ixio() {
61         curl -n -F 'f:1=<-' http://ix.io
62 }
63 sprunge() {
64         curl -F 'sprunge=<-' http://sprunge.us
65 }
66
67 # geocaching (and related) waypoint
68 wp() {
69         ${BROWSER:-lynx} "http://www.mirbsd.org/wp.cgi?$1"
70 }
71
72 # Benefind search
73 bf() {
74         local _q _IFS _b=${BROWSER:-lynx}
75
76         case $_b in
77         (lynx) _b="$_b -accept_all_cookies -cmd_script=/dev/fd/5" ;;
78         (*/lynx) test -x "$_b" && _b="$_b -accept_all_cookies -cmd_script=/dev/fd/5" ;;
79         esac
80
81         _IFS=$IFS
82         IFS=+
83         _q="$*"
84         IFS=$_IFS
85         $_b "https://www.benefind.de/web.php?org=1647&q=$_q" 5<<-\EOF
86                 set NO_PAUSE=TRUE
87                 set SET_COOKIES=TRUE
88                 set FORCE_COOKIE_PROMPT=yes
89                 key /
90                 key y
91                 key h
92                 key s
93                 key /
94                 key s
95                 key e
96                 key a
97                 key r
98                 key c
99                 key h
100                 key ^J
101                 key E
102                 key &
103                 key e
104                 key i
105                 key =
106                 key U
107                 key T
108                 key F
109                 key -
110                 key 8
111                 key &
112                 key n
113                 key o
114                 key j
115                 key s
116                 key =
117                 key 1
118                 key ^J
119                 set NO_PAUSE=FALSE
120         EOF
121 }
122
123 # DuckDuckGo search
124 ddg() {
125         local _q _IFS
126
127         _IFS=$IFS
128         IFS=+
129         _q="$*"
130         IFS=$_IFS
131         ${BROWSER:-lynx} "https://duckduckgo.com/?kp=-1&kl=wt-wt&kb=t&kh=1&kj=g2&km=l&ka=monospace&ku=1&ko=s&k1=-1&kv=1&t=debian&q=$_q"
132 }
133
134 # GooGle Search
135 ggs() {
136         local _q _IFS
137
138         _IFS=$IFS
139         IFS=+
140         _q="$*"
141         IFS=$_IFS
142         ${BROWSER:-lynx} "http://www.google.com/search?hl=la&pws=0&num=100&safe=off&q=$_q"
143 }
144 # Google GRoups
145 ggr() {
146         local _q _IFS
147
148         _IFS=$IFS
149         IFS=+
150         _q="$*"
151         IFS=$_IFS
152         ${BROWSER:-lynx} "http://groups.google.com/groups?hl=la&pws=0&num=100&safe=off&as_umsgid=$_q"
153 }
154
155 # dict.leo.org German English
156 ge() {
157         local _q _IFS
158
159         _IFS=$IFS
160         IFS=+
161         _q="$*"
162         IFS=$_IFS
163         ${BROWSER:-lynx} "http://dict.leo.org/?search=$_q"
164 }
165 # dict.leo.org German FRench
166 gfr() {
167         local _q _IFS
168
169         _IFS=$IFS
170         IFS=+
171         _q="$*"
172         IFS=$_IFS
173         ${BROWSER:-lynx} "http://dict.leo.org/frde?search=$_q"
174 }
175 # dict.leo.org German ESpa~nol
176 ges() {
177         local _q _IFS
178
179         _IFS=$IFS
180         IFS=+
181         _q="$*"
182         IFS=$_IFS
183         ${BROWSER:-lynx} "http://dict.leo.org/esde?search=$_q"
184 }
185 # explica palabras en espa~nol
186 espanol() {
187         local _q _IFS
188
189         _IFS=$IFS
190         IFS=+
191         _q="$*"
192         IFS=$_IFS
193         lynx -dump --nolist "http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA=$_q"
194 }
195
196 # call xloadimage by URI
197 if /usr/bin/ftp -h 2>&1 | fgrep http:// >/dev/null 2>&1; then
198         loadfile() {
199                 /usr/bin/ftp -Vo - "$@"
200         }
201 elif command -v curl >/dev/null 2>&1; then
202         loadfile() {
203                 curl "$@"
204         }
205 elif command -v wget >/dev/null 2>&1; then
206         loadfile() {
207                 wget -qO - "$@"
208         }
209 else
210         loadfile() {
211                 fetch -o - "$@"
212         }
213 fi
214 loadimage() {
215         local f
216
217         for f in "$@"; do
218                 if test -s "$f"; then
219                         xloadimage "$f"
220                 else
221                         loadfile "$f" | xloadimage stdin
222                 fi
223         done
224 }
225
226 # man with gnroff on MirPorts
227 gman() {
228         man -C /usr/mpkg/share/groff/man_utf8.conf "$@"
229 }
230
231 # hexdump -C in look-better
232 command -v hd >/dev/null 2>&1 || hd() {
233         hexdump -e '"%08.8_ax  " 8/1 "%02X " " - " 8/1 "%02X "' \
234             -e '"  |" "%_p"' -e '"|\n"' "$@"
235 }
236
237 # rot13 for those who do not have it
238 command -v rot13 >/dev/null 2>&1 || rot13() {
239         tr \
240             abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
241             nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM
242 }
243
244 # csh like setenv
245 setenv() {
246         eval $1=\$2
247         eval export $1
248 }
249
250 # benchmark machine with python
251 pystones() {
252         # default for $1 is 50000
253         ${2:-python} -c "from test import pystone; pystone.main($1)"
254 }
255
256 # Using Git to create coloured diffs of arbitrary files
257 alias cdiff='git diff --color=always --no-index --no-prefix'