***************************************************************************

                                  WizKey

                   Copyright 1992 by Jörg von Frantzius

***************************************************************************

        WizKey is SHAREWARE, see end of this document for details.

***************************************************************************

AGREEMENT: By using WizKey you agree that the author will not be
responsible for any damages resulting from malfunction or wrong
documentation of WizKey.


What is WizKey?
---------------

WizKey is just another commodity, intended to speed up working with windows
and screens. This is accomplished by letting the user manipulate that stuff
via the keyboard instead of having to:
1. grab your mouse (i.e. get your fingers off the keyboard...)
2. look for gadgets
3. aim at these gadgets and click
4. search for windows in huge window-piles etc.

 Anything you can do with system gadgets becomes accessible via keyboard
using WizKey, plus some additional comfort (it's a commodity!).
 A windowlist pops up on hotkey invocation, showing a list of all windows
available on the active screen and letting you pick a window with the mouse
or the keyboard (available on public screens only).
 The hotkey definitions are free configurable (using any text editor),
allowing you to extend WizKey's functionality to your special needs in
combination with its complete AREXX port. Any Arexx-script may be mapped
to any key combination using normal commodities conventions (those
provided by commodities.library).
 You may for example map a script to the hotkey "lcommand e", which will pop
up your editor's window and screen and activate it, no matter on which
screen you have been working on.


Installation
------------

As it is a commodity, WizKey needs at least OS 2.0.
Workbench: place WizKey into your Wbstartup drawer to start WizKey with
every boot-up, or double-click on it everytime you want to use it.
If you have installed WizKey in your WBstartup-drawer, I suggest you
install its Preference file in your environment, so that WizKey will
find it on boot-up:
Double-click on "InstallPrefs" to copy WizKey's preference file to
"env:WizKey/WizKey.prefs"
and
"envarc:WizKey/WizKey.prefs"
The preference file contains some hotkey definitions that can't be used
if WizKey can't find its preference file.

Shell: put something like "run >NIL: WizKey" into your user-startup script,
if you really don't like the wbstartup drawer.
See "The preference file" for some locations where WizKey can find its
preference file.
I'm not sure how much stack exactly WizKey needs, but 4096 is definitely
not enough. I suggest about 10000 bytes, if you encounter problems (Wizkey
should report that) raise the stack.


The preference file + Arexx Port
--------------------------------

WizKey's Arexx host port is named "WizKey" (case sensitive).
WizKey tries to locate a preference file following the rules given in the
user interface style guide, or at least my interpretation of these. Using
tooltypes or commandline parameters you may specify a certain preference
file to be used by WizKey, or a directory containing the file
"WizKey.prefs".

Tooltype example:    "SETTINGS=Work:stuff/WizKey.prefs"
commandline example: "run WizKey settings=Work:stuff/WizKey.prefs"

If no preference file is specified, WizKey will look for it in its program
directory, if it can't be found there it will look for
"ENV:WizKey/WizKey.prefs" in the last place. If no preference file at all
could be found, WizKey uses its built-in defaults.

The preference file is a plain ascii file editable with any ascii-editor.
It consists of hotkey-definitions using the template:

commandName = hokey definition
e.g.: WindowList = lcommand help

The example given will open the windowlist by pressing the keys left amiga +
help key (which is the built-in default for this command, btw).
Hotkey definitions using plain command names like the example above will
override WizKey's built-in hotkey defaults. Anything else WizKey does not 
"know" will be considered being some kind of arexx script, i.e. string file 
or physical file.
If a line does not contain a "=" or no valid Input Description String, it
will be completely ignored.

Small Arexx-Scripts may be put into the preference file using so-called
string files, e.g.:

"ActivateWindow 'Shell'; WinToFront; ScrToFront" = lcommand s

Pressing left amiga+"s", this example  will activate the first window
containing the string "Shell", pop it to front and pop its screen to front.
Note that in string files you do not need to say "Address 'WizKey'" to have
access to WizKey's arexx-commands, since these string files will be
executed from within Wizkey. String files are always surrounded by
quotemarks.
As well a filename may be specified, which WizKey will try to execute as an
Arexx-script., e.g:

rexx:doSomeThing.wiz = lalt s

WizKey will try to execute the file "rexx:doSomeThing.wiz" as an
Arexx-Script. Filenames do not need to be surrounded by quotemarks.

WizKey's built-in hotkey defaults use some combinations of keys that are
not accessible through input description strings, e.g. WinToFront's hotkey
would be something like "lcommand lshift", which is not a valid input
description string. I'm sorry about that, but commodities.library does not
support that (yet?); if somebody needs to define hotkeys like that himself,
I might add something non-standard to accomplish that.


WizKey's commands in detail
---------------------------

Following is a list of WizKey's functions, including their arexx command
names and default hotkeys.


NAME: Quit,             lcommand x
  WizKey removes itself from memory. You'll never use this one, anyway ;-)


Windowlist stuff:

NAME: WindowList,       lcommand help
  If the active screen is a public screen, a window is opened containing the
  titles of every window on the screen. Click on a title to pop a window to
  the front and activate it; the active window is marked with a "*". 
  To activate the windowlist, which is not activated when opened, press the 
  hotkey again, then cursor up and down to scroll through the windowlist.
  The default preference file conains some little arexx-scripts enabling
  you to pick windows with the keys lcommand + F1-F10 and "1"-"0", according 
  to the numbers displayed in the windowlist.

NAME: ToggleTitles,     lcommand t
  By default the windowlist displays the windows' titles, with this command
  the display can be switched to the windows's screentitles and back. Very
  useful for my texteditor :-)

NAME: CloseList,        lcommand delete
  Closes the windowlist.


Activation stuff + shuffling::

NAME: NextWin,          lcommand tab
  Activates the next window in the windowlist, allowing you to activate any
  window on screen.

NAME: PrecedingWin,     lcommand `  (the key above tab)
  Activates the window preceding the active window in the windowlist.

NAME: TopWinToBottom,   lcommand up (i.e. cursor up)
  The window on top of the active screen's window pile is dropped to the
  bottom, the window now on top is activated.
  Handy to shuffle through the window pile.

NAME: BottomWinToFront, lcommand down (i.e. cursor down)
  The bottom window of the window pile is brought to the top and is
  activated.

NAME: WinToFront,       lcommand lshift 
  The active window is brought to the front.

NAME: WinToBack,        lcommand rshift
  The active window is dropped to the bottom.

NAME: CloseWindow,      lcommand q
  If the active window contains a close gadget, WizKey tries to close the
  window (of course I don't just call Intuition's CloseWindow...)


Window sizin'n'movin':
(any change of size and position performed through WizKey may be taken back
one time for each window, see "RestoreWindow")

NAME: ReduceWindow,     lcommand r
  The active window is sized to its minimum.

NAME: FullSize,         lcommand f
  The active window is sized to its maximum.

NAME: Zip,              lcommand z
  Just like clicking on the active window's zip gadget.

NAME: MoveTop,          rcommand numpad 8
      MoveBottom,       rcommand numpad 2
      MoveRight,        rcommand numpad 6
      MoveLeft,         rcommand numpad 4
      MoveXCenter,      lcommand numpad 5
      MoveYCenter,      rcommand numpad 5
  The active window is moved to different positions relative to its
  screen's borders..

NAME: ExpandTop,        lcommand numpad 8
      ExpandBottom,     lcommand numpad 2
      ExpandRight,      lcommand numpad 6
      ExpandLeft,       lcommand numpad 4
      ExpandLeftTop,    lcommand numpad 7
      ExpandRightTop,   lcommand numpad 9
      ExpandLeftBottom, lcommand numpad 1
      ExpandRightBottom,lcommand numpad 3
  The active window's borders are expanded to its screen's borders.

NAME: RestoreWindow,    lcommand backspace
  The window's last change of position and/or size done with WizKey is
  taken back. Even "RestoreWindow" itself can be taken back.


Screen shuffling:

NAME: ScreenToBack,     rcommand up
  The active screen is dropped behind any other screen, the screen's active
  window is remembered. If WizKey can remember an active window on the next
  screen, the window is activated, else the window covering the screen's
  centre is activated or the screen's first window is activated.

NAME: BackScreenToFront,rcommand down
  The bottom screen is popped to the front, activation of its window is the
  same as in "ScreenToBack".


Arexx only commands:
Instead of programming some stub procedures and mapping them to default
hotkeys, I implemented a few commands as Arexx only commands that accept
some input. These commands can be found in the preference file, where they
are used in some Arexx-stringfiles that are mapped to hotkeys.

NAME: ActivateWindow <windowtitle>
  WizKey searches through every window on any screen for a window title
  that contains (!) the title given as an argument, and activates it if it
  finds one. "ActivateWindow 'rkben'" for example will activate the window
  'Workbench', if there is one. The search is case sensitive.

NAME: GetWinTitle
  Requiring "options result" before invocation, this function returns the 
  title of the active window. Example (to type in the shell):
  rx "address 'WizKey'; options results; GetWinTitle; say result"
  this will print the name of the shell window in the shell.

NAME: PickWindow <number>
  The window at the position <number> in the windowlist will be activated
  and popped to the front. See preference file for examples.
    
NAME: ScrToFront <screentitle> (optional)
  If provided with a screentitle argument, this command will pop the first
  screen containing <screentitle> in its title to the front. Without any
  argument, this will bring the active window's screen to front.

NAME: Shrink <numerator> <denominator> <boolX> <boolY>
  The active window is shrinked (or maybe even grown) in size to a fraction
  of its screen size. <boolX> and <boolY> determine whether this affects
  only the window's width, only the window's height, or both. Example:
  "Shrink 5 7 1 1" will size the active window both in width and height to 
  5/7 of its screen's size.
  "Shrink 1 2 0 1" will size the active window only in height to 1/2 (one
  half) of its screen's height.
  Oops, I just notice that "FullSize" is almost obsolete...


Future Enhancements
-------------------

WizKey will take care of the window's screen display clip (the position and
size of the screen's visible portion - autoscroll screens) if it is told to
do so. I didn't yet find the time to do that, I could work on WizKey for
all of my life without one single public release ;-)
If you have some ideas of new features or corrections then please tell me
about it, maybe I will implement it.
There might especially be some useful Arexx-commands I did not think of.
Of course I'd appreciate any bug report very much, too, the more detailed 
the better.


SHAREWARE
---------

If you use WizKey frequently then feel free to send me a donation of 20$ or
20 DM. If you can't afford that much money or if you think that WizKey is
worth less, feel free to send less money, that's ok.
If you think that WizKey is worth much more than 20$, don't hesitate to send 
much more than 20$. 
If you do not like WizKey or do not have any computer at all, and you don't 
know how to get rid off your money, this might be a reason to send some
money to me, too, you are welcome.

My address is:
                     Jörg von Frantzius
                     Neue Königstr 61
                     W-5040 Brühl
                     Germany

Email:               NOVALIS@DARKNESS.ZER
Internet:            novalis@darkness.gun.de

My bank account is:  BLZ 37010050, number 04199 53-507
                     Postgiroamt Köln


UPDATES
-------

Registered users can obtain updates for free, e.g. the cost of postage,
envelope and diskette. I suggest about $3 or 3,- DM in Germany, I hope
that's enough... Since I am working on WizKey almost everytime I switch
on my computer, chances are good that there's a new version available
every now and then.


HISTORY
-------

WizKey 1.14 first public release

WizKey 1.15 10-Jul-1992
Changes, or better bugfixes:
- WizKey now runs on those few Amigas with an 68000 in it ;-)
- a potentially nasty bug that showed up only when at least two
  users are playing with WizKey and the mouse simultaneously
  is fixed now
- Bug in AREXX-Command ScrToFront fixed that would bring up
  the Workbench no matter what Screenname was passed to it
- now CX_PRIORITY may be passed either as a ToolType or CLI-
  Parameter to determine the priority of WizKey in relation
  to other running Commodities. BTW, hey Commodore, why
  doesn't Exchange show nor change these priorities?
- WizKey now removes properly when started twice

