XEROX NEATICONS 2 4 1 NEATICONS 1 4 By: Peter Schachte (quintus!pds@Sun.com) INTRODUCTION If you like to keep your icons neatly arranged on your screen, NEATICONS is for you. After this package is loaded, whenever an icon is created by shrinking a window, that icon will be "neat." But what is a neat icon? A neat icon is one that is lined up with with another icon or window, or the edge of the screen. The easiest way to see this is to load the package, shrink a few windows (creating a snapshot and shrinking it is easy), and move them around. When a neat icon is moved near another icon or window or the edge of the screen, it is "grabbed" and moved neatly near it. Neat icons line themselves up in a variety of ways. They will flush themselves with the edge of the screen. They will move themselves a fixed number of pixels from the edge of another window. Or they will align one of their edges with the corresponding edge of another window. When you move a neat icon, it will try to find a "neat" position near where you placed it, and place the window there instead. It may find a nearby position that is horizontally neat but not vertically, or vice versa. In any case, it will move the window into the nearest neat position it can find, or leave it where you put it if it can't find any nearby neat places. EXAMPLES Here are a few examples of how your icons will be arranged. A typical cluster of neat icons: MŔ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ř˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙řâ""""""""""""""""""""""""""""""""""""""""8â""""""""""""""""""""""""""""""""""""""""8Ȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Čˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â""""""""""""""""""""""""""""""""""""""""8â""""""""""""""""""""""""""""""""""""""""8Ȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Čˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â""""""""""""""""""""""""""""""""""""""""8â""""""""""""""""""""""""""""""""""""""""8Ȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Čˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â""""""""""""""""""""""""""""""""""""""""8â""""""""""""""""""""""""""""""""""""""""8Ȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Čˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â""""""""""""""""""""""""""""""""""""""""8â""""""""""""""""""""""""""""""""""""""""8Ȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Čˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â""""""""""""""""""""""""""""""""""""""""8â""""""""""""""""""""""""""""""""""""""""8Ȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Čˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â""""""""""""""""""""""""""""""""""""""""8â""""""""""""""""""""""""""""""""""""""""8Ȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Čˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â""""""""""""""""""""""""""""""""""""""""8â""""""""""""""""""""""""""""""""""""""""8ȋ˙˙˙˙˙˙üˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Č‹˙˙˙˙˙˙üˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â#""""""""""""""""""""""""""""""""8â#""""""""""""""""""""""""""""""""8ȋ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Č‹˙Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â#Ž""""""""""""""""""""""""""""""""8â#Ž""""""""""""""""""""""""""""""""8ȋ˙˙Ŕ8Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Č‹@Ȍˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â#{ŃCŽ""""""""""""""""""""""""""""""""8â#BJL˙Ž""""""""""""""""""""""""""""""""8ȋ{Äp ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜Č‹ X˙Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜â#zFŽ""""""""""""""""""""""""""""""""8â#AˆŽ""""""""""""""""""""""˙˙˙˙˙˙˙˙˙řȋ˙˙ŔhŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˙˙˙˙˙˙˙˙˙˙řȋŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŕ8â#Ž""""""""""""""""""""""`8â#Ž""""""""""""""""""""""g˙˙˙˙˙˙˙˙˙8ȋŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä8ȋŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä8â#Ž""""""""""""""""""""""d8â#˙Ž""""""""""""""""""""""d8ȋ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä˙˙ţ8ȋ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä8â#˙˙˙˙˙˙ţ""""""""""""""""""""""d8â#˙˙˙˙˙˙ţ""""""""""""""""""""""d˙Â8Ȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä8Ȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä˙ň8â""""""""""""""""""""""""""""""d8â""""""""""""""""""""""""""""""d8ȋ˙˙˙˙˙˙üˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä˙˙ţ8ȋ˙˙˙˙˙˙üˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä8â#""""""""""""""""""""""d8â#""""˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â"d˙˙ü8ȋ ˆˆˆˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙čˆä˙˙ü8ȋ˙Œˆˆˆˆŕxˆä8â#Ž""""`z"d€8â#Ž""""`n"d˙đ8ȋ˙˙Ŕ8ŒˆˆˆˆŕŔfˆä8ȋ@Ȍˆˆˆˆá€cˆä8â#{ŃCŽ""""a€a˘d8â#BJL˙Ž""""c`âd8ȋ{Äp ˆˆˆˆă`hä8ȋ X˙Œˆˆˆˆăřä8â#zFŽ""""cúd8â#AˆŽ""""c °dxq8ȋ˙˙ŔhŒˆˆˆˆá°äD‰!8ȋŒˆˆˆˆá€äDaA8â#Ž""""`ŔdD Ŕ8â#Ž""""`dD‰8ȋŒˆˆˆˆŕäxq 8ȋŒˆˆˆˆŕä8â#Ž""""`d8â#˙Ž""""`d8ȋ ˆˆˆˆŕäAxúAńÄ8ȋ ˆˆˆˆŕäA"D‚A"8â#˙˙˙˙˙˙ţ""""`dADňAá8â#˙˙˙˙˙˙ţ""""`dAx‚A@8ȈˆˆˆˆˆˆˆˆˆˆˆŕäA"@‚A!8Ȉˆˆˆˆˆˆˆˆˆˆˆŕä}@‚}ńÂ8â""""""""""""`d8â""""""""""""`$ ü €d8ȋ˙˙˙˙˙˙˙˙řˆˆŕ& @0€ä8ȋ˙˙˙˙˙˙˙˙řˆˆŕ%‰(@(€äÇĎ 8â#˙˙˙˙˙˙˙˙ú""`$’Iř(~$€d$ˆ¨U*8â#ŔDŕ ""`$’ID@$€d‡p98ȋ˙˙˙˙˙˙˙˙ţˆˆŕ$R)|@"€äD‚¨T*8ȋŕ6 €ƒˆˆŕ$2‚@!€ä$„ 8â#˙˙˙˙˙á˙˙˙â"`Ä ü‚ €dáÇȈ€8â#|? >"`d€8ȋ?˙˙˙˙˙˙˙˙˙řŕä8ȋ˙˙˙˙˙˙˙˙˙řŕä8â#˙˙˙˙˙˙˙˙˙ú`d8â#ř:`d8ȋ88ŕä8ȋ88ŕä8â#8:`d8â#8:`d8ȋ88ŕ ç˙˙˙˙˙˙˙˙˙8ȋ88ŕŕ8â#8:``8â#8:`˙˙˙˙˙˙˙˙˙řȋ88ŕ˙˙˙˙˙˙˙˙˙˙řȋ88ŕˆˆˆˆˆˆˆˆˆˆ˜â#8:`""""""""""8â#8:`6Ă""""""""""8ȋ8ßĚp8ŕ6Ćˆˆˆˆˆˆˆˆˆˆ˜Č‹8˛Ř8ŕ˙˙˙˙˙˙˙˙˙˙řâ#8¸đ:` ˙˙˙˙˙˙˙˙˙řâ#8œđ:``8ȋ8ŽŘ8ŕŕ8ȋ8ŚĚ8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙řç˙˙˙˙˙˙˙˙˙8â#8Ć:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úd8â#8:""""""""""""""""""d8ȋ88ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä8ȋ8Ŕp8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆä8â#q8:""""""""""""""""""d˙˙ţ8â#¸:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â"d8ȋ¸6ϟl>q€8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙čˆä8ȋ8f,Řl0ČŔ8ŕxˆä˙Â8â#@8ĆŒŘl0ŕ`:`z"d8â#š†ĚŢlřŔ8፰ä€8ȋ8l°Ě`8á€ä˙đ8â#`8n0Ě0:`Ŕd8â#A8g<ř:`d8ȋP¸c°Ě08ŕä8ȋL¸i°Ě`8ŕä8â#x¸Ç>ĚŔ:`d8â#N¸:`d8ȋ¸8ŕä8ȋ¸8ŕä8â#8:`d8â#`8:`d8ȋ@;›áŮăÎg8ŕä8ȋ@;›ƒ6nl€8ŕä8â#p;Űƒon:`d#č|p‹DDDDDDDDDDDLŔDDDDDDDDDDDLŔŔŔDDDDDDDDDDDLŔDDDDDDDDDDDLÎ8pŔŃDˆ "ĐDˆ#‹"DDDDDDDDDDDLŢp„L€DDDDDDDDDDDLщđGȟ"Ń ˆ$€"Ń@ˆ$L€"DDDDDDDDDDDLÎ|pËDDDDDDDDDDDLŔŔŔDDDDDDDDDDDLŔDDDDDDDDDDDLŔĆ8pŔĘDˆ "DDDDDDDDDDDLĘ˜#‡"DDDDDDDDDDDLŇ8¨$H€ŇŠň'Č"ßČ$"DDDDDDDDDDDLÂDˆ$H€"DDDDDDDDDDDLÂ8pÇŔŔDDDDDDDDDDDLŔDDDDDDDDDDDLŔŔßřŔDDDDDDDDDDDLЀ "DDDDDDDDDDDLЀ#‡"Ţđ$H€щň'Č"DDDDDDDDDDDLÁ$"DDDDDDDDDDDLш$H€"ÎpÇŔDDDDDDDDDDDLŔDDDDDDDDDDDLŔŔŔDDDDDDDDDDDLß8p DDDDDDDDDDDLÁDˆ`"ÂDˆc‹" L€DDDDDDDDDDDLÄ!ňŁČ"DDDDDDDDDDDLÄ @¤H"Č@€¤H"Č|ř#ČDDDDDDDDDDDLŔDDDDDDDDDDDLŔŔŔDDDDDDDDDDDLŔDDDDDDDDDDDLß ŔĐ0` "ĐP #"DDDDDDDDDDDLŢ $DDDDDDDDDDDDLŃ!ň$"Á $"Ń $D€"DDDDDDDDDDDLÎ|řÃDDDDDDDDDDDLŔŔŔDDDDDDDDDDDLŔDDDDDDDDDDDLŔÎpŔш "DDDDDDDDDDDLÁˆ#‡"DDDDDDDDDDDLÎp$H€Á‰ň'Č"Áˆ$"DDDDDDDDDDDLш$H€"DDDDDDDDDDDLÎpÇŔŔDDDDDDDDDDDLŔDDDDDDDDDDDLŔŔÎp DDDDDDDDDDDLш`"DDDDDDDDDDDLшcˆ€"ŔŔDDDDDDDDDDDL˙˙˙˙˙˙˙˙˙˙üDDDDDDDDDDDL˙˙˙˙˙˙˙˙˙˙ůŃÄDDDDDDDDDDDDDDDDDDDDDLÄDDDDDDDDDDDDDDDDDDDDDLŃŃÄDDDDDDDDDDDDDDDDDDDDDLÄDDDDDDDDDDDDDDDDDDDDDL˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü But more typically, they will align themselves with the corner of a window: Ď]˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ţ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ţŔ@ˆ$L€"DDDDDDDDDDDFŔŽ|pËDDDDDDDDDDDFŔŔŔDDDDDDDDDDDFŔDDDDDDDDDDDFŔŔ8pŔŔ Dˆ "DDDDDDDDDDDFŔ ˜#‡"˙˙˙˙˙˙˙˙˙ôFŔ8¨$H€˙˙˙˙˙˙˙˙˙ńŔŠň'Č"`1ŔČ$"`4FŔDˆ$H€"g˙˙˙˙˙˙˙˙˙4FŔ8pÇd1Ŕd1Ŕd4FŔd4FŔd˙˙ţ1Ŕd1ŔřŔd4FŔ€ "d˙Â4FŔ €#‡"d1Ŕđ$H€d˙ň1Ŕ‰ň'Č"d4FŔ$"d4FŔˆ$H€"d˙˙ţ1ŔŽpÇd1Ŕd4FŔd˙˙ü4FŔd˙˙ü1Ŕd1Ŕd€4FŔ8p d˙đ4FŔDˆ`"d1ŔDˆc‹"d1Ŕ L€d4FŔ!ňŁČ"d4FŔ @¤H"d1Ŕ@€¤H"d1Ŕ|ř#Čd4FŔdxq4FŔdD‰!1ŔdDaA1ŔdD Ŕ4FŔdD‰4FŔ Ŕdxq 1Ŕ0` "d1ŔP #"d4FŔ $Dd4FŔ!ň$"dAxúAńÄ1Ŕ $"dA"D‚A"1Ŕ $D€"dADňAá4FŔŽ|řÃdAx‚A@4FŔdA"@‚A!1Ŕd}@‚}ńÂ1Ŕd4FŔd4FŔd1ŔpŔdÇĎ 1Ŕˆ "d$ˆ¨U*4FŔˆ#‡"d‡p94FŔ p$H€dD‚¨T*1Ŕ ‰ň'Č"d$„ 1Ŕˆ$"dáÇȈ€4FŔˆ$H€"d€4FŔpÇd1Ŕd1Ŕd4FŔd4FŔd1Ŕd1Ŕp d4FŔˆ`"d4FŔ ˆcˆ€"g˙˙˙˙˙˙˙˙˙1Ŕ`1Ŕ`4F˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙ôF˙˙˙˙˙˙˙˙˙˙˙˙˙ů˙˙˙˙˙˙˙˙˙ńŃÄDDDDDDDDDDDDDDDDDDDDDDDDFÄDDDDDDDDDDDDDDDDDDDDDDDDFŃŃÄDDDDDDDDDDDDDDDDDDDDDDDDFÄDDDDDDDDDDDDDDDDDDDDDDDDFŃŃÄDDDDDDDDDDDDDDDDDDDDDDDDF˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ţ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ţ And they occasionally align themselves near the corner where two windows overlap: ęŤ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ŕ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŔŘ00Ŕ؀00ŔŘ@00ŔŘ@00ŔŘ 00ŔŘ 00ŔŘ00ŔŘ00ŔŘ00ŔŘ00ŔŘ00ŔŘ00ŔŘ00ŔŘˆE’gÎ1žc00Ŕؚ˜nR”)JP”°60t¸Č‚,“<ŔŘZˆ~R„)J„09H&Ľ(ƒr” ŔŘ\ˆVRgÎJc01H'Ľ(ƒň” ŔŘ?ČVR Jż˙˙˙ň0'Ľ*‚˛“8ŔŘˆFR” JP”°1H%Ľ*‚˛ ŔŘœEŒg‘ 1žc09H%Ľ/˘2” ŔŘ060 t¸Ĺ",c<ŔŘ00Ŕř00Ŕř00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ00ŔŔ0?˙˙˙˙˙˙˙˙˙ŔŔ˙˙˙˙˙˙˙˙˙˙đ?˙˙˙˙˙˙˙˙˙ŔŔ˙˙˙˙˙˙˙˙˙˙đŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔŔ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ŕ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ""""""""""""""ŔŔ""""""""""""""ŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ ż˙˙˙˙˙˙˙˙˙řˆˆˆŔŔ?˙˙˙˙˙˙˙˙˙ú"""ŔŔ0"""ŔŔ °ˆˆˆŔŔ ł˙˙˙˙˙˙˙˙˙˜ˆˆˆŔŔ2š"""ŔŔ2š"""ŔŔ ˛˜ˆˆˆŔŔ ˛˜ˆˆˆŔŔ2˙˙˙š"""ŔŔ2š"""ŔŔ ˛˜ˆˆˆŔŔ ˛˙ᘈˆˆŔŔ2š"""ŔŔ2?˙ůš"""ŔŔ ˛˜ˆˆˆŔŔ ˛˜ˆˆˆŔŔ2˙˙˙š"""ŔŔ2š"""ŔŔ ˛˜ˆˆˆŔŔ ˛˙˙ţ˜ˆˆˆŔŔ2˙˙ţš"""ŔŔ2€š"""ŔŔ ˛@˜ˆˆˆŔŔ ˛?˙ř˜ˆˆˆŔŔ2š"""ŔŔ2š"""ŔŔ ˛˜ˆˆˆŔŔ ˛˜ˆˆˆŔŔ2š"""ŔŔ2š"""ŔŔ ˛€˜ˆˆˆŔŔ ˛<8ˆ€˜ˆˆˆŔŔ2"D€š"""ŔŔ@2"0 €š"""ŔŔ@ ˛ "Đ`˜ˆˆˆŔŔ@ ˛"Dˆ€˜ˆˆˆŔÓDÇN8@2<8„€š"""ŔÔ )$A$@2€š"""ŔÓ )äG$ ˛€˜ˆˆˆŔŕ‰I$ ˛˜ˆˆˆŔăäG8@2 Ž<} řâš"""ŔŔ @2 ‘"A š"""ŔŔ ˛ Œ"y đŔ€˜ˆˆˆŔŔ ˛ ‚Ž A>řáš"""ŔŔ ˛€˜ˆˆˆŔŔ ˛˜ˆˆˆŔŔ2š"""ŔŔ2ˆă爚"""ŔŔ ˛‰DT*•˜ˆˆˆŔŔ ˛ˆĂǂ8Ž˜ˆˆˆŔŔ2ˆ"AT*š"""ŔŔ2‰Bš"""ŔŔ ˛păäDŔ˜ˆˆˆŔŔ ˛@˜ˆˆˆŔŔ2€š"""ŔŔ2š"""ŔŔ ˛˜ˆˆˆŔŔ ˛˜ˆˆˆŔŔ2š"""ŔŔ2š"""ŔŔ ˛˜ˆˆˆŔŔ ˛˜ˆˆˆŔŔ3˙˙˙˙˙˙˙˙˙š"""ŔŔ0"""ŔŔ °ˆˆˆŔŔ ż˙˙˙˙˙˙˙˙˙řˆˆˆŔŔ?˙˙˙˙˙˙˙˙˙ú"""ŔŔ""""""""""""""ŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ""""""""""""""ŔŔ""""""""""""""ŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ""""""""""""""ŔŔ""""""""""""""ŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ""""""""""""""ŔŔ""""""""""""""ŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ""""""""""""""ŔŔ""""""""""""""ŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ""""""""""""""ŔŔ""""""""""""""ŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŔŔ""""""""""""""Ŕ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ŕ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ŕ DETAILS You can just load this module and forget about it, and it will behave as advertised. It does have two user-settable parameters, and two user-callable functions, however. These are documented below. Please note that the NEATICONS module is contained entirely in the NEATICONS package. This package exports the following symbols. How near is near? NEATICONS:DEFAULT-TOLERANCE [Variable] This global parameter determines how many pixels vertically and horizontally an icon will be moved in order to make it neat. This defaults to 100. Spacing between icons NEATICONS:DEFAULT-SPACING [Variable] This global parameter determines how many pixels apart neat icons will be placed. The default is 5. Making a window neat Loading the NEATICONS module causes SHRINKW to be advised, so every time a window is shrunk, the icon is made neat. So icons created before you load NEATICONS will not be neat, but they can be made neat by expanding and then re-shrinking them. But suppose you want to make a regular window neat? (NEATICONS:NEATEN &OPTIONAL WINDOW) [Function] makes WINDOW neat. WINDOW defaults to (WHICHW), so you can point at a window with the mouse and type (NEATICONS:NEATEN). Making a window sloppy (NEATICONS:UNNEATEN &OPTIONAL WINDOW) [Function] makes WINDOW no longer neat. It behaves just like a normal, sloppy, vanilla window. WINDOW defaults to (WHICHW). Other MOVEFNs The NEATICONS module uses each window's MOVEFN prop. If you wish to have another MOVEFN on a neat window, you can. If a window has MOVEFN when it is NEATICONS:NEATENed, it will be preserved. If you wish to add a MOVEFN to an existing neat window, you should put it on the window's NEATICONS:USERMOVEFN [Window Prop] prop. This prop should hold a list of functions. When a neat window is moved, first it finds the nearest neat place. Then the first function on the window's NEATICONS:USERMOVEFN prop is called with the neat position as argument. If this function returns IL:DON'T, the window won't be moved. If it returns NIL, the position argument it was passed is passed to the second function on the list. If it returns a position, this position is passed to the second function on the list. The result of each function on the list is treated similarly, until all the functions have been called. The latest position is used as the position to move the window to.(LIST ((PAGE NIL (PAPERSIZE LETTER STARTINGPAGE# 149) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO NIL) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE NIL . LETTER) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO NIL) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE NIL . LETTER) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO NIL) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL)))))/ČT1ČČ(Č(Č (Č(ŠŠ8(ŠŠ8DČČ PAGEHEADING RUNNINGHEAD HELVETICA MODERN MODERN MODERN MODERNMODERN LOGO  HRULE.GETFNMODERN  HRULE.GETFNMODERN  HRULE.GETFNMODERN   HRULE.GETFNMODERN  HRULE.GETFNMODERN * Ë|Œ ^Œ BMOBJ.GETFN3MODERN ;ä BMOBJ.GETFN3MODERN L ~ BMOBJ.GETFN3MODERN R BMOBJ.GETFN3MODERN Ƀ | 03ő3# z% reÄzzş