explicitly encode spaces as ‘+’ for $BROWSER
[shellsnippets/shellsnippets.git] / posix / profile-funcs
1 # Copyright (c) 2011, 2012
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 # speedup
27 test -n "$KSH_VERSION" && alias which='whence -p'
28
29 # clear screen
30 cls() {
31         local esc='\e'
32
33         echo -n "${esc}c"
34 }
35 # clear screen, kill ssh-agent, logout
36 bye() {
37         local M='\e'
38         M=${M}c
39
40         if test x"$1" = x"k"; then
41                 ssh-agent -k || M="$M Warning: ssh-agent returned error!
42 "
43         fi
44         echo -n "$M"
45         exit 0
46         logout
47 }
48
49 # date -R (RFC 2822)
50 dateR() {
51         date +"%a, %d %b %Y %H:%M:%S %z" "$@"
52 }
53
54 # print disc free stats in a more handy format for terminals
55 # wider than 80 columns, but deal well with LVM
56 df() {
57         command df -P "$@" | sed 's/Mounted on/Mountpoint/' | column -t
58 }
59
60 # various web-calling things
61
62 # pipe into pastebin
63 sprunge() {
64         curl -F 'sprunge=<-' http://sprunge.us
65 }
66
67 # DuckDuckGo search
68 ddg() {
69         local _q _IFS
70
71         _IFS=$IFS
72         IFS=+
73         _q="$*"
74         IFS=$_IFS
75         ${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"
76 }
77
78 # GooGle Search
79 ggs() {
80         local _q _IFS
81
82         _IFS=$IFS
83         IFS=+
84         _q="$*"
85         IFS=$_IFS
86         ${BROWSER:-lynx} "http://www.google.com/search?hl=la&pws=0&num=100&safe=off&q=$_q"
87 }
88 # Google GRoups
89 ggr() {
90         local _q _IFS
91
92         _IFS=$IFS
93         IFS=+
94         _q="$*"
95         IFS=$_IFS
96         ${BROWSER:-lynx} "http://groups.google.com/groups?hl=la&pws=0&num=100&safe=off&as_umsgid=$_q"
97 }
98
99 # dict.leo.org German English
100 ge() {
101         local _q _IFS
102
103         _IFS=$IFS
104         IFS=+
105         _q="$*"
106         IFS=$_IFS
107         ${BROWSER:-lynx} "http://dict.leo.org/?search=$_q"
108 }
109 # dict.leo.org German FRench
110 gfr() {
111         local _q _IFS
112
113         _IFS=$IFS
114         IFS=+
115         _q="$*"
116         IFS=$_IFS
117         ${BROWSER:-lynx} "http://dict.leo.org/frde?search=$_q"
118 }
119 # dict.leo.org German ESpa~nol
120 ges() {
121         local _q _IFS
122
123         _IFS=$IFS
124         IFS=+
125         _q="$*"
126         IFS=$_IFS
127         ${BROWSER:-lynx} "http://dict.leo.org/esde?search=$_q"
128 }
129 # explica palabras en espa~nol
130 espanol() {
131         local _q _IFS
132
133         _IFS=$IFS
134         IFS=+
135         _q="$*"
136         IFS=$_IFS
137         lynx -dump --nolist "http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA=$_q"
138 }
139
140 # call xloadimage by URI
141 if /usr/bin/ftp -h 2>&1 | fgrep http:// >/dev/null 2>&1; then
142         loadfile() {
143                 /usr/bin/ftp -Vo - "$@"
144         }
145 elif which curl >/dev/null 2>&1; then
146         loadfile() {
147                 curl "$@"
148         }
149 elif which wget >/dev/null 2>&1; then
150         loadfile() {
151                 wget -qO - "$@"
152         }
153 else
154         loadfile() {
155                 fetch -o - "$@"
156         }
157 fi
158 loadimage() {
159         local f
160
161         for f in "$@"; do
162                 if test -s "$f"; then
163                         xloadimage "$f"
164                 else
165                         loadfile "$f" | xloadimage stdin
166                 fi
167         done
168 }
169
170 # man with gnroff on MirPorts
171 gman() {
172         man -C /usr/mpkg/share/groff/man_utf8.conf "$@"
173 }
174
175 # hexdump -C in look-better
176 which hd >/dev/null 2>&1 || hd() {
177         hexdump -e '"%08.8_ax  " 8/1 "%02X " " - " 8/1 "%02X "' \
178             -e '"  |" "%_p"' -e '"|\n"' "$@"
179 }
180
181 # rot13 for those who do not have it
182 which rot13 >/dev/null 2>&1 || rot13() {
183         tr \
184             abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
185             nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM
186 }
187
188 # csh like setenv
189 setenv() {
190         eval $1=\$2
191         eval export $1
192 }