pogo

Window managers, icon programs, widgets, etc.
Post Reply
Message
Author
User avatar
harii4
Posts: 448
Joined: Fri 30 Jan 2009, 04:08
Location: La Porte City, IA , U.S.A.
Contact:

pogo

#1 Post by harii4 »

Pogo is a speedy, highly extensible, skinnable, and user-configurable program launcher and application front-end for X11. It features a set of easy-to-use control options, including icon rotation, shifting, and switchable window orientation. Pogo comes with over 400 different pre-made application launcher buttons to choose from.

Compiled and tested in TXZ_pup with src2pkg
This thing is pretty cool 8)

Code: Select all

p-----------------------------------------q
| Pogo 2.2 README      Table Of Contents: |
b-----------------------------------------d

I.    Introduction to Pogo 2.2
II.   Overview of Pogo 
III.  Mouse Controls
IV.   Keyboard Controls
V.    Command-Line Switches
VI.   Configuration File
VII.  The Wonders Of Pogo-Remote
VIII. Errata
IX.   Technical Notes
X.    Legal Crap
XI.   Credits

p-----------------q
| I. Introduction |
b-----------------d

Hey! Thanks for not only downloading Pogo, but taking the time to read the
README. :) You'll find pretty much everything you need to know right here
in this file, and if not, just check Pogo's development webpage. Currently,
Pogo's development page is located at http://www.ibiblio.org/propaganda/pogo,
but that may change in the near future. 

I had alot of fun working on Pogo 2.2 (so far!) and I hope you have fun, too,
finding new uses for it. I tried to make Pogo as flexible as possible in
hopes that some of you would drop me an email someday out of the blue with
some cool trick you've made your Pogo do. :)

Speaking of email, if you have any questions or bug reports for me to
look at, feel free to send me an email. You'll find my contact information
at the bottom of this document.

Hope to hear from you, and Happy Pogo'ing!

Cheers,
Bowie J. Poag


p--------------q
| II. Overview |
b--------------d

So...What the heck is Pogo 2.2? 

"Pogo 2.2" consists of two main parts.. "Pogo", and a thing called
"pogo-remote". 

Pogo is a programmable application launcher. You can assign pretty much any
action you want to any button. Whether its a program, a script, even a
command that changes the way your Pogo looks and acts, you can do it from
a launcher.  Basically, all Pogo is doing behind the scenes is slapping an
ampersand at the end of whatever command you specify in Pogo's config file,
and launching it. It doesn't really care what it is. Simply put, if you can
run it from a shell prompt, you can launch it from Pogo!

The second part of this package, "pogo-remote" is a program you can use to
remotely control the appearance and behavior of your Pogo. You can use
pogo-remote either as a stand-alone command, or incorporated within shell
scripts. By using pogo-remote, you can make your Pogo do things like move
your launchers around, launch programs, change the color of the launchers
themselves, make them flash, you name it --- You can even tell Pogo to pick
up and read an entirely new config file.  Basically, anything you can do to
Pogo by yourself, manually, you can also do remotely via pogo-remote. For
example, you can write a shell script that checks your email, and flashes
a particular launcher's icon X number of times depending upon how many
emails you have waiting to be picked up. Actually, I included a script to do
just that. :) Pogo-remote lets you (the user) do absolutely tons of cool
stuff.  You can take your Pogo and turn it into an MP3 player, a calculator,
a jukebox, a diagnostic display, a clock, or even a complete desktop
replacement. It's all a matter of fooling around with Pogo's configuration
file. Be sure to have a look at the "Practical Uses Of Pogo" section of 
this README for more details! :)

Pogo was built from the ground up to be as fast, intuitive, and simple to
use as possible. It packs alot of punch for such a small program, and the
possibilities are friggin' endless as to what you can do with it. You can
take your Pogo and turn it into an MP3 player, a calculator, a jukebox, a
diagnostic display, a clock, or even a complete desktop replacement! It's
all a matter of fooling around with Pogo's configuration file, and letting
Pogo do the work for you :)  

That being said, let's start off with a brief overview of how to use Pogo.




p----------------------q
| III. Mouse controls. | 
b----------------------d

LEFT MOUSEBUTTON:    By highlighting and clicking on a launcher (an icon)
                     with the left mousebutton will run the program or shell
                     script associated w/ that launcher. Pogo will launch
                     that particular program (or shell script) in the
                     background, and return control to you.

MIDDLE MOUSEBUTTON:  By highlighting a launcher and holding down the middle
                     mousebutton, you to change and set a launcher's 
                     colorization! With the button held down, move your
                     mouse left and right to change the color, and move it
                     up and down to control the brightness. Once you're
                     satisfied with the change, simply release the middle
                     mousebutton, and you're all set.

RIGHT MOUSEBUTTON:   When highlighting a launcher, a  single click of the
                     right mousebutton will strip off any colorization
                     you've given a particular launcher. Additionally, 
                     to move the launcher to a different space in your
                     Pogo, simply highlight it, hold down the right
                     mousebutton, and drag it wherever you want. This is
                     just one way you can change the order of the launchers
                     in your Pogo.

MOUSEWHEEL UP/DOWN:  By using the mousewheel, you can shift all of the
                     launchers in your Pogo. This is another way you can
                     change the order in which your lauchers are displayed.

SIDE MOUSEBUTTONS:   Buttons 5 & 6 on your mouse (if you have them) will
                     allow you to switch Pogo's orientation between
                     Horizontal and Vertical mode, and allow you to save
                     out your current configuration, respectively.




p------------------------------------q
| IV. Keyboard Controls:  (optional) |
b------------------------------------d

Optionally, Pogo can be controlled entirely via the keyboard, with no mouse
movement whatsoever. 

ENTER:               Highlighting any launcher and hitting the Enter key will
                     make Pogo launch the program or shell-script associated
                     with that launcher.

ARROW KEYS:          Using the arrow keys will allow you to move and rotate
                     the order of the launchers in your Pogo.

TAB:                 Hitting the Tab key will allow you to switch back and
                     forth between Horizontal and Vertical 
                     window orientations. 

SPACE:               Saves out the current configuration to disk.

BACKSPACE:           Removes the colorization of the launcher you're
                     currently pointing to.

C:                   The colorization mode. Use the arrow keys to set the
                     brightness and color of the launcher, and hit C again
                     to save your changes.

ESC:                 Exit Pogo!




p---------------------------q
| V. Command-line Switches: |
b---------------------------d

 -s <value>	Use this to specify the size of the icons. Default is 64.
 -v <value>	Verbose mode. Default is OFF.
 -q <value> 	Display splash screen...Default is 0 (off).
 -c <filename>	Specify a config file other than the default (pogo.config)



p--------------------------------q
| VI. Pogo's Configuration File: |
b--------------------------------d

The top line of the config file represents the orientation and X/Y
coordinates of where the window should appear.  The first number represents
the orientation.  Set it to 0 for Horizontal, 1 for Vertical. The second two
numbers are the X and Y coordinates.  All the lines below the first one are
for the individual launchers.  They follow the basic template of:

(Unique ID) (Icon Filename) (Red) (Green) (Blue) (Program/Script To Launch) 

For example:

      11 pogo-mozilla.jpg 255 150 150 mozilla http://www.redhat.com 

This will tell Pogo to create a new button (using pogo-mozilla.jpg), tinted
red, and will bring up Red Hat's webpage. Pogo will refer to this launcher
internally as launcher #11. By the way, make sure each of the entires have
their own unique identifier. :) Pogo supports up to 127 launchers, but you'll
probably never need more than 15-20 at the most. Just like nobody will ever
need more than 640K, right? :)





p---------------------------------q
| VII. The Wonders Of Pogo-Remote |
b---------------------------------d

As I discussed earlier in this document, pogo-remote is an external program
for making Pogo do stuff like making the launcher icons flash, moving them
around, changing window orientation, etc... The idea is, you can write a
shell script that goes off and does something, then uses pogo-remote to
signal your Pogo with the results.  You can use pogo-remote as a stand-alone
program, or use it within a shell script. Here's a simple example of how
to use pogo-remote..... With Pogo running, issue this command:

./pogo-remote -d strobeThisIcon -a 3 -b 10

This will cause Pogo to flah the #3 icon ten times. This might be handy, for
example, in a script that checks for people trying to hack your box. If the
script detects something fishy is going on, it can kick off that command and
alert you visually. 

Lets try something a bit more advanced..Suppose I wanted Pogo to flash my 
email icon, depending upon how many emails I have waiting to be read.. Here's
what such a command would look like (and it works, too!) 

---%< cut here %<----

while true; do sleep 10; ./pogo-remote -d strobeThisIcon -a 17 -b `( sleep 5 ; echo "user bpoag" ; sleep 1 ; echo "pass ***********" ; sleep 1 ; echo "stat" ; sleep 1 ) | telnet mail.comcast.net 110 | tail -n1 | awk '{print $2}'`; done

--->% cut here >%---

Understand how that command works?  Every 10 seconds or so, that single
command will check my email for new messages, and then flash my email
launcher's icon (#17) a total of (x) number of times, where "x" is the
number of emails I have waiting. Kinda cool, eh? :)

By making shell scripts, and incorporating pogo-remote into them, you can use
Pogo as a status indicator for different things happening on your system..
For example, have it so that a warning icon flashes whenever the size of 
your system's error log changes.. Or, even more fun, have a script that moves
your Mozilla launcher to the front of the line when a new version is available
on the website. Way cool!  Anything you can imagine, you can toss pogo-remote
in there to provide visual feedback. You can even have multiple scripts
running, making your Pogo light up like crazy all day! It's a riot! To see
what pogo-remote looks like in action, try running the "pogo-test" script
included in this package.


When pogo-remote runs, it generates a thing called a "directive". These
"directives" are then seen by Pogo, and Pogo performs them. The directive is
followed by a few values you provide, such as the launcher you want Pogo to
manipulate, the number of times you want Pogo to do it, etc. These values
are (internally, at least) referred to as the "Primary Argument", the 
"Secondary Argument", and the "Directive String".

Pogo 2.2 supports the following directives/arguments:

Directive Name      Primary Argument   Secondary Argument   Directive String
----------------------------------------------------------------------------

colorizeThisIcon    <icon number>      N/A        	  *<24-bit RGB code> 
decolorizeThisIcon  <icon number>      N/A                 N/A
loadNewConfigFile   N/A                N/A                 <configfile>
slideThisIconUp     <icon number>      <num of spaces>     N/A
slideThisIconDown   <icon number>      <num of spaces>     N/A
slideThisIconLeft   <icon number>      <num of spaces>     N/A
slideThisIconRight  <icon number>      <num of spaces>     N/A
punchThisIcon       <icon number>      N/A                 N/A
slideAllIconsUp     <num of spaces>    N/A                 N/A
slideAllIconsDown   <num of spaces>    N/A                 N/A
slideAllIconsLeft   <num of spaces>    N/A                 N/A
slideAllIconsRight  <num of spaces>    N/A                 N/A
strobeThisIcon      <unique ID>        <strobe count>      N/A
switchToHorizontal  N/A                N/A                 N/A
switchToVertical    N/A                N/A                 N/A
startThisProgram    <uniqueID>         N/A                 N/A
setIconSize         <icon size>	       N/A                 N/A
moveWindow          <x coord>          <y coord>

(* = 24-bit Hexidecimal RGB color code = 000000 thru ffffff) 

----------------------------------------------------------------------------


You can use pogo-remote to issue any of the directives listed above. Here
are a few usage examples:
                
 pogo-remote -d punchThisIcon -a 4
 pogo-remote -d strobeThisIcon -a 3 -b 10
 pogo-remote -d loadNewConfigFile -c /home/foo/pogo-config.txt


The first command will "punch" launcher #4, or make it look like the button
is being pressed in. It won't actually launch the program associated with
that launcher, however.. Thats the purpose of the 'startThisProgram'
directive. :)

The second command will make launcher #3 flash 10 times.

The third command will make Pogo load in a completely new config file,
and redraw the window using the new launchers. This is useful if you want
the user to be given a new list of launchers to choose from after picking
one. Kinda cool, eh? You can effectively make a page-by-page menu system
out of Pogo!  You can have as many pages as you want. All you have to do
is You can have one launcher use pogo-remote to bring up a new config file,
and then have another launcher in THAT config file programmed to bring up
ANOTHER one, and so on, and so on, until you come to a config file that
has a launcher in it that brings up the original config file. Endless
possibilities, baby. :)




p--------------q
| VIII. Errata |
b--------------d

There are NO bugs...that i'm aware of. :) I hate them with a passion, and
tend to hold off on releasing my code until I can be reasonably certain my
code is watertight and bulletproof. Even if it takes days to surface. 

However, i'm pretty sure that despite my best efforts, bugs will arise. If
you find one, contact me at:

Email:  bpoag@comcast.net

...With a good explanation of the bug, and instructions on how to go about
replicating it, if possible.

If you spot anything that looks out of the ordinary in terms of performance
degradation, memory bloat, or full-blown crashes, please do let me know.
Part of what makes open-source work is collaboration. Well, collaboration,
and alot of beer. :) Lucky for you, I have plenty of beer, and I'll be
happy to make the improvements if you guys let me know what to improve. :)

For the latest information on any bugfixes that may be released in the
future, keep an eye on Pogo's development webpage at:

http://www.ibiblio.org/propaganda/pogo




p---------------------q
| IX. Technical Notes |
b---------------------d

Pogo-remote uses a combination token/signalling system to notify Pogo of new
directives that need to be processed. 

When pogo-remote runs, it first checks to see if Pogo is actually running.
It does this by checking for the existence of a lockfile, /tmp/.pogo-lock.

When pogo-remote is told by the user to issue a directive, it picks a
random number between 1 and 10. It drops this directive into /tmp, 
calling it (for example) .pogo-directive.7 ....Meanwhile, Pogo, when idle,
looks around in /tmp for .pogo-directive.3, .pogo-directive.9, 
.pogo-directive.1, etc, until it finally hits on one that actually exists---
.pogo-directive.7. This process is remarkably fast, and utilizes practically
nothing in terms of CPU time. The directives aren't even being written to
disk -- Theyre cached by the system, and never have a chance to be sync'ed
out, since they only exist for a fraction of a second. 


p----------------r
| X. Legal crap  |
b----------------d

In accordance with the GPL, the source for pogo is available upon request,
for a nominal fee to cover media and shipping costs.*

* = The source code will be provided to you as a series of large, neon-lit
marquee letters shipped individually in wooden packing crates.  Currently,
the world's supply of neon gas limits our ability to ship large quantities
of source code. The current expected wait time is 32 years, plus or minus
6 months, depending upon the condition of labor relations in countries with
substantial noble gas exports.

For more information, please inject crystal meth directly into your eyeballs,
and light yourself on fire while listening to the following song:

xmms http://www.ibiblio.org/propaganda/pogo/easteregg.mp3

Just kidding. ;) 

Seriously, though... As with all open-source software, there are bound to be
yet-undiscovered bugs, vulnerabilites and what-not.. This program comes 
without warranty. However, Pogo *is* free, and is distributed under the GNU
General Public License. Have fun!

Cheers,
Bowie J. Poag <bpoag@comcast.net> 
Sep 1, 2003.



p-------------------q
| XI. Thanks Be To: |
b-------------------d

Jonathan Walther <krooger@debian.org> 
  o  for wm_hinting patch, and a stern lecture on the merits of ICCCM.

Ashley Winters <awinters@users.sourceforge.net> 
  o  for the RGB hex triplet extractor code.

Rus Hughes <russel.hughes@ntlworld.com>
  o  for helping test some of the visual feedback scripts.

needs Imlib1
Imlib1 and Imlib2 are completely different libraries that have absolutely
nothing to do with each other. Don't blame me for the confusion--the boy
genious who wrote the library came up with the brilliant idea to give
his two seperately-developed projects the same fucking name.
3.01 Fat Free / Fire Hydrant featherweight/ TXZ_pup / 431JP2012
----------------------------------------------------------------------------------------
Peace and Justice are two sides of the same coin.

User avatar
harii4
Posts: 448
Joined: Fri 30 Jan 2009, 04:08
Location: La Porte City, IA , U.S.A.
Contact:

#2 Post by harii4 »

Forgotten the screenshot :oops:
3.01 Fat Free / Fire Hydrant featherweight/ TXZ_pup / 431JP2012
----------------------------------------------------------------------------------------
Peace and Justice are two sides of the same coin.

Post Reply