From f102f50ebeca98365b308463c25eb2caffffba51 Mon Sep 17 00:00:00 2001 From: Utkarsh Maheshwari Date: Sat, 19 May 2018 21:03:17 +0530 Subject: multigrid: Change screen_* functions to grid_* functions --- src/nvim/api/ui_events.in.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 10331fd5c2..5c48cb4804 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -81,6 +81,8 @@ void grid_line(Integer grid, Integer row, Integer col_start, Array data) void grid_scroll(Integer grid, Integer top, Integer bot, Integer left, Integer right, Integer rows, Integer cols) FUNC_API_SINCE(5) FUNC_API_REMOTE_IMPL; +void grid_destroy(Integer grid) + FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; void popupmenu_show(Array items, Integer selected, Integer row, Integer col) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; -- cgit From 01555de2da79eaf6e569e5e6ee7244dbf5f709e5 Mon Sep 17 00:00:00 2001 From: Utkarsh Maheshwari Date: Wed, 6 Jun 2018 02:59:11 +0530 Subject: multigrid: Allow UIs to set grid size different from window size --- src/nvim/api/ui.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index 01f8c9f71c..18befd498f 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -126,7 +126,7 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height, } } - if (ui->ui_ext[kUIHlState]) { + if (ui->ui_ext[kUIHlState] || ui->ui_ext[kUIMultigrid]) { ui->ui_ext[kUILinegrid] = true; } @@ -245,6 +245,23 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, name.data); } +/// Sets the inner "width" and "height" of the window grid identified by +/// "grid" handle. If the grid does not exist, set error. +void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width, + Integer height, Error *error) + FUNC_API_SINCE(4) FUNC_API_REMOTE_ONLY +{ + if (!pmap_has(uint64_t)(connected_uis, channel_id)) { + api_set_error(error, kErrorTypeException, + "UI not attached to channel: %" PRId64, channel_id); + return; + } + + // TODO(utkarshme): Check if grid exists + + ui_grid_resize((GridHandle)grid, (int)width, (int)height); +} + /// Pushes data into UI.UIData, to be consumed later by remote_ui_flush(). static void push_call(UI *ui, const char *name, Array args) { -- cgit From d5754eae020d672b4f6c62b636a56e0d6d56b4dc Mon Sep 17 00:00:00 2001 From: Utkarsh Maheshwari Date: Fri, 15 Jun 2018 02:41:59 +0530 Subject: multigrid: Add win_position event Throttle win_position events --- src/nvim/api/ui_events.in.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 5c48cb4804..8870f39721 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -83,6 +83,9 @@ void grid_scroll(Integer grid, Integer top, Integer bot, FUNC_API_SINCE(5) FUNC_API_REMOTE_IMPL; void grid_destroy(Integer grid) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; +void win_position(Integer win, Integer grid, Integer startrow, + Integer startcol, Integer width, Integer height) + FUNC_API_SINCE(4) FUNC_API_REMOTE_ONLY; void popupmenu_show(Array items, Integer selected, Integer row, Integer col) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; -- cgit From 0432e1586ef0f9dd5e473cee07787ed5bb880570 Mon Sep 17 00:00:00 2001 From: Utkarsh Maheshwari Date: Tue, 19 Jun 2018 11:45:10 +0530 Subject: multigrid: Put everything on default_grid if not ext_multigrid --- src/nvim/api/ui.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index 18befd498f..4f56371633 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -257,9 +257,7 @@ void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width, return; } - // TODO(utkarshme): Check if grid exists - - ui_grid_resize((GridHandle)grid, (int)width, (int)height); + ui_grid_resize((GridHandle)grid, (int)width, (int)height, error); } /// Pushes data into UI.UIData, to be consumed later by remote_ui_flush(). -- cgit From 911b731378954dd0fa0448cc02b95d576cdfc3c5 Mon Sep 17 00:00:00 2001 From: Utkarsh Maheshwari Date: Fri, 17 Aug 2018 17:40:04 +0530 Subject: multigrid: Get rid of global ScreenLines and set_screengrid --- src/nvim/api/vim.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index ecfff1ea8f..82a61b43bd 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -1920,13 +1920,13 @@ Object nvim_get_proc(Integer pid, Error *err) Array nvim__inspect_cell(Integer row, Integer col, Error *err) { Array ret = ARRAY_DICT_INIT; - if (row < 0 || row >= screen_Rows - || col < 0 || col >= screen_Columns) { + if (row < 0 || row >= default_grid.Rows + || col < 0 || col >= default_grid.Columns) { return ret; } - size_t off = LineOffset[(size_t)row] + (size_t)col; - ADD(ret, STRING_OBJ(cstr_to_string((char *)ScreenLines[off]))); - int attr = ScreenAttrs[off]; + size_t off = default_grid.LineOffset[(size_t)row] + (size_t)col; + ADD(ret, STRING_OBJ(cstr_to_string((char *)default_grid.ScreenLines[off]))); + int attr = default_grid.ScreenAttrs[off]; ADD(ret, DICTIONARY_OBJ(hl_get_attr_by_id(attr, true, err))); // will not work first time if (!highlight_use_hlstate()) { -- cgit From 16c3337122955c1e18c5ff69dcb14b61c43c4ac0 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Sat, 8 Sep 2018 10:35:09 +0200 Subject: multigrid: use grid-based coordinates for ext_popupmenu --- src/nvim/api/ui_events.in.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 8870f39721..308d5aaf02 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -87,7 +87,8 @@ void win_position(Integer win, Integer grid, Integer startrow, Integer startcol, Integer width, Integer height) FUNC_API_SINCE(4) FUNC_API_REMOTE_ONLY; -void popupmenu_show(Array items, Integer selected, Integer row, Integer col) +void popupmenu_show(Array items, Integer selected, + Integer row, Integer col, Integer grid) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; void popupmenu_hide(void) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; -- cgit From ba6f9f60addb569aa223f6e245df78741eab5adf Mon Sep 17 00:00:00 2001 From: Utkarsh Maheshwari Date: Fri, 21 Sep 2018 18:14:32 +0530 Subject: multigrid: Fix lint errors --- src/nvim/api/ui.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index 4f56371633..48a4708dbf 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -248,8 +248,8 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, /// Sets the inner "width" and "height" of the window grid identified by /// "grid" handle. If the grid does not exist, set error. void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width, - Integer height, Error *error) - FUNC_API_SINCE(4) FUNC_API_REMOTE_ONLY + Integer height, Error *error) + FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY { if (!pmap_has(uint64_t)(connected_uis, channel_id)) { api_set_error(error, kErrorTypeException, -- cgit From c3e2e40e028b66495a866785afaf1a6d7e5b3a3b Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Thu, 18 Oct 2018 19:06:21 +0200 Subject: multigrid: send win_hide events when changing tabpage --- src/nvim/api/ui_events.in.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 308d5aaf02..48e43061c6 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -85,7 +85,9 @@ void grid_destroy(Integer grid) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; void win_position(Integer win, Integer grid, Integer startrow, Integer startcol, Integer width, Integer height) - FUNC_API_SINCE(4) FUNC_API_REMOTE_ONLY; + FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; +void win_hide(Integer win, Integer grid) + FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; void popupmenu_show(Array items, Integer selected, Integer row, Integer col, Integer grid) -- cgit From f6f8f0ee762aed40586429362b83e5c7d0ca0686 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Fri, 19 Oct 2018 10:42:34 +0200 Subject: multigrid: add msg_scroll_start and msg_scroll_reset events --- src/nvim/api/ui_events.in.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 48e43061c6..90f1d1b2a9 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -83,11 +83,16 @@ void grid_scroll(Integer grid, Integer top, Integer bot, FUNC_API_SINCE(5) FUNC_API_REMOTE_IMPL; void grid_destroy(Integer grid) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; + void win_position(Integer win, Integer grid, Integer startrow, Integer startcol, Integer width, Integer height) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; void win_hide(Integer win, Integer grid) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; +void win_scroll_over_start(void) + FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; +void win_scroll_over_reset(void) + FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; void popupmenu_show(Array items, Integer selected, Integer row, Integer col, Integer grid) -- cgit From db14d78e4f90a0dab64beb569efe0a7d314db4a7 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Sun, 11 Nov 2018 10:33:02 +0100 Subject: multigrid: rename event to win_pos, make grid first --- src/nvim/api/ui_events.in.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 90f1d1b2a9..28beebb9e4 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -84,10 +84,10 @@ void grid_scroll(Integer grid, Integer top, Integer bot, void grid_destroy(Integer grid) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; -void win_position(Integer win, Integer grid, Integer startrow, - Integer startcol, Integer width, Integer height) +void win_pos(Integer grid, Integer win, Integer startrow, + Integer startcol, Integer width, Integer height) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; -void win_hide(Integer win, Integer grid) +void win_hide(Integer grid) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; void win_scroll_over_start(void) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; -- cgit From 47c053cc39c9b3aa78eb4f64ec98c574506729ae Mon Sep 17 00:00:00 2001 From: Utkarsh Maheshwari Date: Thu, 28 Jun 2018 15:35:19 +0530 Subject: multigrid: Add multigrid documentation --- src/nvim/api/ui.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index 48a4708dbf..c374bede99 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -245,8 +245,15 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, name.data); } -/// Sets the inner "width" and "height" of the window grid identified by -/// "grid" handle. If the grid does not exist, set error. +/// Tell nvim to resize a grid. Nvim sends grid_resize event with the +/// requested grid size is within size limits and with maximum allowed size +/// otherwise. +/// +/// On invalid grid handle, fails with error. +/// +/// @param grid The handle of the grid to be changed. +/// @param width The new requested width. +/// @param height The new requested height. void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width, Integer height, Error *error) FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY -- cgit From 1cec5542a83baf04848e37475b9b0b7f50e47284 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Sun, 23 Dec 2018 14:35:23 +0100 Subject: multigrid: reorganize types and global varaibles --- src/nvim/api/private/defs.h | 3 +-- src/nvim/api/ui.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h index 390b7e8363..feca140547 100644 --- a/src/nvim/api/private/defs.h +++ b/src/nvim/api/private/defs.h @@ -6,6 +6,7 @@ #include #include "nvim/func_attr.h" +#include "nvim/types.h" #define ARRAY_DICT_INIT {.size = 0, .capacity = 0, .items = NULL} #define STRING_INIT {.data = NULL, .size = 0} @@ -20,8 +21,6 @@ # define DictionaryOf(...) Dictionary #endif -typedef int handle_T; - // Basic types typedef enum { kErrorTypeNone = -1, diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index c374bede99..4c55a56242 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -264,7 +264,7 @@ void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width, return; } - ui_grid_resize((GridHandle)grid, (int)width, (int)height, error); + ui_grid_resize((handle_T)grid, (int)width, (int)height, error); } /// Pushes data into UI.UIData, to be consumed later by remote_ui_flush(). -- cgit From c778c2e107d7c9453b22e45bf8ec595956ea1538 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Mon, 31 Dec 2018 12:54:57 +0100 Subject: multigrid: API version bump --- src/nvim/api/ui.c | 2 +- src/nvim/api/ui_events.in.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index 4c55a56242..7ba5251c60 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -256,7 +256,7 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, /// @param height The new requested height. void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width, Integer height, Error *error) - FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY + FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY { if (!pmap_has(uint64_t)(connected_uis, channel_id)) { api_set_error(error, kErrorTypeException, diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 28beebb9e4..59a7780651 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -82,17 +82,17 @@ void grid_scroll(Integer grid, Integer top, Integer bot, Integer left, Integer right, Integer rows, Integer cols) FUNC_API_SINCE(5) FUNC_API_REMOTE_IMPL; void grid_destroy(Integer grid) - FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; + FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; void win_pos(Integer grid, Integer win, Integer startrow, Integer startcol, Integer width, Integer height) - FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; + FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; void win_hide(Integer grid) - FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; + FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; void win_scroll_over_start(void) - FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; + FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; void win_scroll_over_reset(void) - FUNC_API_SINCE(5) FUNC_API_REMOTE_ONLY; + FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; void popupmenu_show(Array items, Integer selected, Integer row, Integer col, Integer grid) -- cgit From c72d9ce0a602ba53b99145f64f0d43327a4e3eb3 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Mon, 31 Dec 2018 13:29:58 +0100 Subject: multigrid: rename grid->ScreenLines and other grid arrays --- src/nvim/api/vim.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 82a61b43bd..2a724a85ec 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -1924,9 +1924,9 @@ Array nvim__inspect_cell(Integer row, Integer col, Error *err) || col < 0 || col >= default_grid.Columns) { return ret; } - size_t off = default_grid.LineOffset[(size_t)row] + (size_t)col; - ADD(ret, STRING_OBJ(cstr_to_string((char *)default_grid.ScreenLines[off]))); - int attr = default_grid.ScreenAttrs[off]; + size_t off = default_grid.line_offset[(size_t)row] + (size_t)col; + ADD(ret, STRING_OBJ(cstr_to_string((char *)default_grid.chars[off]))); + int attr = default_grid.attrs[off]; ADD(ret, DICTIONARY_OBJ(hl_get_attr_by_id(attr, true, err))); // will not work first time if (!highlight_use_hlstate()) { -- cgit