From 778a73b027509c9c9f70c8dbd184097efeacae43 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Mon, 27 Jan 2003 14:54:31 +0000 Subject: 18139: Improve $killring interface; can now change length. Empty strings in $killring are ignored when yank-popping. Yank-popping is more consistent about looping and using the original cutbuffer. --- Src/Zle/zle_utils.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'Src/Zle/zle_utils.c') diff --git a/Src/Zle/zle_utils.c b/Src/Zle/zle_utils.c index 107ff37ec..28f5647bd 100644 --- a/Src/Zle/zle_utils.c +++ b/Src/Zle/zle_utils.c @@ -38,9 +38,9 @@ struct cutbuffer cutbuf; /* Emacs-style kill buffer ring */ /**/ -struct cutbuffer kring[KRINGCT]; +struct cutbuffer *kring; /**/ -int kringnum; +int kringsize, kringnum; /* Vi named cut buffers. 0-25 are the named buffers "a to "z, and * * 26-34 are the numbered buffer stack "1 to "9. */ @@ -167,10 +167,16 @@ cut(int i, int ct, int dir) cutbuf.buf = ztrdup(""); cutbuf.len = cutbuf.flags = 0; } else if (!(lastcmd & ZLE_KILL)) { - kringnum = (kringnum + 1) % KRINGCT; - if (kring[kringnum].buf) - free(kring[kringnum].buf); - kring[kringnum] = cutbuf; + Cutbuffer kptr; + if (!kring) { + kringsize = KRINGCTDEF; + kring = (Cutbuffer)zcalloc(kringsize * sizeof(struct cutbuffer)); + } else + kringnum = (kringnum + 1) % kringsize; + kptr = kring + kringnum; + if (kptr->buf) + zfree(kptr->buf, kptr->len); + *kptr = cutbuf; cutbuf.buf = ztrdup(""); cutbuf.len = cutbuf.flags = 0; } -- cgit 1.4.1