This document discusses Jed's implementation of yank-pop.

Briefly, yank-pop allows one to use multiple paste buffers in a convenient
way.  Jed's implementation provides 16 such pastebuffers.  The file,
jed/lib/yankpop.sl provides the interface and in particular the following
functions:

     yp_yank                        Ctrl-Y
     yp_yank_pop                    ESC Y
     yp_bkill_word                  ESC DEL
     yp_kill_word                   ESC d
     yp_kill_line                   Ctrl-K
     yp_kill_region                 Ctrl-W
     yp_copy_region_as_kill         ESC W
     
which are meant to be bound to keys.  The second column shows the default
emacs bindings.

It should be obvious from the names of these functions that the can be
grouped into two categories: those that ``kill'' and those that ``yank''.
Associated with these two groups are two active pastebuffers--- one where
text is ``killed'' into and one where previously killed text is ``yanked''
from.  Most of the time these two pastebuffers are equivalent.  That is, a
kill followed by a subsequent yank will result in the yank using the
pastebuffer that was used for the kill.  In fact, whenever something is
killed, the yank pastebuffer automatically is set to the one used for the
kill.  Only the `yp_yank_pop' function can change the active yank
pastebuffer to something different from the active kill one.

The kill functions put what they have killed into the currently active
pastebuffer.  If the last key sequence entered from the keyboard did not
invoke one of the kill functions, the currently active pastebuffer becomes
the next one in the ring of pastebuffers and the killed text is placed in
it.  Otherwise the last key sequence invoked one of the kill functions and
the text from the kill will be appended to the text from the last kill. It
is important to note that the act of killing something sets the pastebuffer
for a subsequent yank to the pastebuffer used for the kill.

   {Terminology: By a ring of pastebuffers, it is meant that when the all
    the pastebuffers become used, the contents of the oldest one will be
    discarded and that one will become the active one.}

This sounds more complex than it really is.  Consider the act of moving
somewhere and pressing the sequence `ESC d' three times in a row to execute
the `yp_kill_word' function.  The first `ESC d' sequence results in deleting
a word and placing it in a new currently active pastebuffer since the
previous key sequence was not a kill sequence.  The other two `ESC d'
sequences follow a kill sequence, namely, the first `ESC d'.  This means
that the next two words will be appended to the first one that was killed.
So, if the `yp_yank' function is invoked via Ctrl-Y, the three killed words
will be pasted back as if they had been killed together.

There are two yank functions: `yp_yank' and `yp_yank_pop'.  The `yp_yank'
function simply pastes text into the buffer from the the current pastebuffer
for yanking.  One the other hand, the `yp_yank_pop' function must immediately
follow the `yp_yank' function or another `yp_yank_pop'.  It will delete (not
kill) the previously pasted text with the text in the pastebuffer that
comes immediately before the current yank pastebuffer in the ring of
pastebuffers.  The current yank pastebuffer will then become the one
selected by `yp_yank_pop'.  Simply stated, the `yp_yank_pop' allows the user
to cycle through the set of pastebuffers.

Again, this is best illustrated with an example.  We will continue with the
previous one.  After killing the three words as previously described,
consider moving to the top of the buffer and deleting the top line by
pressing Ctrl-K to invoke the `yp_kill_line' function.  In doing so, we are
left with two used pastebuffers: the most recent contains the line killed at
the top of the buffer and the other contains the three words that were
killed earlier.  Now move somewhere else and press Ctrl-Y to invoke the
function `yp_yank'.  This results in the pasting of the line killed at the
top of the buffer at the current position.  Now, press `ESC y' to invoke the
`yp_yank_pop' function.  This replaces the the text that was just pasted
with the three words that were kill earlier.   Continue to press the `ESC y'
key sequence.  This will result in cycling between the two pastebuffers and
replacing the text that was most recently pasted with the text from the
other pastebuffer.   The last pastebuffer for the paste will become the
active one for future yanks until the next kill.

