Move splitlines_like_git to a more appropriate home
This commit is contained in:
parent
ffa8c1c498
commit
7acc6bdeb8
@ -1,7 +1,10 @@
|
|||||||
from typing import List, Optional, Tuple
|
|
||||||
|
from typing import Callable, List, Optional, Tuple
|
||||||
|
|
||||||
from .collect import Segment
|
from .collect import Segment
|
||||||
|
|
||||||
|
def splitlines_like_git(raw: bytes, callback: Callable[[memoryview], None]) -> None: ...
|
||||||
|
|
||||||
def split_with_highlights(
|
def split_with_highlights(
|
||||||
line: str, truncate_points: List[int], fg_highlights: List[Segment],
|
line: str, truncate_points: List[int], fg_highlights: List[Segment],
|
||||||
bg_highlight: Optional[Segment]
|
bg_highlight: Optional[Segment]
|
||||||
|
|||||||
@ -8,11 +8,9 @@ import shutil
|
|||||||
import subprocess
|
import subprocess
|
||||||
from typing import Dict, Iterator, List, Optional, Sequence, Tuple, Union
|
from typing import Dict, Iterator, List, Optional, Sequence, Tuple, Union
|
||||||
|
|
||||||
from kitty.fast_data_types import splitlines_like_git
|
|
||||||
|
|
||||||
from . import global_data
|
from . import global_data
|
||||||
from .collect import lines_for_path
|
from .collect import lines_for_path
|
||||||
from .diff_speedup import changed_center
|
from .diff_speedup import changed_center, splitlines_like_git
|
||||||
|
|
||||||
left_lines: Tuple[str, ...] = ()
|
left_lines: Tuple[str, ...] = ()
|
||||||
right_lines: Tuple[str, ...] = ()
|
right_lines: Tuple[str, ...] = ()
|
||||||
|
|||||||
@ -175,6 +175,39 @@ split_with_highlights(PyObject *self UNUSED, PyObject *args) {
|
|||||||
#undef NEXT_TRUNCATE_POINT
|
#undef NEXT_TRUNCATE_POINT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
splitlines_like_git(PyObject *self UNUSED, PyObject *args) {
|
||||||
|
char *raw; Py_ssize_t sz;
|
||||||
|
PyObject *callback;
|
||||||
|
if (!PyArg_ParseTuple(args, "y#O", &raw, &sz, &callback)) return NULL;
|
||||||
|
while (sz > 0 && (raw[sz-1] == '\n' || raw[sz-1] == '\r')) sz--;
|
||||||
|
PyObject *mv, *ret;
|
||||||
|
#define CALLBACK \
|
||||||
|
mv = PyMemoryView_FromMemory(raw + start, i - start, PyBUF_READ); \
|
||||||
|
if (mv == NULL) return NULL; \
|
||||||
|
ret = PyObject_CallFunctionObjArgs(callback, mv, NULL); \
|
||||||
|
Py_DECREF(mv); \
|
||||||
|
if (ret == NULL) return NULL; \
|
||||||
|
Py_DECREF(ret); start = i + 1;
|
||||||
|
|
||||||
|
Py_ssize_t i = 0, start = 0;
|
||||||
|
for (; i < sz; i++) {
|
||||||
|
switch (raw[i]) {
|
||||||
|
case '\n':
|
||||||
|
CALLBACK; break;
|
||||||
|
case '\r':
|
||||||
|
CALLBACK;
|
||||||
|
if (i + 1 < sz && raw[i+1] == '\n') { i++; start++; }
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (start < sz) {
|
||||||
|
i = sz; CALLBACK;
|
||||||
|
}
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_resources(void) {
|
free_resources(void) {
|
||||||
free(line_buffer.buf); line_buffer.buf = NULL; line_buffer.capacity = 0; line_buffer.pos = 0;
|
free(line_buffer.buf); line_buffer.buf = NULL; line_buffer.capacity = 0; line_buffer.pos = 0;
|
||||||
@ -183,6 +216,7 @@ free_resources(void) {
|
|||||||
static PyMethodDef module_methods[] = {
|
static PyMethodDef module_methods[] = {
|
||||||
{"changed_center", (PyCFunction)changed_center, METH_VARARGS, ""},
|
{"changed_center", (PyCFunction)changed_center, METH_VARARGS, ""},
|
||||||
{"split_with_highlights", (PyCFunction)split_with_highlights, METH_VARARGS, ""},
|
{"split_with_highlights", (PyCFunction)split_with_highlights, METH_VARARGS, ""},
|
||||||
|
{"splitlines_like_git", (PyCFunction)splitlines_like_git, METH_VARARGS, ""},
|
||||||
{NULL, NULL, 0, NULL} /* Sentinel */
|
{NULL, NULL, 0, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1535,4 +1535,3 @@ def expand_ansi_c_escapes(test: str) -> str: ...
|
|||||||
def update_tab_bar_edge_colors(os_window_id: int) -> bool: ...
|
def update_tab_bar_edge_colors(os_window_id: int) -> bool: ...
|
||||||
def mask_kitty_signals_process_wide() -> None: ...
|
def mask_kitty_signals_process_wide() -> None: ...
|
||||||
def is_modifier_key(key: int) -> bool: ...
|
def is_modifier_key(key: int) -> bool: ...
|
||||||
def splitlines_like_git(raw: bytes, callback: Callable[[memoryview], None]) -> None: ...
|
|
||||||
|
|||||||
@ -196,42 +196,9 @@ parse_input_from_terminal(PyObject *self UNUSED, PyObject *args) {
|
|||||||
#undef CALL
|
#undef CALL
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
|
||||||
splitlines_like_git(PyObject *self UNUSED, PyObject *args) {
|
|
||||||
char *raw; Py_ssize_t sz;
|
|
||||||
PyObject *callback;
|
|
||||||
if (!PyArg_ParseTuple(args, "y#O", &raw, &sz, &callback)) return NULL;
|
|
||||||
while (sz > 0 && (raw[sz-1] == '\n' || raw[sz-1] == '\r')) sz--;
|
|
||||||
PyObject *mv, *ret;
|
|
||||||
#define CALLBACK \
|
|
||||||
mv = PyMemoryView_FromMemory(raw + start, i - start, PyBUF_READ); \
|
|
||||||
if (mv == NULL) return NULL; \
|
|
||||||
ret = PyObject_CallFunctionObjArgs(callback, mv, NULL); \
|
|
||||||
Py_DECREF(mv); \
|
|
||||||
if (ret == NULL) return NULL; \
|
|
||||||
Py_DECREF(ret); start = i + 1;
|
|
||||||
|
|
||||||
Py_ssize_t i = 0, start = 0;
|
|
||||||
for (; i < sz; i++) {
|
|
||||||
switch (raw[i]) {
|
|
||||||
case '\n':
|
|
||||||
CALLBACK; break;
|
|
||||||
case '\r':
|
|
||||||
CALLBACK;
|
|
||||||
if (i + 1 < sz && raw[i+1] == '\n') { i++; start++; }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (start < sz) {
|
|
||||||
i = sz; CALLBACK;
|
|
||||||
}
|
|
||||||
Py_RETURN_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyMethodDef module_methods[] = {
|
static PyMethodDef module_methods[] = {
|
||||||
METHODB(parse_input_from_terminal, METH_VARARGS),
|
METHODB(parse_input_from_terminal, METH_VARARGS),
|
||||||
METHODB(read_command_response, METH_VARARGS),
|
METHODB(read_command_response, METH_VARARGS),
|
||||||
METHODB(splitlines_like_git, METH_VARARGS),
|
|
||||||
{NULL, NULL, 0, NULL} /* Sentinel */
|
{NULL, NULL, 0, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user