##
## functions
##
## HTTPHEAD - http server respone ## search - search in local swish++ index ## message - xmessage ## ask - xmessage
## gui_browser - helper for start_browser ## start_browser - open URL in either w3m or firefox ## umlaut4url - helper for google/wiki ## google - open google (-l de, -ie ISO-8859-1, -ie UTF-8 ## latin2english - use lysy2.archives.nd.edu/ to translate
## wiki - open http://(de|en).wikipedia.org/wiki/... ## lx - ls and sort by size ## u - english <=> deutsch (exakt) ## U - english <=> deutsch (partial/ignorecase) ## dict - simple dictd client ## volume - get/set audio volume ## colorsel - open finders color-select (lupe to grab) ## ocr - Tesseract Open Source OCR Engine
function HTTPHEAD
{
local host=${1:-"wais.org"}
local port=${2:-"80"}
#echo nc $host $port
echo -e "HEAD / HTTP/1.1\nHost:$host\nConnection: Close\n" | nc -w 10 $host $port
}
function search_find_db
{
cd ~/lib/swish && ls swish++.conf.* | sed 's/^swish++.conf.//' | tr '\n' ' '
}
# search and edit:
function searche
{
${EDITOR:-vi} $( search "$@" | sed -n '/^[1-9]/s/^[0-9]* \([^ ]*\) .*/\1/p' )
}
function search
{
local index
local args
while [ "X$1" != "X" ] ; do
case "X$1" in
X-m) shift; index="$index $1"; shift;;
X-n) shift; args="--max-results $1"; shift;;
X--*) break;; # e.g. --near=5
X-*) echo "usage: search [ -m $(search_find_db | sed 's/ /|/g') ] term ..">&2; return;;
*) break;;
esac
done
index=${index:-$(search_find_db)}
(
cd ~/lib/swish
for i in $index ; do
echo -n "$i "
/usr/local/bin/search $args -c swish++.conf.$i $* # || break
done
)
}
# Message-ID: <43215DF3.2090301@wanadoo.fr>
# unix-porting@lists.apple.com
# Fri, 09 Sep 2005 12:03:31 +0200
# Use "System Events" instead of "Finder"
function message
{
local msg=${*:-"gute nacht!"}
msg=$(echo $msg | iconv -f ISO-8859-15 -t MAC)
osascript -e "tell app \"finder\"
activate
display dialog \"$msg\" buttons \"ok\" default button 1
end" >/dev/null 2>&1 || true
}
function ask
{
local msg=${*:-"gute nacht!"}
osascript -e "tell app \"finder\"
activate
display dialog \"$msg\" buttons { \"ja\", \"nein\" } default button 1
end" | grep -q ':ja'
}
function ask2
{
local y="gute"
local n="nacht"
[ "X$1" != "X" ] && { y="$1" ; shift ; n="$*" ; }
osascript -e "tell app \"finder\"
activate
choose from list { \"$y\", \"$n\" }
end"
}
function gui_browser
{
local url
local cmd=openURL
while [ "X$1" != "X" ] ; do
case "X$1" in
X-e) cmd="get URL";;
Xhttp:*|Xftp:*|Xfile:*|Xhttps:*|X/*) url="$1" ;;
*) url="file://$PWD/$1" ;;
esac
shift
done
/usr/bin/osascript -e "tell app \"Firefox\" to $cmd \"$url\""
}
function start_browser
{
local browser=${TTYBROWSER:-w3m}
while [ "X$1" != "X" ] ; do
case "X$1" in
X-n) browser=echo; shift;;
X-x) browser=gui_browser; shift;;
*) break;;
esac
done
$browser "$@"
}
# see function google and function wiki
# TODO perl?
# A LOT OF FORKS
function umlaut4url
{
local what="$@"
# Ä Ö Ü ä ö ü ß
what=`echo $what | sed 's/[äÄ]/%C3%A4/g'`
what=`echo $what | sed 's/[öÖ]/%C3%B6/g'`
what=`echo $what | sed 's/[üÜ]/%C3%BC/g'`
what=`echo $what | sed 's/ß/%C3%9F/g'`
what=`echo $what | sed 's/(/%28/g;s/)/%29/g'`
echo $what
}
alias deja='google -u groups.google.com//groups'
function google
{
local lang
local code
local what
local url
local browserargs
### [ "$DISPLAY" != "" ] && wie="galeon -n"
while [ "X$1" != "X" ] ; do
case "X$1" in
"X-l") shift; lang=$1; shift;;
"X-u") shift; url=$1; shift;;
"X-ie") shift; code=$1; shift;;
"X-h") echo "usage: google [-x] [-l de|en] [-n] word .."; return;;
X-*) browserargs="$browserargs $1"; shift;;
*) break;;
esac
done
# "so wie so" => %22so_wie_so%22
what=`echo $* | sed 's/^ *//;s/ /+/g;s/"/%22/g'`
what=`umlaut4url $what`
url="${url:-www.google.${lang:-com}/search}" url="http://${url}?${code:+ie=${code}&}q=$what"
start_browser $browserargs "$url"
}
function latin2english
{
[ $# -eq 1 ] && {
w3m -dump "http://lysy2.archives.nd.edu/cgi-bin/words.exe?$1"; } || {
echo "usage: latin2english latinword" >&2;
}
}
# todo
# http://de.wikipedia.org/wiki/Spezial:Search/SoMeThInG
function wiki
{
local lang=de
local url
local browserargs
while [ "X$1" != "X" ] ; do
case "X$1" in
"X-l") shift; lang=$1; shift;;
"X-h") echo "usage: wiki [-x] [-l de|en] [-n] word .."; return;;
X-*) browserargs="$browserargs $1"; shift;;
*) break;;
esac
done
what=`echo $* | sed 's/ /_/g'`
what=`umlaut4url $what`
# wikidate if no URL gien
if [ "X$what" = "X" ] ; then
url=http://en.wikipedia.org/wiki/`date +%B_%e | sed "s/ //"` else
url="http://${lang}.wikipedia.org/wiki/${what}" fi
start_browser $browserargs "$url"
}
# ls sorted by size
function lx ()
{
/bin/ls -l "$@" | sort -k5 -n
}
function u { LANG=de_DE.ISO8859-15 grep -w "$*" $HOME/Public/de-en; } function U { grep -i "$*" $HOME/Public/de-en; }
function dict
{
# see ~/Documents/rfc2229.txt
#
# dict://<user>;<auth>@<host>:<port>/d:<word>:<database>:<n>
# dict://<user>;<auth>@<host>:<port>/m:<word>:<database>:<strat>:<n>
#
# The "/d" syntax specifies the DEFINE command (section 3.2), whereas
# the "/m" specifies the MATCH command (section 3.3).
#
# for a list of dict servers:
# http://www.luetzschena-stahmeln.de/dictd/index.php
local pager=/bin/cat
/usr/bin/tty 0>&1 >/dev/null 2>&1 && pager=${PAGER:-/usr/bin/less}
(
# localhost mapped with VBoxManage to debian, see ~/Documents/install.txt
for host in 192.168.2.2 dict.org; do
echo -n "trying $host ..."
/usr/bin/curl --connect-timeout 3 "dict://$host/d:'$1':\*" && echo
done
) 2>&1 | $pager
}
function volume
{
if [ "X" = "X$1" ]; then
osascript -e 'get volume settings' else
osascript -e "set volume output volume $1"
fi
}
function colorsel
{
# colorsel: 63423 51643 22400 # use high-byte and convert to hex: F7C957 col=`osascript -e "tell app \"finder\"
activate
choose color
end" | tr -d ','`
colhex=`echo $col | sed 's/^/obase=16 /' | tr ' ' '\n' | bc | cut -c 1,2 | tr -d '\n'`
echo $col
echo $colhex
}
function ocr
{
# http://www.geocities.com/thierryguy/ocube.sh.html # convert in.x -density 150x150 -resize 200% -fill white -tint 50 -level 20%,80%,1.0 \ # -sigmoidal-contrast 30,50% -sharpen 0x2 -compress none -monochrome out.tiff case "$1" in
*.tiff) /opt/local/bin/tesseract $1 ${1%.tiff};;
*) echo -e "Usage: ocr file.tiff\n\tuse 'convert -monochrome in.tiff out.tiff for best quality";;
esac
}