Support in readline bash's operate-and-get-next behavior
This was reported as a wishlist item from the Sage developers, below is the full conversation.
It is a wishlist item for a type of history behavior that GNU readline doesn't offer by default but that is very appreciated by users of Magma (which behaves in this form). From communications by the readline maintainer, apparently this can be implemented client-side, so in principle ipython could offer it, though at this point I don't know how to (haven't looked into it in any detail).
Python's readline does offer the necessary hook:
In : readline.*hook*?
Original email from sage-dev follows:
---------- Forwarded message ----------
From: Kwankyu <email address hidden>
Date: Thu, May 28, 2009 at 5:03 PM
Subject: [sage-devel] A command line feature - operate and get next history line
To: sage-devel <email address hidden>
I got a reply from GNU readline maintainer Chet Ramey to the following
Dear Readline Maintainer,
I am a user of Sage, a computer algebra system relying on GNU readline
library. In Sage FAQ, you can find the following article. (Magma is
another computer algebra system relying on "readline" via IPython)
1. Why is Sage's command history different than Magma's
* QUESTION: Using Sage, I am missing a feature of Magma command
line interface. In Magma, if I enter a line found in history using up
arrow key, and then press down arrow key, then the next line in
history is fetched. This feature allows me to fetch as many successive
lines in history as like. Does Sage(or readline) have a similar
* ANSWER: No, Sage does not have a similar feature. The IPython
command prompt uses the readline library (via pyreadline), which
evidently doesn't support this feature. Magma has its own custom
"readline-like" library, which does support this feature. (Since so
many people have requested this feature, if anybody can figure out how
to implement it, then such an implementation would certainly be
It seems that the only way Sage can have the convenient feature is
that GNU readline library have such a feature in its history facility.
I wish this happens in the new version of the GNU readline library.
Thank you for your attention. Have a nice day.
From Chet Ramey:
The answer is that this is very similar to the operate-
feature bash adds to the readline interface. I am not inclined to add this to
readline in its current form because it manipulates state managed by
the calling application (rl_startup_hook) and requires that state to be
kept between calls to readline(). It's a feature that should be provided
by the calling application -- it's implementation is not complicated.