zsh-workers
 help / color / mirror / code / Atom feed
* Re: the function to show a digit argument while it is being typed
       [not found]             ` <m3r5s35on8.fsf@klanderman.net>
@ 2009-12-16 17:31               ` Greg Klanderman
  2009-12-16 18:03                 ` Peter Stephenson
  0 siblings, 1 reply; 3+ messages in thread
From: Greg Klanderman @ 2009-12-16 17:31 UTC (permalink / raw)
  To: Zsh list


[moved from zsh-users]

>>>>> On November 12, 2009 Greg Klanderman <gak@klanderman.net> wrote:

> So I hacked up a proof of concept in C for showing the argument in the
> universal-argument code.. let me know what you think.

Is there any interest in including a cleaned up version of this patch?
Has been working well for me..

Greg

Index: Src/Zle/zle_misc.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_misc.c,v
retrieving revision 1.58
diff -u -r1.58 zle_misc.c
--- Src/Zle/zle_misc.c	24 Apr 2009 09:00:38 -0000	1.58
+++ Src/Zle/zle_misc.c	16 Dec 2009 17:24:03 -0000
@@ -709,16 +709,81 @@
     return 0;
 }
 
+static char *
+baseprefix(char *buf, int base)
+{
+    if (base == 10)
+        buf[0] = (char)0;
+    else if (base == 2)
+        strcpy(buf, "0b");
+    else if (base == 8)
+        strcpy(buf, "0o");
+    else if (base == 16)
+        strcpy(buf, "0x");
+    else
+        sprintf(buf, "%d#", base);
+    return buf;
+}
+
+static char *
+int2string(char *buf, int i, int base)
+{
+    char *b = buf;
+    int p, v;
+
+    if (i < 0) {
+        *b++ = '-';
+        i = -i;
+    }
+
+    baseprefix(b, base);
+    b += strlen(b);
+
+    for (p = 1; p <= i; p *= base)
+        ;
+
+    while (p > 1) {
+        p /= base;
+        v = i / p;
+        i -= v * p;
+        *b++ = (v < 10) ? v+'0' : v-10+'A';
+    }
+
+    *b = (char)0;
+    return buf;
+}
+
+static void
+showarg(int digcnt, int pref, int minus)
+{
+    char msg[100], buf[100], buf2[10];
+
+    if (!digcnt)
+        /* implicit multiplier; will be replaced if digits are entered */
+        sprintf(msg, "arg: (%s)", int2string(buf, 4*zmod.tmult, zmod.base));
+    else if (minus < 0 && digcnt <= 1)
+        /* no digits, just a '-' has been entered so far */
+        sprintf(msg, "arg: -%s", baseprefix(buf2, zmod.base));
+    else
+        /* digits have been entered */
+        sprintf(msg, "arg: %s", int2string(buf, minus * (pref ? pref : 1), zmod.base));
+
+    showmsg(msg);
+    zrefresh();
+}
+
 /**/
 int
 universalargument(char **args)
 {
     int digcnt = 0, pref = 0, minus = 1, gotk;
+
     if (*args) {
 	zmod.mult = atoi(*args);
 	zmod.flags |= MOD_MULT;
 	return 0;
     }
+
     /*
      * TODO: this is quite tricky to do when trying to maintain
      * compatibility between the old input system and Unicode.
@@ -734,16 +799,19 @@
      *
      * Hence for now this remains byte-by-byte.
      */
+    showarg(digcnt, pref, minus);
     while ((gotk = getbyte(0L, NULL)) != EOF) {
 	if (gotk == '-' && !digcnt) {
 	    minus = -1;
 	    digcnt++;
+            showarg(digcnt, pref, minus);
 	} else {
 	    int newdigit = parsedigit(gotk);
 
 	    if (newdigit >= 0) {
 		pref = pref * zmod.base + newdigit;
 		digcnt++;
+                showarg(digcnt, pref, minus);
 	    } else {
 		ungetbyte(gotk);
 		break;
@@ -756,6 +824,8 @@
 	zmod.tmult *= 4;
     zmod.flags |= MOD_TMULT;
     prefixflag = 1;
+    showmsg("");
+    zrefresh();
     return 0;
 }
 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: the function to show a digit argument while it is being typed
  2009-12-16 17:31               ` the function to show a digit argument while it is being typed Greg Klanderman
@ 2009-12-16 18:03                 ` Peter Stephenson
  2009-12-16 18:46                   ` Greg Klanderman
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Stephenson @ 2009-12-16 18:03 UTC (permalink / raw)
  To: Zsh list

Greg Klanderman wrote:
> > So I hacked up a proof of concept in C for showing the argument in the
> > universal-argument code.. let me know what you think.
> 
> Is there any interest in including a cleaned up version of this patch?
> Has been working well for me..

Looks fairly uncontroversial; could you make it generic to all argument
handling (e.g. ESC-1 ESC-4)?  Are there cases where you get clashing use
of the minibuffer?

-- 
Peter Stephenson <pws@csr.com>            Software Engineer
Tel: +44 (0)1223 692070                   Cambridge Silicon Radio Limited
Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, UK


Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: the function to show a digit argument while it is being typed
  2009-12-16 18:03                 ` Peter Stephenson
@ 2009-12-16 18:46                   ` Greg Klanderman
  0 siblings, 0 replies; 3+ messages in thread
From: Greg Klanderman @ 2009-12-16 18:46 UTC (permalink / raw)
  To: zsh-workers

>>>>> On December 16, 2009 Peter Stephenson <pws@csr.com> wrote:

> Looks fairly uncontroversial;

OK, I'll work on this a bit then..

> could you make it generic to all argument handling (e.g. ESC-1 ESC-4)?

Yes, that would be my plan.  This thread originally started with how
to do that with user defined widgets for digit-argument and
negative-argument, and a good solution was found, but the same could
not be done for universal-argument.

> Are there cases where you get clashing use of the minibuffer?

Not that I've noticed.

thanks,
Greg


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-12-16 18:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <10081257897632@webmail89.yandex.ru>
     [not found] ` <237967ef0911101822g5bfcf4fao25fc33ba0a2e8604@mail.gmail.com>
     [not found]   ` <091110204748.ZM28704@torch.brasslantern.com>
     [not found]     ` <237967ef0911102217m1325dc59y8d7388e9f6f21c7b@mail.gmail.com>
     [not found]       ` <091111001419.ZM28852@torch.brasslantern.com>
     [not found]         ` <m3eio56o4i.fsf@klanderman.net>
     [not found]           ` <091111094507.ZM30174@torch.brasslantern.com>
     [not found]             ` <m3r5s35on8.fsf@klanderman.net>
2009-12-16 17:31               ` the function to show a digit argument while it is being typed Greg Klanderman
2009-12-16 18:03                 ` Peter Stephenson
2009-12-16 18:46                   ` Greg Klanderman

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).