Fix scrollback pager history not being cleared when clearing the main scrollback buffer
Fixes #1387
This commit is contained in:
parent
0833697c49
commit
718e6fa93d
@ -50,6 +50,9 @@ To update |kitty|, :doc:`follow the instructions <binary>`.
|
||||
|
||||
- macOS: Add a number of common macOS keyboard shortcuts
|
||||
|
||||
- Fix scrollback pager history not being cleared when clearing the
|
||||
main scrollback buffer (:iss:`1387`)
|
||||
|
||||
0.13.3 [2019-01-19]
|
||||
------------------------------
|
||||
|
||||
|
||||
@ -59,6 +59,7 @@ alloc_pagerhist(unsigned int pagerhist_sz) {
|
||||
PagerHistoryBuf *ph;
|
||||
if (!pagerhist_sz) return NULL;
|
||||
ph = PyMem_Calloc(1, sizeof(PagerHistoryBuf));
|
||||
if (!ph) return NULL;
|
||||
ph->maxsz = pagerhist_sz / sizeof(Py_UCS4);
|
||||
ph->bufsize = 1024*1024 / sizeof(Py_UCS4);
|
||||
ph->buffer = PyMem_RawMalloc(1024*1024);
|
||||
@ -66,6 +67,13 @@ alloc_pagerhist(unsigned int pagerhist_sz) {
|
||||
return ph;
|
||||
}
|
||||
|
||||
static inline void
|
||||
free_pagerhist(HistoryBuf *self) {
|
||||
if (self->pagerhist) PyMem_Free(self->pagerhist->buffer);
|
||||
PyMem_Free(self->pagerhist);
|
||||
self->pagerhist = NULL;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
pagerhist_extend(PagerHistoryBuf *ph, size_t minsz) {
|
||||
if (ph->bufsize >= ph->maxsz) return false;
|
||||
@ -77,6 +85,14 @@ pagerhist_extend(PagerHistoryBuf *ph, size_t minsz) {
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline void
|
||||
pagerhist_clear(HistoryBuf *self) {
|
||||
if (!self->pagerhist || !self->pagerhist->maxsz) return;
|
||||
index_type pagerhist_sz = self->pagerhist->maxsz * sizeof(Py_UCS4);
|
||||
free_pagerhist(self);
|
||||
self->pagerhist = alloc_pagerhist(pagerhist_sz);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) {
|
||||
HistoryBuf *self;
|
||||
@ -112,8 +128,7 @@ dealloc(HistoryBuf* self) {
|
||||
PyMem_Free(self->segments[i].line_attrs);
|
||||
}
|
||||
PyMem_Free(self->segments);
|
||||
if (self->pagerhist) PyMem_Free(self->pagerhist->buffer);
|
||||
PyMem_Free(self->pagerhist);
|
||||
free_pagerhist(self);
|
||||
Py_TYPE(self)->tp_free((PyObject*)self);
|
||||
}
|
||||
|
||||
@ -152,8 +167,9 @@ historybuf_mark_line_dirty(HistoryBuf *self, index_type y) {
|
||||
*p |= TEXT_DIRTY_MASK;
|
||||
}
|
||||
|
||||
inline void
|
||||
void
|
||||
historybuf_clear(HistoryBuf *self) {
|
||||
pagerhist_clear(self);
|
||||
self->count = 0;
|
||||
self->start_of_data = 0;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user