[Python-Dev] Re: extending readline functionality (now with patch)
Michal Vitecek
fuf@mageo.cz
Mon, 27 Jan 2003 17:09:47 +0100
--zhXaljGHf11kAtnf
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
and here comes the patch :)
Michal Vitecek wrote:
> hello everyone,
>
> attached is a patch against vanilla 2.2.2, which adds three new
> functions to module readline:
>
> remove_history(pos) -- remove history entry specified by pos
>
> replace_history_entry(pos, line) -- replace history entry specified
> by pos with the given line
>
> get_history_buffer_size() -- get current number of history entries
>
> the libreadline.tex is also modified.
>
>
> thank you for your consideration,
--
fuf (fuf@mageo.cz)
--zhXaljGHf11kAtnf
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="python-2.2.2-ext-readline.diff"
Binary files Python-2.2.2/Doc/lib/.libreadline.tex.swp and Python-2.2.2-ext-readline/Doc/lib/.libreadline.tex.swp differ
diff -uNr Python-2.2.2/Doc/lib/libreadline.tex Python-2.2.2-ext-readline/Doc/lib/libreadline.tex
--- Python-2.2.2/Doc/lib/libreadline.tex Fri Oct 19 03:18:43 2001
+++ Python-2.2.2-ext-readline/Doc/lib/libreadline.tex Mon Jan 27 16:41:57 2003
@@ -100,6 +100,18 @@
Append a line to the history buffer, as if it was the last line typed.
\end{funcdesc}
+\begin{funcdesc}{remove_history}{pos}
+Remove history entry specified by its position from the history.
+\end{funcdesc}
+
+\begin{funcdesc}{replace_history_entry}{pos, line}
+Replace history entry specified by its position with the given line.
+\end{funcdesc}
+
+\begin{funcdesc}{get_history_buffer_length}{}
+Get number of history entries.
+\end{funcdesc}
+
\begin{seealso}
\seemodule{rlcompleter}{Completion of Python identifiers at the
Binary files Python-2.2.2/Modules/.readline.c.swp and Python-2.2.2-ext-readline/Modules/.readline.c.swp differ
diff -uNr Python-2.2.2/Modules/readline.c Python-2.2.2-ext-readline/Modules/readline.c
--- Python-2.2.2/Modules/readline.c Sun Oct 6 07:43:47 2002
+++ Python-2.2.2-ext-readline/Modules/readline.c Mon Jan 27 16:55:55 2003
@@ -302,6 +302,85 @@
add_history(string) -> None\n\
add a line to the history buffer";
+static PyObject *
+py_remove_history(PyObject *self, PyObject *args)
+{
+ int entry_number;
+ HIST_ENTRY *entry;
+ char buf[80];
+
+ if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number)) {
+ return NULL;
+ }
+ entry = remove_history(entry_number);
+ if (!entry) {
+ PyOS_snprintf(buf, sizeof(buf),
+ "No history entry at position %i",
+ entry_number);
+ PyErr_SetString(PyExc_ValueError, buf);
+ return NULL;
+ }
+ if (entry->line)
+ free(entry->line);
+ if (entry->data)
+ free(entry->data);
+ free(entry);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static char doc_remove_history[] = "\
+remove_history(pos) -> None\n\
+removes history entry given by its position in history";
+
+static PyObject *
+py_replace_history_entry(PyObject *self, PyObject *args)
+{
+ int entry_number;
+ char *line;
+ HIST_ENTRY *old_entry;
+ char buf[80];
+
+ if (!PyArg_ParseTuple(args, "is:replace_history_entry", &entry_number, &line)) {
+ return NULL;
+ }
+ old_entry = replace_history_entry(entry_number, line, (void *)NULL);
+ if (!old_entry) {
+ PyOS_snprintf(buf, sizeof(buf),
+ "No history entry at position %i",
+ entry_number);
+ PyErr_SetString(PyExc_ValueError, buf);
+ return NULL;
+ }
+ if (old_entry->line)
+ free(old_entry->line);
+ if (old_entry->data)
+ free(old_entry->data);
+ free(old_entry);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static char doc_replace_history_entry[] = "\
+replace_history_entry(pos, line) -> None\n\
+replaces history entry given by its position with contents of line";
+
+static PyObject *
+py_get_history_buffer_length(PyObject *self, PyObject *args)
+{
+ HISTORY_STATE *history_state;
+
+ if (!PyArg_ParseTuple(args, ":get_history_buffer_length"))
+ return NULL;
+ history_state = history_get_history_state();
+ return Py_BuildValue("i", history_state->length);
+}
+
+static char doc_get_history_buffer_length[] = "\
+get_history_buffer_length() -> length\n\
+returns number of entries in the history";
/* get the tab-completion word-delimiters that readline uses */
@@ -391,8 +470,10 @@
{"set_completer_delims", set_completer_delims,
METH_VARARGS, doc_set_completer_delims},
{"add_history", py_add_history, METH_VARARGS, doc_add_history},
- {"get_completer_delims", get_completer_delims,
- METH_OLDARGS, doc_get_completer_delims},
+ {"remove_history", py_remove_history, METH_VARARGS, doc_remove_history},
+ {"replace_history_entry", py_replace_history_entry, METH_VARARGS, doc_replace_history_entry},
+ {"get_history_buffer_length", py_get_history_buffer_length, METH_VARARGS, doc_get_history_buffer_length},
+ {"get_completer_delims", get_completer_delims, METH_OLDARGS, doc_get_completer_delims},
{"set_startup_hook", set_startup_hook, METH_VARARGS, doc_set_startup_hook},
#ifdef HAVE_RL_PRE_INPUT_HOOK
--zhXaljGHf11kAtnf--