#!/bin/zsh
# Filename:      qma
# Purpose:       "quick manual access"
# Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>, Matthias Kopfermann <maddi@grml.org>
# Bug-Reports:   see http://grml.org/bugs/
# License:       This file is licensed under the GPL v2.
################################################################################

. /etc/grml/lsb-functions
. /etc/grml/script-functions

check4progs man lzop vim || exit 1

VERSION='0.1'

MANDIR=${MANDIR:-$HOME/man}
if ! [ -d "$MANDIR" ] ; then
   einfo "Creating $MANDIR."
   mkdir $MANDIR ; eend $?
fi

usage() {
   eerror "Usage: qma [section] manpage" ; eend 1
   exit 1
}

case $1 in
  -h*|--h*)
    usage
    ;;
  -v*|--v*)
    einfo "qma - version $VERSION" ; eend 0
    exit 0
    ;;
  [0-9])
    SECTION="${1}"
    SECTIONFILE=".${1}"
    MANPAGE="$2"
    SEARCH="$3"
    ;;
  *)
    SECTION=''
    MANPAGE="$1"
    SEARCH="$2"
    ;;
esac


if [ -z "$MANPAGE" ] ; then
   usage
fi

QUICKMAN="${MANDIR}/${MANPAGE}${SECTIONFILE}.txt.lzo"

if ! [ -f "$QUICKMAN" ] ; then
   einfo "Writing manpage to $QUICKMAN"
   if man $SECTION $MANPAGE 1>/dev/null ; then
      man $SECTION $MANPAGE | col -b | lzop -U >$QUICKMAN ; eend $?
      einfo "Compressing manpage with lzop"
      eend $?
   else
      exit 1
      eend 1
   fi
fi

vimconfig='
         set filetype=man
         "set hlsearch can be annoying so use <C-L> to dehighlight"
        "shut up hlsearch when it confuses more than it helps and"
         nn <silent> <C-L> :nohlsearch<cr>|redraw
        "q should really end our document-reading like less does"
         nn q :qa!<cr>
        "different than q in that it quits only the current window when multiple windows "
         nn Q :q!<cr>
        "honor midnight-commander addicts :) "
         nn <F10> :qa!<cr>
        "use one wonderful vim feature to show all matches of the word in the document in ex-mode"
         nn a ]I
        "the other way round"
         nn A [I
         nn b <C-b>
         nn <backspace> <C-f>
         "nn f <C-f>
         nn p }zz
        "scroll the page down one line"
         nn j <C-E>
        "scroll the page up one line"
         nn k <C-Y>
        "the expectation of getting the next search via 'n' can not be ignored"
         nn -n <ESC> :set invnumber<cr>
         nn h :set invhlsearch<cr>
        "Make toggling case-sensitive accessable via the letter i"
         nn i :set invignorecase<cr>
        "Make toggling case-sensitive accessable via the less convention via -i"
         nn -i :set invignorecase<cr>
         nn <space> <C-f>
         nn <backspace> <C-b>
         nn <enter> gg
         nn S :split<cr>
         nn V :vsplit<cr>
        set filetype=man
        set ignorecase
        "Really not modify a document here"
        set nomodifiable
        set readonly
        "We have a more modern approach to searching in vim!"
        set incsearch
'

if [ -n "$SEARCH" ] ; then
  vim -S  =( echo $vimconfig  ) +/"$SEARCH" =( lzop -cd ${QUICKMAN} )
else
  vim -S =( echo $vimconfig  ) =( lzop -cd $QUICKMAN )
fi

einfo "Thanks for flying qma using vim and lzop." ; eend 0

## END OF FILE #################################################################
