[GRASS-SVN] r50812 - in grass-addons/grass6/display: . d.zoom.keys
svn_grass at osgeo.org
svn_grass at osgeo.org
Tue Feb 14 05:23:30 EST 2012
Author: amuriy
Date: 2012-02-14 02:23:30 -0800 (Tue, 14 Feb 2012)
New Revision: 50812
Added:
grass-addons/grass6/display/d.zoom.keys/
grass-addons/grass6/display/d.zoom.keys/Makefile
grass-addons/grass6/display/d.zoom.keys/d.zoom.keys
grass-addons/grass6/display/d.zoom.keys/description.html
Log:
<d.zoom.keys> added to grass6/display
Added: grass-addons/grass6/display/d.zoom.keys/Makefile
===================================================================
--- grass-addons/grass6/display/d.zoom.keys/Makefile (rev 0)
+++ grass-addons/grass6/display/d.zoom.keys/Makefile 2012-02-14 10:23:30 UTC (rev 50812)
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../..
+
+PGM = d.zoom.keys
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script
Added: grass-addons/grass6/display/d.zoom.keys/d.zoom.keys
===================================================================
--- grass-addons/grass6/display/d.zoom.keys/d.zoom.keys (rev 0)
+++ grass-addons/grass6/display/d.zoom.keys/d.zoom.keys 2012-02-14 10:23:30 UTC (rev 50812)
@@ -0,0 +1,343 @@
+#!/bin/sh
+############################################################################
+#
+# MODULE: d.zoom.keys
+# AUTHOR(S): Alexander Muriy
+# (Institute of Environmental Geoscience, Moscow, Russia)
+# e-mail: amuriy AT gmail DOT com
+#
+# PURPOSE: Allows to change the current geographic region settings interactively, with a keyboard.
+#
+# COPYRIGHT: (C) 02/2012 Alexander Muriy / GRASS Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+############################################################################
+#%Module
+#% description: Allows to change the current geographic region settings interactively, with a keyboard. Use arrow keys to navigate, "-" to make futher, "+" (without "Shift") to make closer.
+#% keywords: display, zoom
+#%End
+#%Option
+#% key: mon
+#% type: string
+#% required: no
+#% key_desc: name
+#% description: Name of graphics monitor to select (default is currently selected monitor).
+#%End
+#%Option
+#% key: magn
+#% type: double
+#% required: no
+#% multiple: no
+#% key_desc: number
+#% description: Magnification: default is "1" (1/10 of current region). "magn" > 1 gives positive magnification, "magn" < 1 gives negative one.
+#%End
+#%Flag
+#% key: t
+#% description: Use navigation from terminal
+#%End
+#%Flag
+#% key: x
+#% description: Use navigation in X-monitor (requires <xev> and <xdotool>)
+#%End
+#%Flag
+#% key: r
+#% description: Decrease region resolution during navigation
+#%End
+############################################################
+
+if [ -z "$GISBASE" ] ; then
+ echo "You must be in GRASS GIS to run this program." 1>&2
+ exit 1
+fi
+
+if [ "$1" != "@ARGS_PARSED@" ] ; then
+ exec g.parser "$0" "$@"
+fi
+
+## set environment so that awk works properly in all languages ##
+unset LC_ALL
+export LC_NUMERIC=C
+
+
+############################################################
+cleanup()
+{
+ rm -f "$TMP*"
+ if [ "$GIS_FLAG_T" -eq 1 ]; then
+ stty "$tty_save"
+ fi
+
+ if [ "$GIS_FLAG_R" -eq 1 ]; then
+ g.region nsres="$OLD_NSRES" ewres="$OLD_EWRES"
+ d.redraw --q
+ fi
+}
+############################################################
+## what to do in case of user break:
+exitprocedure()
+{
+ echo ""
+ echo "User break!"
+ cleanup
+ exit 1
+}
+
+## shell check for user break (signal list: trap -l)
+trap "exitprocedure" 2 3 15
+
+############################################################
+## check for <xev>
+if [ "$GIS_FLAG_X" -eq 1 ] && [ ! -x "$(which xev)" ] ; then
+ g.message -e "<xev> required, please install it first"
+ exit 1
+fi
+
+## check for <xdotool>
+if [ "$GIS_FLAG_X" -eq 1 ] && [ ! -x "$(which xdotool)" ] ; then
+ g.message -e "<xdotool> required, please install it first"
+ exit 1
+fi
+
+## check for <awk>
+if [ ! -x "$(which awk)" ] ; then
+ g.message -e "<awk> required, please install <awk> or <gawk> first"
+ exit 1
+fi
+
+############################################################
+## setup temporary files
+TMP="$(g.tempfile pid=$$)"
+if [ "$?" -ne 0 ] || [ -z "$TMP" ] ; then
+ g.message -e "ERROR: Unable to create temporary files."
+ exit 1
+fi
+
+############################################################
+## DO IT
+
+if [ "$(d.mon -p | cut -f1 -d' ')" != "Currently" ] ; then
+ g.message -e "No active monitors. Please start <d.mon ...> first"
+ exit 1
+fi
+
+if [ "$GIS_FLAG_X" -eq 0 ] && [ "$GIS_FLAG_T" -eq 0 ]; then
+ g.message -e "Please select method of navigation: flag \"-t\" from terminal or flag \"-x\" from X-monitor"
+ exit 1
+fi
+
+if [ "$GIS_FLAG_X" -eq 1 ] && [ "$GIS_FLAG_T" -eq 1 ]; then
+ g.message -e "Please select one method of navigation: flag \"-t\" from terminal or flag \"-x\" from X-monitor"
+ exit 1
+fi
+
+MAGN_NEGAT=$(echo "$GIS_OPT_MAGN" | grep "-")
+if [ "$MAGN_NEGAT" ]; then
+ g.message -e "Magnification should be a positive number: default is "1" (1/10 of current region). "magn" > 1 gives positive magnification, "magn" < 1 gives negative one."
+ exit 1
+fi
+
+
+## region stuff
+
+if [ "$GIS_FLAG_R" -eq 1 ]; then
+ eval $(g.region -g)
+ OLD_NSRES="$nsres"
+ OLD_EWRES="$ewres"
+
+ curr_res=$(echo "$nsres" "$ewres" | awk '{x=($1+$2)/2; print x}')
+ tmp_res=$(echo "$curr_res" | awk '{x=$1*3; print x}')
+
+ g.region res="$tmp_res"
+fi
+
+eval $(g.region -eg)
+ns_extent_round=$(printf "%.0f\n" $ns_extent)
+ew_extent_round=$(printf "%.0f\n" $ew_extent)
+
+if [ -z "$GIS_OPT_MAGN" ]; then
+ MAGN=1
+else
+ MAGN="$GIS_OPT_MAGN"
+fi
+
+east_step=$(echo $ew_extent_round "$MAGN" | awk '{e=($1/10)*$2; print e}')
+north_step=$(echo $ns_extent_round "$MAGN" | awk '{n=($1/10)*$2; print n}')
+
+
+## monitors stuff
+curr_mon=$(d.mon -p | cut -d':' -f2 | sed 's/^ //g')
+
+if [ -z "$GIS_OPT_MON" ]; then
+ MON="$curr_mon"
+else
+ MON="$GIS_OPT_MON"
+fi
+
+NOT_RUN=$(d.mon -L | grep "$MON" | grep "not running")
+if [ -z "$NOT_RUN" ]; then
+ d.mon select="$MON"
+else
+ g.message -e "Monitor <"$MON"> is not running. Please run or select it first"
+ exit 1
+fi
+
+
+#### navigation in X-monitor
+
+if [ "$GIS_FLAG_X" -eq 1 ]; then
+
+### make actions scripts for AWK
+
+ for ACTIONS in up down left right closer futher; do
+ SCRIPT="${TMP}_"$ACTIONS".sh"
+ echo '#!/bin/sh' > $SCRIPT
+
+ case "$ACTIONS" in
+ up)
+ echo "g.region n=n-"$north_step" s=s-"$north_step"" >> $SCRIPT
+ echo "d.redraw --q" >> $SCRIPT
+ ;;
+ down)
+ echo "g.region n=n+"$north_step" s=s+"$north_step"" >> $SCRIPT
+ echo "d.redraw --q" >> $SCRIPT
+ ;;
+ left)
+ echo "g.region w=w+"$east_step" e=e+"$east_step"" >> $SCRIPT
+ echo "d.redraw --q" >> $SCRIPT
+ ;;
+ right)
+ echo "g.region w=w-"$east_step" e=e-"$east_step"" >> $SCRIPT
+ echo "d.redraw --q" >> $SCRIPT
+ ;;
+ closer)
+ echo "g.region w=w+"$east_step" e=e-"$east_step" n=n-"$north_step" s=s+"$north_step"" >> $SCRIPT
+ echo "d.redraw --q" >> $SCRIPT
+ ;;
+ futher)
+ echo "g.region w=w-"$east_step" e=e+"$east_step" n=n+"$north_step" s=s-"$north_step"" >> $SCRIPT
+ echo "d.redraw --q" >> $SCRIPT
+ ;;
+ esac
+
+ done
+
+
+ eval $(g.gisenv)
+
+ GRASS_version=$(g.version -g | grep "version" | cut -d'=' -f2)
+
+ window_search="GRASS "${GRASS_version}" - Monitor: "${MON}" - Location: "${LOCATION_NAME}""
+ GRASS_wid=$(xdotool search --title "${window_search}")
+
+ xdotool windowactivate "${GRASS_wid}"
+
+ xev -id "${GRASS_wid}" | awk '/keycode/ {print $4; fflush()}' | while read -r xev_code; do
+ awk -v TMP="$TMP" -v xev="${xev_code}" 'NR % 2 { next }
+ {
+ if ($0 == 111)
+ system ("sh "TMP"_up.sh")
+ else if ($0 == 116)
+ system ("sh "TMP"_down.sh")
+ else if ($0 == 113)
+ system ("sh "TMP"_left.sh")
+ else if ($0 == 114)
+ system ("sh "TMP"_right.sh")
+ else if ($0 == 20)
+ system ("sh "TMP"_futher.sh")
+ else if ($0 == 21)
+ system ("sh "TMP"_closer.sh")
+ }'
+
+ done
+fi
+
+
+#### navigation in terminal
+
+if [ "$GIS_FLAG_T" -eq 1 ]; then
+
+ tty_save=$(stty -g)
+
+ get_odx()
+ {
+ od -t o1 | awk '{ for (i=2; i<=NF; i++)
+ printf("%s%s", i==2 ? "" : " ", $i)
+ exit }'
+ }
+
+# Grab terminal capabilities
+ tty_cuu1=$(tput cuu1 2>&1 | get_odx) # up arrow
+ tty_kcuu1=$(tput kcuu1 2>&1 | get_odx)
+ tty_cud1=$(tput cud1 2>&1 | get_odx) # down arrow
+ tty_kcud1=$(tput kcud1 2>&1 | get_odx)
+ tty_cub1=$(tput cub1 2>&1 | get_odx) # left arrow
+ tty_kcub1=$(tput kcud1 2>&1 | get_odx)
+ tty_cuf1=$(tput cuf1 2>&1 | get_odx) # right arrow
+ tty_kcuf1=$(tput kcud1 2>&1 | get_odx)
+
+# Some terminals send the wrong code for certain arrow keys
+ if [ "$tty_cuu1" = "033 133 101" -o "$tty_kcuu1" = "033 133 101" ]; then
+ tty_cudx="033 133 102"
+ tty_cufx="033 133 103"
+ tty_cubx="033 133 104"
+ fi
+
+ stty cs8 -icanon -echo min 10 time 1
+ stty intr '' susp ''
+
+ while true; do
+ keypress=$(dd bs=10 count=1 2> /dev/null | get_odx)
+
+ case "$keypress" in
+ "$tty_cuu1"|"$tty_kcuu1")
+ g.region n=n-"$north_step" s=s-"$north_step"
+ d.redraw --q
+ ;;
+ "$tty_cud1"|"$tty_kcud1"|"$tty_cudx")
+ g.region n=n+"$north_step" s=s+"$north_step"
+ d.redraw --q
+ ;;
+ "$tty_cub1"|"$tty_kcub1"|"$tty_cubx")
+ g.region w=w+"$east_step" e=e+"$east_step"
+ d.redraw --q
+ ;;
+ "$tty_cuf1"|"$tty_kcuf1"|"$tty_cufx")
+ g.region w=w-"$east_step" e=e-"$east_step"
+ d.redraw --q
+ ;;
+ 055)
+ g.region w=w-"$east_step" e=e+"$east_step" n=n+"$north_step" s=s-"$north_step"
+ d.redraw --q
+ ;;
+ 075)
+ g.region w=w+"$east_step" e=e-"$east_step" n=n-"$north_step" s=s+"$north_step"
+ d.redraw --q
+ ;;
+ 003)
+ echo "User break!"
+ stty $tty_save;
+ break
+ ;;
+ esac
+
+ done
+
+fi
+
+cleanup
+
+exit 0
+
+
+
+
+
Property changes on: grass-addons/grass6/display/d.zoom.keys/d.zoom.keys
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass6/display/d.zoom.keys/description.html
===================================================================
--- grass-addons/grass6/display/d.zoom.keys/description.html (rev 0)
+++ grass-addons/grass6/display/d.zoom.keys/description.html 2012-02-14 10:23:30 UTC (rev 50812)
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>GRASS GIS manual: d.zoom.keys</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="grassdocs.css" type="text/css">
+</head>
+<body bgcolor="white">
+
+<img src="grass_logo.png" alt="GRASS logo"><hr align=center size=6 noshade>
+
+<h2>NAME</h2>
+<em><b>d.zoom.keys</b></em> - Allows to change the current geographic region settings interactively, with a keyboard. Use arrow keys to navigate, "-" to make futher, "+" (without "Shift") to make closer.
+<h2>KEYWORDS</h2>
+display, zoom
+<h2>SYNOPSIS</h2>
+<b>d.zoom.keys</b><br>
+<b>d.zoom.keys help</b><br>
+<b>d.zoom.keys</b> [-<b>txr</b>] [<b>mon</b>=<em>name</em>] [<b>magn</b>=<em>number</em>] [--<b>verbose</b>] [--<b>quiet</b>]
+
+<h3>Flags:</h3>
+<DL>
+<DT><b>-t</b></DT>
+<DD>Use navigation from terminal</DD>
+
+<DT><b>-x</b></DT>
+<DD>Use navigation in X-monitor (requires <xev> and <xdotool>)</DD>
+
+<DT><b>-r</b></DT>
+<DD>Decrease region resolution during navigation</DD>
+
+<DT><b>--verbose</b></DT>
+<DD>Verbose module output</DD>
+<DT><b>--quiet</b></DT>
+<DD>Quiet module output</DD>
+</DL>
+
+<h3>Parameters:</h3>
+<DL>
+<DT><b>mon</b>=<em>name</em></DT>
+<DD>Name of graphics monitor to select (default is currently selected monitor).</DD>
+
+<DT><b>magn</b>=<em>number</em></DT>
+<DD>Magnification: default is "1" (1/10 of current region). "magn" > 1 gives positive magnification, "magn" < 1 gives negative one.</DD>
+
+</DL>
+</body>
+</html>
More information about the grass-commit
mailing list