#/* vim: set filetype=sh : */
# bash_usage - help for self-coded BASH functions
# dimio (http://dimio.org)
# See more: http://dimio.org/bash-born-again-shell-obolochka-komandnoj-stroki.html
# "extglob" BASH option must by  activated!
# VERSION='0.11'
#
# TODO: дополнение параметров usage через bash comletion

usage() {
    case "${1}" in
        ?(-)tmux)
            _usage_tmux;;
        ?(-)mc)
            _usage_mc;;
        ?(-)mplayer)
            _usage_mplayer;;
        ?(-)gps|?(-)gpsbabel)
            _usage_gpsbabel;;
        ?(-)vcsh)
            _usage_vcsh;;
        ?(-)git)
            _usage_git;;
        ?(-)disabled)
            _usage_disabled;;
        *)
            _usage_main;;
    esac
}

_usage_main() {
#cat <<EOF
more <<-EOF
Основные функции:
ex ФАЙЛ - распаковка архива, скрипт сам выбирает чем распаковывать
pk [ТИП] [ФАЙЛ] - упаковка архива, указываете тип (tbz, tgz, gz, tar, gz, bz2, zip, 7z)
my_ip - выводит внешний IP-адрес машины
wget-three - рекурсивная выгрузка сайта, начиная с указанной страницы. Включены докачка
             и преобразование в загруженных документах абсолютных ссылок в относительные
             (опции -c -r -k -t0)
gp, gn - переход по дереву каталогов влево и вправо
aconvert - изменение размеров всех кортинок в директории (нужен imagemagic)
ctorrent -s "путь/имя_файла" "файл.torrent" (-d для фонового режима) - скачать torrent
ln -s "цель" "имя_ссылки" - симлинк на "цель" (пути указывать абсолютные!)
perlwhere - показать полный путь к perl-модулю (аналог which)
plgen - создать плейлист из файлов mp3 и/или ogg в текущем каталоге и его подкаталогах
radio - проигрывание интернет-трансляции радио через mplayer

массовое перименование файлов с присвоением порядкового номера (начиная с единицы):
for i in *; do let j+=1; mv \$i newname_\$j; done

Более подробные шпаргалки (ключи для usage):
-tmux, -mc, -gps[babel], -mplayer, -git, -vcsh
Ключ -disabled - список отключенных функций

Функции pk, ex, my_ip, to_iso, mount_iso, rnm и описания к ним - (c)librarian (libc6.org)
(c)dimio (dimio.org)
EOF
}

_usage_vcsh(){
more << EOF
vcsh enter <repo_name>  enter repo (vcsh shell mode)
git add .               add all modified files to current repo (see gitignore.d/repo_name)
git status              check added files
git ci -m 'commit desc' make commit
git push origin master  push commit to remote repo

See more: dimio.org?p=1359
EOF
}

_usage_mplayer() {
more <<EOF
<− и −> - перемотка назад/ вперед на 10 секунд.
up и down - перемотка вперед/ назад на 1 минуту.
pgup и pgdown - перемотка вперед/ назад на 10 минут.
[ и ] - уменьшает/увеличивает скорость воспроизведения на 10%.
{ и } - вдвое меньшая/большая скорость воспроизведения.
backspace - восстанавливает нормальную скорость воспроизведения.
< и > - перемещение назад/ вперед по списку воспроизведения.
p / SPACE - пауза (повторное нажатие продолжает воспроизведение).
. - кадр вперед, нажать снова - след. кадр и т.д.
q / ESC - остановка воспроизведения и выход и программы.
+ и − изменить задержку аудио на +/− 0.1 секунды.
/ и *, 9 и 0 - уменьшает/ увеличивает громкость.
( и ) - подстраивает баланс, усиливая левый/ правый канал.
m - выключает звук.
_, #, TAB - циклически переключает доступные аудио/видео дорожки.
f - включает полноэкранный режим (смотрите также −fs).
v - изменяет видимость субтитров.
j - циклически меняет доступные субтитры.
s - (только для −vf screenshot) - делает снимок экрана.
EOF
}

_usage_gpsbabel() {
more <<EOF
gpsbabel -t -i garmin -f usb: -o kml,points=0,units=m -x position,distance=15m -F <file.kml>
-t -w говорят, что с устройства нужно брать информацию только о треках (-t)
    и точках маршрута (-w);
-x radius,distance=3K,lat=45.058646,lon=6.907375 — это фильтр, отсекающий всё,
    что не входит в круг радиусом 3 км относительно заданной точки (необязательно);
-x track,pack — этот фильтр объединяет треки отдельных переходов в один большой;
-x discard,hdop=3,vdop=3 — этот фильтр выбрасывает из трека точки, для которых
    горизонтальная или вертикальная мера ошибки больше 3;
-x position,distance=15m — объединяет точки, расстояние между которыми меньше 15 м;
-x interpolate,time=60 — интерполирует трек так, чтобы между соседними точками было
    не более 60 секунд (это один из самых полезных фильтров для создания геотегов!);
-o kml,points=0 - выходной формат kml, трек не разбивается на точки;
EOF
}

_usage_mc() {
    echo -E '
Нажатие Esc аналогично нажитию Alt (см. настройки терминала)
Alt+.       - показать/скрыть скрытые файлы
Alt+t       - переключает режим отображения панелей
Alt+o       - открыть в неактивной панели веделенный каталог
Alt+H       - история переходов по каталогам
Alt+,       - вертикальное/горизонтальное расположение панелей
Alt+?       - поиск файла
+           - выбор файлов по регулярному выражению
\           - снять отметку с выбранного
Ctrl+x c    - chmod для выделенного
Ctrl+x o    - chown для выделенного
Ctrl+x s    - ln -s (симлинк)
Crtl+x i    - неактивная панель в режим "информация"
Ctrl+x \    - меню быстрого перехода
Ctrl+x h    - добавить в меню быстрого перехода
Ctrl+Space  - вывод размера каталога
Ctrl+r      - обновить содержимое каталога
Ctrl+x d    - сравнить содержимое каталогов (прав/лев панели)
Ctrl+x,Ctrl+d   - сравнить содержимое файлов (diff)
Ctrl+s      - поиск файла/каталога по имени
Ctrl+V      - вставка из буфера (paste)
Shift+F6    - переименовать файл в текущем каталоге
    '
}

_usage_tmux() {
more <<EOF
Tmux control keys:
(default PR[efix] key is "Ctrl+b")

PR d        detach session
PR ?        list all key bindings

PR c        create new window
PR 0..9     go to window number N
PR n        next window
PR p        previous window
PR l        last active window
PR &        close current window (eq "exit")
PR w        see windows list
PR S+Left   move curr. window left
PR S+Right  move curr. window right

PR x        закрыть панель
PR стрелка  переход между панелями
PR PgUp     войти в режим копирования, где:
 PgUp, PgDown - скроллинг
 q - выход из режима копирования
PR ,        переименовать окно

PR %        разделить текущую панель на 2 по вертикали
PR "        разделить текущую панель на 2 по горизонтали
PR C+o      поменять местами панели в окне
PR C+arrow  меняет размер текущей панели

PR t        вывести на экран часы

RP :        run command
swap-window -s X -t Y   swap window #X top window #Y
swap-window -t X        swap current window to pos. #X
move-window -t X        move current window to empty pos. #X
EOF
}

_usage_git() {
more <<EOF
Отмена изменений до того, как сделан коммит:
    git checkout -- . # для всех файлов
    git checkout -- path/to/file # для конкретного
Переключение на еще не созданную ветку:
    git checkout -b new_branch_name
Получение ветки из внешнего репозитория:
    git checkout -b branch_name origin/branch_name
Получение коммитов из другой ветки в свою:
    git cherry-pick b50788b # Получить конкретный коммит
    git cherry-pick b50788b 2569e9f 25f6e9f # Получить несколько коммитов
    git cherry-pick b50788b..2569e9f # Получить диапазон
EOF
}

_usage_disabled() {
more <<EOF
Next functions is disabled:

to_iso - автоматически конвертирует образы в .iso
mount_iso - монтирует образ диска .iso
rnm - переименовывает файлы, заменяет пробелы на _
hbsync - синхронизирует файл между 2 машинами через netcat
EOF
}