Re: [dev] [wmii] wimenu custom completion

From: Kris Maglione <maglione.k_AT_gmail.com>
Date: Tue, 17 Aug 2010 19:19:10 -0400

On Tue, Aug 17, 2010 at 03:56:38PM +0200, LuX wrote:
>OK, let us call:
>- 'post' the last script I have posted, on:
> http://lists.suckless.org/dev/1008/5609.html
>- 'patch' and 'script' the patch and script you posted on:
> http://lists.suckless.org/dev/1008/5610.html
>
>I copied 'post' and 'patch' from the online archive to files in the
>same directory. No luck:
>
>$ patch post patch
>patching file post
>Hunk #1 FAILED at 5.
>Hunk #2 FAILED at 25.
>Hunk #3 FAILED at 46.
>Hunk #4 FAILED at 78.
>4 out of 4 hunks FAILED -- saving rejects to file post.rej
>
>--> Don't waste your time with this, I must be doing some stupid
>mistake somewhere and that's all (I'm not at all used with patching).

Well, broadly speaking... But not stupid so much as wrong. The
white space in the html version is mangled. 'patch -l' would
work, but you'll wind up with a badly formatted result.

>It works, undoubtedly. But…
>
>- The command 'sh script' produces some strange outputs in the
> terminal when I am typing. This might be normal, since what is
> important is that the very last output is the content of the input
> line, which is the case so the script works anyway.

Sorry, remove the line that starts with 'print "read "'.

>Examples with 'script':
>
>Input List displayed by wimenu
>
>'lp ' List of files in current dir
>'lp -' -o media=a4 -o landscape …
>'lp -o ' -o media=a4 -o landscape … --> Good!
>'lp -o m' List of files in current dir containing 'm' --> Bad!
>'lp -o media=a4 ' List of files in current dir

See below.

>'ls ' List of files in $HOME
>'ls -a' Nothing --> Good.
>'ls -a ' Nothing as well --> Bad!
>'ls -a w' List of files in current dir containing 'w'

Ah, I'd missed that. This should fix it:

--- menu_thing 2010-08-17 06:25:53.000000000 -0400
+++ - 2010-08-17 19:09:52.759287656 -0400
@@ -33,7 +33,7 @@
          if (!match($0, /.*[ \t]/))
              # First argument, provide the program list
              update(0, progs)
- else if($NF ~ /^-/)
+ else if($NF ~ /^-/ && !/ $/)
              # If the last argument starts with a -, list
              # options declared in opt instead of files
              update(RLENGTH,

>Good and bad examples with 'post' are almost opposite:
>
>Input List displayed by wimenu
>'lp ' List of files in current dir
>'lp -' -o media=a4 -o landscape …
>'lp -o ' List of files in current dir --> Bad!
>'lp -o m' List of files in current dir containing 'm' --> Bad (logical).
>'lp -o media=a4 ' List of files in current dir

This behavior is achievable, but considerably magnitude more
complex. I've written such completion systems before, but
they're far beyond the scope of this script. However, it's not
as bad as it might seem. For one thing, you can elide the space
after -o, and thus give -omedia=a4. This is perhaps the most
obvious solution. However, in the case of the example you
provided, I don't think it's that important, given that there
are few enough options that you can tab between them without
much trouble.

If you do want the behavior that you suggest, the simplest
approach would be to specify for each object which requires an
argument a shell script to produce the results, such as:

lp:
     -o echo media=a4 landscape sides=two-sided-long-edge sides=two-sided-short-edge number-up=N

The script to make use of it would be fairly simple (the key
would be to check $(NF - 1) above rather than $NF and pass the
part of the line following the option to system()), but I'm not
going to write it at the moment.

-- 
Kris Maglione
Common sense is the collection of prejudices acquired by age 18.
	--Albert Einstein
Received on Wed Aug 18 2010 - 01:19:10 CEST

This archive was generated by hypermail 2.2.0 : Wed Aug 18 2010 - 01:24:02 CEST