:: Re: [DNG] Would you guys hate me if…
Top Page
Delete this message
Reply to this message
Author: Hendrik Boom
Date:  
To: dng
Subject: Re: [DNG] Would you guys hate me if...
On Fri, Aug 05, 2016 at 03:15:24PM -0400, Steve Litt wrote:
> On Fri, 5 Aug 2016 04:29:53 -0400
> Hendrik Boom <hendrik@???> wrote:
>
> > On Fri, Aug 05, 2016 at 07:50:26AM +0200, Edward Bartolo wrote:
> > > Hi All,
> > >
> > > I suggest a simple text file to store all menu information in a
> > > format that doesn't require any specific parsers to be installed.
> > > Some argue and seem to have a point, XML is not that readable for
> > > many users and more often than not a tool is required to edit
> > > complex files. My suggestion is a simple format to keeps record of
> > > menu tree paths and the actual menu items as follows:
> > >
> > > placement="/path/to/menu/item/in/menu/tree"
> > > name="my cool menu"
> > > command="/path/to/command param1 param2 ..."
> > > icon="/path/to/icon"
>
> The preceding is pretty darn close to what I might be planning. Right
> now, UMENU has an MS-DOS like install, where merely copying the tree
> gives you the app. I'm probably going to keep it that way. So, assuming
> the top of the tree is called $UMENU, the tree looks like the following,
> assuming two menu systems called a and r, of which only r is detailed
> in the following diagram:
>
> $UMENU
>   |--program
>   |  |--umenu.py
>   |  |--getch.py
>   |  `--umenu_library.py
>   |--conf
>   |  |--whatever, if anything
>   `--menu
>        |--a
>        `--r

>
> In the preceding, both "a" and "r" are roots of menu hierchies.
>
> Now consider a submenu in the "r" hierarchy, which is a subhierarchy,
> whose letter is "g" and perhaps whose letter string (the path taken to
> this menu) is "rdsg", representing the following path:
>
> r->data->spreadsheets->gnumeric
>
> This "g" submenu might look something like this:
>
> g
>  \
>   |--props
>   |  |--menutitle.u (Title atop menu, contains "Gnumeric Choices Menu")
>   |  |--choicetext.u (Choice string on parent, contains "Gnumeric")
>   |  |--type.u (command, menu or return) (Contains "menu)
>   |--t
>   |  |--props
>   |  |  |--menutitle.u (Contains "Gnumeric Menu For Taxes"
>   |  |  |--choicetext.u (Contains "Taxes"
>   |  |  |--type.u (Contains "menu")
>   |  |--a
>   |  |  `--props
>   |  |     |--choicetext.u (Contains "2014")
>   |  |     |--type.u (Contains "command")
>   |  |     |--dir.u (Contains "/home/slitt/tax/2014")
>   |  |     `--cmd.u (Contains "gnumeric")
>   |  |--b
>   |     `--props
>   |        |--choicetext.u (Contains "2015")
>   |        |--type.u (Contains "command")
>   |        |--dir.u (Contains "/home/slitt/tax/2015")
>   |        `--cmd.u (Contains "gnumeric")
>   |--b
>   |  `--props
>   |     |--choicetext.u (Contains "Book orders")
>   |     |--type.u (Contains "command")
>   |     |--dir.u (Contains "/home/slitt/bookorders/2016")
>   |     `--cmd.u (Contains "gnumeric bookords.gnumeric")
>   `--q
>      `--props
>         |--type.u (Contains "return")
>         `--choicetext.u (Contains "Quit")

>
> In the preceding, please remember that every node that's not a leaf is
> a directory, not a file. In the leaves, the filename is outside the
> parentheses, and the file's content can be deduced by the stuff in the
> parenthesis. The filenames of the leaves all have extension .u.
>
> The preceding system is fairly close to ultimate for the machine.
> Finding a given submenu is as simple as following a tree: Almost
> instantaneous.
>
> And the preceding system is human readable, human parsable, and to a
> degree human creatable. But...
>
> Human creatable is relative. Yes, adding a new node to the menu could
> be done quickly with a script. But moving a submenu from one subtree to
> another could take a few minutes,


Isn't it just a single
    mv
command?  Or maybe
    ln -s
if you want the submenu to show up both places?


I actually like using a file hierarchy such as you've outlined. No
special tools needed, except perhaps one to check it for syntacticllly
correct contents.
>
> JSON's a nonstarter. End tags make authoring so slow as to be useless.


The JSON I saw wasn't XML-encoded. I saw no end tags, though it did
have matching curly brackets. See
https://en.wikipedia.org/wiki/JSON#Example


> If I choose choice 2, author into a single file and compile to
> directory/file tree, correctly defined YAML could definitely be both
> fast and readable.


It could still be useful to allow links of some sort to submenus in
other files. That might permit better separation of concerns.

But I suspect having each package include its own pieces of menu into
the maelstrom is more easily done with separate files and conventions
which directories they go into,

>
>
> >
> > Or even Lisp S-expressions.
>
> I don't know how to do that.
>
> >
> > Or, if you waant to be elaborate, which Steve probably doesn't, a few
> > menu-creating macros to be called from Guile.
>
> I made menu-creating macros from Bash one time, and they worked very
> poorly. I've done a tiny bit of Guile. What would make Guile better and
> menu creating macros than any other language? If I did this, someone
> would need to teach my how to handle and output strings in Guile: I can
> only make it work with numbers.


Only that S-expressions aren't all that different from JSON and YAML,
although they have more parentheses and no mandatory intentation. And
if you use it, generalizing to Guile is a natural thing to do. Once I
mentioned S-expressions, it was natural to mentino guile, just for
completeness.

-- hendrik