cext: fix potential memory leaks of list items appended with PyList_Append
Also reduce the duplication in the tricky code that uses PyList_Append by
extracting it into a function `pylist_append_owned`.
crecord: enable search hotkeys (
issue6834)
The keys I chose here should be similar to less/vim keybindings, which
should fit the overall keybinding theme of crecord.
crecord: add handle(next|prev)search functions
These are now just simple wrappers around `searchdirection`
crecord: add a searchdirection function
If a regex has already been previously set, this function handles the
UI elements of searching again forward or backward.
crecord: add a handlesearch function
This function sets up some of the UI, such as getting the search
string from the user and displaying results or their absence.
crecord: add a showsearch function
This function takes a regex and searches either forward or backward,
moving the current item to the found item, if any, and unfolding the relevant context.
crecord: add a default regex to curseschunkselector
Whether there is a regex to search or not will affect if we can find
the next or the previous search hit.
crecord: add `content` properties to all nodes
In order to have a unified API of what can be searched, let's provide
a `content` property to each node type. This way we can search
filenames, context headers (e.g. containing function names, if
deducible from patch context) or changed lines themselves.
crecord: update uiheader docstring
There's no need to move anything to patch.py. The uiheader class only
has methods relevant to crecord and overrides __getattr__ in order to
use `patch.header` objects as a sort of mixin.
crecord: add skipfolded param to previtem
This just simplifies the API a bit so it matches `nextitem` and I
can handle both nextitem and previtem symmetrically.