3b2c0141ce1c1f3d9e4a4148847e8e1ecbe1381c
[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 # DuckDuckGo search
73 ddg() {
74         local _q _IFS
75
76         _IFS=$IFS
77         IFS=+
78         _q="$*"
79         IFS=$_IFS
80         ${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"
81 }
82
83 # GooGle Search
84 ggs() {
85         local _q _IFS
86
87         _IFS=$IFS
88         IFS=+
89         _q="$*"
90         IFS=$_IFS
91         ${BROWSER:-lynx} "http://www.google.com/search?hl=la&pws=0&num=100&safe=off&q=$_q"
92 }
93 # Google GRoups
94 ggr() {
95         local _q _IFS
96
97         _IFS=$IFS
98         IFS=+
99         _q="$*"
100         IFS=$_IFS
101         ${BROWSER:-lynx} "http://groups.google.com/groups?hl=la&pws=0&num=100&safe=off&as_umsgid=$_q"
102 }
103
104 # dict.leo.org German English
105 ge() {
106         local _q _IFS
107
108         _IFS=$IFS
109         IFS=+
110         _q="$*"
111         IFS=$_IFS
112         ${BROWSER:-lynx} "http://dict.leo.org/?search=$_q"
113 }
114 # dict.leo.org German FRench
115 gfr() {
116         local _q _IFS
117
118         _IFS=$IFS
119         IFS=+
120         _q="$*"
121         IFS=$_IFS
122         ${BROWSER:-lynx} "http://dict.leo.org/frde?search=$_q"
123 }
124 # dict.leo.org German ESpa~nol
125 ges() {
126         local _q _IFS
127
128         _IFS=$IFS
129         IFS=+
130         _q="$*"
131         IFS=$_IFS
132         ${BROWSER:-lynx} "http://dict.leo.org/esde?search=$_q"
133 }
134 # explica palabras en espa~nol
135 espanol() {
136         local _q _IFS
137
138         _IFS=$IFS
139         IFS=+
140         _q="$*"
141         IFS=$_IFS
142         lynx -dump --nolist "http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA=$_q"
143 }
144
145 # call xloadimage by URI
146 if /usr/bin/ftp -h 2>&1 | fgrep http:// >/dev/null 2>&1; then
147         loadfile() {
148                 /usr/bin/ftp -Vo - "$@"
149         }
150 elif command -v curl >/dev/null 2>&1; then
151         loadfile() {
152                 curl "$@"
153         }
154 elif command -v wget >/dev/null 2>&1; then
155         loadfile() {
156                 wget -qO - "$@"
157         }
158 else
159         loadfile() {
160                 fetch -o - "$@"
161         }
162 fi
163 loadimage() {
164         local f
165
166         for f in "$@"; do
167                 if test -s "$f"; then
168                         xloadimage "$f"
169                 else
170                         loadfile "$f" | xloadimage stdin
171                 fi
172         done
173 }
174
175 # man with gnroff on MirPorts
176 gman() {
177         man -C /usr/mpkg/share/groff/man_utf8.conf "$@"
178 }
179
180 # hexdump -C in look-better
181 command -v hd >/dev/null 2>&1 || hd() {
182         hexdump -e '"%08.8_ax  " 8/1 "%02X " " - " 8/1 "%02X "' \
183             -e '"  |" "%_p"' -e '"|\n"' "$@"
184 }
185
186 # rot13 for those who do not have it
187 command -v rot13 >/dev/null 2>&1 || rot13() {
188         tr \
189             abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
190             nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM
191 }
192
193 # csh like setenv
194 setenv() {
195         eval $1=\$2
196         eval export $1
197 }
198
199 # benchmark machine with python
200 pystones() {
201         # default for $1 is 50000
202         ${2:-python} -c "from test import pystone; pystone.main($1)"
203 }
204
205 # Using Git to create coloured diffs of arbitrary files
206 alias cdiff='git diff --color=always --no-index --no-prefix'