From mboxrd@z Thu Jan 1 00:00:00 1970 From: bakul at bitblocks.com (Bakul Shah) Date: Sun, 8 Jul 2018 19:00:31 -0700 Subject: [COFF] Other OSes? In-Reply-To: References: <20180705055650.GA2170@minnie.tuhs.org> <20180708165006.21a7429e@jabberwock.cb.piermont.com> <20180708201151.03aa46c0@jabberwock.cb.piermont.com> Message-ID: <9C710876-D8BC-4CC6-B1A2-2B1F7C066033@bitblocks.com> On Jul 8, 2018, at 5:19 PM, Dan Cross wrote: > > On Sun, Jul 8, 2018 at 8:12 PM Perry E. Metzger wrote: > On Sun, 8 Jul 2018 16:27:54 -0700 Bakul Shah > wrote: > [snip] > > This sort of magic incantation is needed because no one has bothered > > to create a simple library for autocompletion & no standard > > convention has sprung up that a program can use. > > Yes, I know. That's exactly what I'm explaining. Read the URL above. > It describes a quite general mechanism for a program to convey to the > shell, without needing any special binary support, how autocompletion > should work. > > I read that article and it wasn't clear to me that the `--autocomplete` argument sent anything back to the shell. I suppose you could use it with bash/zsh style completion script to get something analogous to context-sensitive help, but it relies on exec'ing the command (clang or whatever) and getting output from it that someone or something can parse and present back to the user in the form of a partial command line; the examples they had seemed to be when invoking from within emacs and an X-based program to build up a command. It wasn't clear to me either. I looked at the clang webpage again and all I see is autocompletion support for clang itself. [In a way this points to the real problem of clang having too many options] > This is rather unlike how TOPS-20 did it, wherein an image was run-up in the user's process (effectively, the program was exec'ed, though under TOPS-20 exec didn't overwrite the image of the currently running program like the shell) and asked about completions. The critical difference is that under TOPS-20 context-sensitive help and completions were provided by the already-runnable/running program. In Unix, the program must be re-exec'd. It's not a terrible model, but it's very different in implementation. When we did cisco CLI support in our router product, syntax for all the commands was factored out. So for example show.ip help IP information show.ip.route help IP routing table exec cmd_showroutes() show.ip.route.ADDR help IP address verify verify_ipaddr() exec cmd_showroutes() etc. This was a closed universe of commands so easy to extend. Perhaps something similar can be done, where in a command src dir you also store allowed syntax. This can be compiled to a syntax tree and attached to the binary using some convention. The cmd binary need not deal with this (except perhaps when help or verify required cmd specific support). I ended up replicating this sort of thing twice since then.