fix(editor): send editor view and cursor position updates when number of document lines changes
closes #162
This commit is contained in:
parent
9f29853cd6
commit
9fc8e3edc3
1 changed files with 12 additions and 10 deletions
|
@ -269,6 +269,7 @@ pub const Editor = struct {
|
||||||
root: ?Buffer.Root = null,
|
root: ?Buffer.Root = null,
|
||||||
primary: CurSel = CurSel.invalid(),
|
primary: CurSel = CurSel.invalid(),
|
||||||
view: View = View.invalid(),
|
view: View = View.invalid(),
|
||||||
|
lines: usize = 0,
|
||||||
matches: usize = 0,
|
matches: usize = 0,
|
||||||
cursels: usize = 0,
|
cursels: usize = 0,
|
||||||
dirty: bool = false,
|
dirty: bool = false,
|
||||||
|
@ -1397,6 +1398,8 @@ pub const Editor = struct {
|
||||||
const root: ?Buffer.Root = self.buf_root() catch null;
|
const root: ?Buffer.Root = self.buf_root() catch null;
|
||||||
const eol_mode = self.buf_eol_mode() catch .lf;
|
const eol_mode = self.buf_eol_mode() catch .lf;
|
||||||
const utf8_sanitized = self.buf_utf8_sanitized() catch false;
|
const utf8_sanitized = self.buf_utf8_sanitized() catch false;
|
||||||
|
const lines = if (root) |root_| root_.lines() else 0;
|
||||||
|
|
||||||
if (token_from(self.last.root) != token_from(root)) {
|
if (token_from(self.last.root) != token_from(root)) {
|
||||||
try self.send_editor_update(self.last.root, root, eol_mode);
|
try self.send_editor_update(self.last.root, root, eol_mode);
|
||||||
self.lsp_version += 1;
|
self.lsp_version += 1;
|
||||||
|
@ -1418,8 +1421,8 @@ pub const Editor = struct {
|
||||||
self.last.cursels = self.cursels.items.len;
|
self.last.cursels = self.cursels.items.len;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!primary.cursor.eql(self.last.primary.cursor))
|
if (lines != self.last.lines or !primary.cursor.eql(self.last.primary.cursor))
|
||||||
try self.send_editor_pos(&primary.cursor);
|
try self.send_editor_pos(lines, &primary.cursor);
|
||||||
|
|
||||||
if (primary.selection) |primary_selection_| {
|
if (primary.selection) |primary_selection_| {
|
||||||
var primary_selection = primary_selection_;
|
var primary_selection = primary_selection_;
|
||||||
|
@ -1433,10 +1436,11 @@ pub const Editor = struct {
|
||||||
} else if (self.last.primary.selection) |_|
|
} else if (self.last.primary.selection) |_|
|
||||||
try self.send_editor_selection_removed();
|
try self.send_editor_selection_removed();
|
||||||
|
|
||||||
if (!self.view.eql(self.last.view))
|
if (lines != self.last.lines or !self.view.eql(self.last.view))
|
||||||
try self.send_editor_view();
|
try self.send_editor_view(lines, self.view);
|
||||||
|
|
||||||
self.last.view = self.view;
|
self.last.view = self.view;
|
||||||
|
self.last.lines = lines;
|
||||||
self.last.primary = primary.*;
|
self.last.primary = primary.*;
|
||||||
self.last.dirty = dirty;
|
self.last.dirty = dirty;
|
||||||
self.last.root = root;
|
self.last.root = root;
|
||||||
|
@ -1444,9 +1448,8 @@ pub const Editor = struct {
|
||||||
self.last.utf8_sanitized = utf8_sanitized;
|
self.last.utf8_sanitized = utf8_sanitized;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_editor_pos(self: *const Self, cursor: *const Cursor) !void {
|
fn send_editor_pos(self: *const Self, lines: usize, cursor: *const Cursor) !void {
|
||||||
const root = self.buf_root() catch return error.Stop;
|
_ = try self.handlers.msg(.{ "E", "pos", lines, cursor.row, cursor.col });
|
||||||
_ = try self.handlers.msg(.{ "E", "pos", root.lines(), cursor.row, cursor.col });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_editor_match(self: *const Self, matches: usize) !void {
|
fn send_editor_match(self: *const Self, matches: usize) !void {
|
||||||
|
@ -1469,9 +1472,8 @@ pub const Editor = struct {
|
||||||
_ = try self.handlers.msg(.{ "E", "sel", "none" });
|
_ = try self.handlers.msg(.{ "E", "sel", "none" });
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_editor_view(self: *const Self) !void {
|
fn send_editor_view(self: *const Self, lines: usize, view: View) !void {
|
||||||
const root = self.buf_root() catch return error.Stop;
|
_ = try self.handlers.msg(.{ "E", "view", lines, view.rows, view.row });
|
||||||
_ = try self.handlers.msg(.{ "E", "view", root.lines(), self.view.rows, self.view.row });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_editor_diagnostics(self: *const Self) !void {
|
fn send_editor_diagnostics(self: *const Self) !void {
|
||||||
|
|
Loading…
Add table
Reference in a new issue