Hi there,

I've just released menu-2.0. It has many new features, one of
wich is the optimization of the menu tree, using something I've
called "hints". This is what I want to start discussion about
with this email.

********************
First, why: 

On my system, there are only two entries in the
/Apps/Editors submenu. But I'm sure that other systems have
15 or more entries there. Both aren't optimal: on my system,
the /Apps/Editors submenu could better be removed or merged
with another menu; while on the other systems, /Apps/Editors
should get other sub-entries. Because of the static-ness
of the menu tree, it was never possible to attac this problem.
Now, with "hints" it is.

********************
How it works:

The hints actually work in a rather strange way: when
hint_optimize=true (in the config file) then all $section
elements (like "section=Apps/Editors", in the menuentry file)
are added to the specified $hints variable (new variable in the
menuentry file, could be "hints=Bulky,Expert,Serious" for Emacs).
The order (/Apps/Editors or /Editors/Apps) of the resulting hints
is completely ignored. Then, the
hints for each menu entry are put in an array that is handed to
the optimization routine, that will calculate a reasonable tree 
for those hints. That tree must comply with the following:


When a user looks for a program "Program" with, say, hints 
"Good,Bulky,Heaven", then, while walking through the tree, 
it should at every node visited be clear for the user what 
submenu to select (or the menu should have "Program" directly 
in it). So, the toplevel menu may look like
  Good
  Hell
  Microsoft
because then a searcher for a menu entry with hints "Good,Bulky,Heaven"
will know to select the submenu "Good". The toplevel menu may not look
like
  Good
  Hell
  Heaven
as now it isn't clear whether to visit the Good or the Heaven submenu.

That rule allows for many different trees, and the task of the
optimization procedure is to select, in a finite amount of time, the
tree that best matches the user's desire obout the optimimum number of
menu entries.

Menu is always free to discard hints, if they are not neccecary.

Although this procedure ignores the real debian tree (so much
discussed about), it does eventually come up that look surprisingly
like just that tree.

As soon as hints are specified for more menu entries, this procedure
will allow menu to merge, say "Apps/Viewers" and "Apps/Sound", if we
give both submenus the hint "MultiMedia". (Would be good on my system,
as both contain less than 3 entries). If those submenus do get 
the "Multimedia" hint, then all `children' of those submenus (like 
GhostVieuw and RoseGarden) will automatically inherit those hints.

********************
What to discuss?

Well, the hints have most effect if there is some overal uniformity 
in their use. 

For example, Emacs could be given a hints=Bulky, but if that is done,
then all big editors should get a hints=Bulky, and not something like
hints=Big, or hints=MS-like, as then menu will not any more be able 
to group all big editors in one menuentry.

So, we should agree on some hints that can be used in most submenus
(Big or Bulky probably could be used in many more submenus, as would
X11, or Text), and there probably are some hints that can only be used
in one submenu (like "Music" in the Apps/Sound section).

The hints that apply to submenus (e.g., the hints=Multimedia for
the submenus /Apps/Sound and /Apps/Viewers) can best be set in
the menu package; the hints that apply to programs etc. have
to be set in the menu entry files of those programs.

Another problem is that English isn't my first language, and I
don't really feel compatent enough to think of many english words
that apply to several menu entries or submenus. I'm hoping other
people are better at thinking of them:).


********************
Closing remarks:

All of the tree optimization is optional, it will not happen by default
(maybe I should however set hint_optimize=true in /etc/menu-methods/menu.h).

These hints will provide for a (the only?) way out for those that dislike
their overfull/underfull submenus.

Yes, a variable menu tree _is_ also a disadvantage, if you want to tell
a friend "Find netscape in Apps/Net/Netscape", and on your friend's
system, it turns out that the section is "Apps/Web/Netscape". But I for
one always tel people to "type `netscape' if you want to start netscape.
Personally, I mostly see the tree as a means for people to find out what
is installed on their system, and, once installed, a possibly nice
`graphical' way to re-start it (on one's own system).

********************
Groetjes,
joostje

