Merge remote branch 'grml-scripts/master'
[grml-scripts-core.git] / usr_bin / qma
diff --git a/usr_bin/qma b/usr_bin/qma
new file mode 100755 (executable)
index 0000000..5464823
--- /dev/null
@@ -0,0 +1,119 @@
+#!/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 #################################################################