mirror of
https://github.com/neovim/neovim.git
synced 2025-09-12 06:18:16 +00:00
fix(float): make screen*()
functions respect floating windows
Resolves #19013.
This commit is contained in:
@@ -8035,14 +8035,15 @@ static void f_screenattr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
int c;
|
||||
|
||||
ScreenGrid *grid;
|
||||
int row = (int)tv_get_number_chk(&argvars[0], NULL) - 1;
|
||||
int col = (int)tv_get_number_chk(&argvars[1], NULL) - 1;
|
||||
if (row < 0 || row >= default_grid.rows
|
||||
|| col < 0 || col >= default_grid.cols) {
|
||||
|
||||
screenchar_adjust(&grid, &row, &col);
|
||||
|
||||
if (row < 0 || row >= grid->rows || col < 0 || col >= grid->cols) {
|
||||
c = -1;
|
||||
} else {
|
||||
ScreenGrid *grid = &default_grid;
|
||||
screenchar_adjust_grid(&grid, &row, &col);
|
||||
c = grid->attrs[grid->line_offset[row] + col];
|
||||
}
|
||||
rettv->vval.v_number = c;
|
||||
@@ -8053,14 +8054,15 @@ static void f_screenchar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
int c;
|
||||
|
||||
ScreenGrid *grid;
|
||||
int row = tv_get_number_chk(&argvars[0], NULL) - 1;
|
||||
int col = tv_get_number_chk(&argvars[1], NULL) - 1;
|
||||
if (row < 0 || row >= default_grid.rows
|
||||
|| col < 0 || col >= default_grid.cols) {
|
||||
|
||||
screenchar_adjust(&grid, &row, &col);
|
||||
|
||||
if (row < 0 || row >= grid->rows || col < 0 || col >= grid->cols) {
|
||||
c = -1;
|
||||
} else {
|
||||
ScreenGrid *grid = &default_grid;
|
||||
screenchar_adjust_grid(&grid, &row, &col);
|
||||
c = utf_ptr2char((char *)grid->chars[grid->line_offset[row] + col]);
|
||||
}
|
||||
rettv->vval.v_number = c;
|
||||
@@ -8069,15 +8071,16 @@ static void f_screenchar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
/// "screenchars()" function
|
||||
static void f_screenchars(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
ScreenGrid *grid;
|
||||
int row = tv_get_number_chk(&argvars[0], NULL) - 1;
|
||||
int col = tv_get_number_chk(&argvars[1], NULL) - 1;
|
||||
if (row < 0 || row >= default_grid.rows
|
||||
|| col < 0 || col >= default_grid.cols) {
|
||||
|
||||
screenchar_adjust(&grid, &row, &col);
|
||||
|
||||
if (row < 0 || row >= grid->rows || col < 0 || col >= grid->cols) {
|
||||
tv_list_alloc_ret(rettv, 0);
|
||||
return;
|
||||
}
|
||||
ScreenGrid *grid = &default_grid;
|
||||
screenchar_adjust_grid(&grid, &row, &col);
|
||||
int pcc[MAX_MCO];
|
||||
int c = utfc_ptr2char(grid->chars[grid->line_offset[row] + col], pcc);
|
||||
int composing_len = 0;
|
||||
@@ -8136,14 +8139,17 @@ static void f_screenstring(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
rettv->vval.v_string = NULL;
|
||||
rettv->v_type = VAR_STRING;
|
||||
|
||||
ScreenGrid *grid;
|
||||
int row = tv_get_number_chk(&argvars[0], NULL) - 1;
|
||||
int col = tv_get_number_chk(&argvars[1], NULL) - 1;
|
||||
if (row < 0 || row >= default_grid.rows
|
||||
|| col < 0 || col >= default_grid.cols) {
|
||||
|
||||
screenchar_adjust(&grid, &row, &col);
|
||||
|
||||
if (row < 0 || row >= grid->rows || col < 0 || col >= grid->cols) {
|
||||
return;
|
||||
}
|
||||
ScreenGrid *grid = &default_grid;
|
||||
screenchar_adjust_grid(&grid, &row, &col);
|
||||
|
||||
rettv->vval.v_string = (char *)vim_strsave(grid->chars[grid->line_offset[row] + col]);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user