Fix hyperlinks not present when fetching text from the history buffer

Fixes #5427
This commit is contained in:
Kovid Goyal 2022-08-28 08:54:53 +05:30
parent e330c38d4a
commit c856d5c058
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
6 changed files with 15 additions and 10 deletions

View File

@ -108,6 +108,9 @@ Detailed list of changes
- Allow ignoring failure to close windows/tabs via rc commands (:disc:`5406`)
- Fix hyperlinks not present when fetching text from the history buffer
(:iss:`5427`)
0.25.2 [2022-06-07]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -990,9 +990,6 @@ def create_test_font_group(sz: float, dpix: float,
class HistoryBuf:
def as_text(self, callback: Callable[[str], None], as_ansi: bool, insert_wrap_markers: bool) -> None:
pass
def pagerhist_as_text(self, upto_output_start: bool = False) -> str:
pass
@ -1143,6 +1140,7 @@ class Screen:
pass
as_text_non_visual = as_text
as_text_alternate = as_text
as_text_for_history_buf = as_text
def cmd_output(self, which: int, callback: Callable[[str], None], as_ansi: bool, insert_wrap_markers: bool) -> bool:
pass

View File

@ -480,13 +480,11 @@ get_line_wrapper(void *x, int y) {
return &glw->line;
}
static PyObject*
as_text(HistoryBuf *self, PyObject *args) {
PyObject*
as_text_history_buf(HistoryBuf *self, PyObject *args, ANSIBuf *output) {
GetLineWrapper glw = {.self=self};
glw.line.xnum = self->xnum;
ANSIBuf output = {0};
PyObject *ans = as_text_generic(args, &glw, get_line_wrapper, self->count, &output);
free(output.buf);
PyObject *ans = as_text_generic(args, &glw, get_line_wrapper, self->count, output);
return ans;
}
@ -523,7 +521,6 @@ static PyMethodDef methods[] = {
METHODB(pagerhist_rewrap, METH_O),
METHODB(pagerhist_as_text, METH_VARARGS),
METHODB(pagerhist_as_bytes, METH_VARARGS),
METHODB(as_text, METH_VARARGS),
METHOD(dirty_lines, METH_NOARGS)
METHOD(push, METH_VARARGS)
METHOD(rewrap, METH_VARARGS)

View File

@ -2744,6 +2744,11 @@ as_text_non_visual(Screen *self, PyObject *args) {
return as_text_generic(args, self, get_range_line, self->lines, &self->as_ansi_buf);
}
static PyObject*
as_text_for_history_buf(Screen *self, PyObject *args) {
return as_text_history_buf(self->historybuf, args, &self->as_ansi_buf);
}
static PyObject*
as_text_generic_wrapper(Screen *self, PyObject *args, get_line_func get_line) {
return as_text_generic(args, self, get_line, self->lines, &self->as_ansi_buf);
@ -3975,6 +3980,7 @@ static PyMethodDef methods[] = {
MND(set_pending_timeout, METH_O)
MND(as_text, METH_VARARGS)
MND(as_text_non_visual, METH_VARARGS)
MND(as_text_for_history_buf, METH_VARARGS)
MND(as_text_alternate, METH_VARARGS)
MND(cmd_output, METH_VARARGS)
MND(tab, METH_NOARGS)

View File

@ -241,6 +241,7 @@ typedef struct SelectionUpdate {
} SelectionUpdate;
void screen_update_selection(Screen *self, index_type x, index_type y, bool in_left_half, SelectionUpdate upd);
bool screen_history_scroll(Screen *self, int amt, bool upwards);
PyObject* as_text_history_buf(HistoryBuf *self, PyObject *args, ANSIBuf *output);
Line* screen_visual_line(Screen *self, index_type y);
unsigned long screen_current_char_width(Screen *self);
void screen_mark_url(Screen *self, index_type start_x, index_type start_y, index_type end_x, index_type end_y);

View File

@ -270,7 +270,7 @@ def as_text(
if add_history:
pht = pagerhist(screen, as_ansi, add_wrap_markers)
h: List[str] = [pht] if pht else []
screen.historybuf.as_text(h.append, as_ansi, add_wrap_markers)
screen.as_text_for_history_buf(h.append, as_ansi, add_wrap_markers)
if h:
if not screen.linebuf.is_continued(0):
h[-1] += '\n'