mirror of
https://github.com/qvacua/vimr.git
synced 2024-12-25 23:02:35 +03:00
GH-339 Push the current line and col to the UI
This commit is contained in:
parent
fbe1d4a917
commit
491eaa73d4
@ -190,9 +190,15 @@ static void server_ui_cursor_goto(UI *ui __unused, int row, int col) {
|
|||||||
_put_row = row;
|
_put_row = row;
|
||||||
_put_column = col;
|
_put_column = col;
|
||||||
|
|
||||||
int values[] = {row, col, screen_cursor_row(), screen_cursor_column()};
|
int values[] = {
|
||||||
DLOG("%d:%d - %d:%d", values[0], values[1], values[2], values[3]);
|
row, col,
|
||||||
NSData *data = [[NSData alloc] initWithBytes:values length:(4 * sizeof(int))];
|
screen_cursor_row(), screen_cursor_column(),
|
||||||
|
(int) curwin->w_cursor.lnum, curwin->w_cursor.col + 1
|
||||||
|
};
|
||||||
|
|
||||||
|
DLOG("%d:%d - %d:%d - %d:%d", values[0], values[1], values[2], values[3], values[4], values[5]);
|
||||||
|
|
||||||
|
NSData *data = [[NSData alloc] initWithBytes:values length:(6 * sizeof(int))];
|
||||||
[_neovim_server sendMessageWithId:NeoVimServerMsgIdSetPosition data:data];
|
[_neovim_server sendMessageWithId:NeoVimServerMsgIdSetPosition data:data];
|
||||||
[data release];
|
[data release];
|
||||||
}
|
}
|
||||||
@ -639,15 +645,17 @@ void neovim_vim_command_output(void **argv) {
|
|||||||
|
|
||||||
// We don't know why nvim_command_output does not work when the optimization level is set to -Os.
|
// We don't know why nvim_command_output does not work when the optimization level is set to -Os.
|
||||||
// If set to -O0, nvim_command_output works fine... -_-
|
// If set to -O0, nvim_command_output works fine... -_-
|
||||||
// String commandOutput = nvim_command_output((String) {
|
String commandOutput = nvim_command_output((String) {
|
||||||
// .data = (char *) input.cstr,
|
.data = (char *) input.cstr,
|
||||||
// .size = [input lengthOfBytesUsingEncoding:NSUTF8StringEncoding]
|
.size = [input lengthOfBytesUsingEncoding:NSUTF8StringEncoding]
|
||||||
// }, &err);
|
}, &err);
|
||||||
do_cmdline_cmd("redir => v:command_output");
|
// do_cmdline_cmd("redir => v:command_output");
|
||||||
nvim_command(vim_string_from(input), &err);
|
// nvim_command(vim_string_from(input), &err);
|
||||||
do_cmdline_cmd("redir END");
|
// do_cmdline_cmd("redir END");
|
||||||
|
//
|
||||||
|
// char_u *output = get_vim_var_str(VV_COMMAND_OUTPUT);
|
||||||
|
|
||||||
char_u *output = get_vim_var_str(VV_COMMAND_OUTPUT);
|
char_u *output = (char_u *) commandOutput.data;
|
||||||
|
|
||||||
// FIXME: handle err.set == true
|
// FIXME: handle err.set == true
|
||||||
NSString *result = nil;
|
NSString *result = nil;
|
||||||
|
@ -355,6 +355,9 @@ static CFDataRef local_server_callback(CFMessagePortRef local, SInt32 msgid, CFD
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (NSData *)sendMessageWithId:(NeoVimAgentMsgId)msgid data:(NSData *)data expectsReply:(bool)expectsReply {
|
- (NSData *)sendMessageWithId:(NeoVimAgentMsgId)msgid data:(NSData *)data expectsReply:(bool)expectsReply {
|
||||||
|
if (!NSThread.isMainThread) {
|
||||||
|
NSLog(@"THREAD: %@\t msgid: %d\t data: %@", NSThread.currentThread, msgid, data);
|
||||||
|
}
|
||||||
if (_neoVimIsQuitting == 1 && msgid != NeoVimAgentMsgIdQuit) {
|
if (_neoVimIsQuitting == 1 && msgid != NeoVimAgentMsgIdQuit) {
|
||||||
// This happens often, e.g. when exiting full screen by closing all buffers. We try to resize the window after
|
// This happens often, e.g. when exiting full screen by closing all buffers. We try to resize the window after
|
||||||
// the message port has been closed. This is a quick-and-dirty fix.
|
// the message port has been closed. This is a quick-and-dirty fix.
|
||||||
@ -450,9 +453,10 @@ static CFDataRef local_server_callback(CFMessagePortRef local, SInt32 msgid, CFD
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case NeoVimServerMsgIdSetPosition: {
|
case NeoVimServerMsgIdSetPosition: {
|
||||||
int *values = data_to_int_array(data, 4);
|
int *values = data_to_int_array(data, 6);
|
||||||
[_bridge gotoPosition:(Position) { .row = values[0], .column = values[1] }
|
[_bridge gotoPosition:(Position) { .row = values[0], .column = values[1] }
|
||||||
screenCursor:(Position) { .row = values[2], .column = values[3] }];
|
screenCursor:(Position) { .row = values[2], .column = values[3] }
|
||||||
|
currentPosition:(Position) { .row = values[4], .column = values[5] }];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
* 2. NeoVim wants to put the cursor at (row, column).
|
* 2. NeoVim wants to put the cursor at (row, column).
|
||||||
* In case of 1. NeoVim will put in subsequent call. In case of 2. NeoVim seems to flush twice in a row.
|
* In case of 1. NeoVim will put in subsequent call. In case of 2. NeoVim seems to flush twice in a row.
|
||||||
*/
|
*/
|
||||||
- (void)gotoPosition:(Position)position screenCursor:(Position)screenCursor;
|
- (void)gotoPosition:(Position)position screenCursor:(Position)screenCursor currentPosition:(Position)currentPosition;
|
||||||
|
|
||||||
- (void)updateMenu;
|
- (void)updateMenu;
|
||||||
- (void)busyStart;
|
- (void)busyStart;
|
||||||
|
@ -107,6 +107,8 @@ public class NeoVimView: NSView, NeoVimUiBridgeProtocol, NSUserInterfaceValidati
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fileprivate(set) var currentPosition = Position(row: 1, column: 1)
|
||||||
|
|
||||||
fileprivate static let emojis: [UInt32] = [
|
fileprivate static let emojis: [UInt32] = [
|
||||||
0x1F600...0x1F64F,
|
0x1F600...0x1F64F,
|
||||||
0x1F910...0x1F918,
|
0x1F910...0x1F918,
|
||||||
@ -1252,8 +1254,9 @@ extension NeoVimView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func gotoPosition(_ position: Position, screenCursor: Position) {
|
public func gotoPosition(_ position: Position, screenCursor: Position, currentPosition: Position) {
|
||||||
DispatchUtils.gui {
|
DispatchUtils.gui {
|
||||||
|
self.currentPosition = currentPosition
|
||||||
// NSLog("\(#function): \(position), \(screenCursor)")
|
// NSLog("\(#function): \(position), \(screenCursor)")
|
||||||
|
|
||||||
let curScreenCursor = self.grid.screenCursor
|
let curScreenCursor = self.grid.screenCursor
|
||||||
@ -1316,12 +1319,11 @@ extension NeoVimView {
|
|||||||
DispatchUtils.gui {
|
DispatchUtils.gui {
|
||||||
self.grid.scroll(Int(count))
|
self.grid.scroll(Int(count))
|
||||||
self.setNeedsDisplay(region: self.grid.region)
|
self.setNeedsDisplay(region: self.grid.region)
|
||||||
DispatchUtils.gui {
|
// Do not send msgs to agent -> neovim in the delegate method. It causes spinning when you're opening a file with
|
||||||
// We do this in the next tick since we could (and do) call the agent again in the delegate method.
|
// existing swap file.
|
||||||
self.delegate?.scroll()
|
self.delegate?.scroll()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public func highlightSet(_ attrs: CellAttributes) {
|
public func highlightSet(_ attrs: CellAttributes) {
|
||||||
DispatchUtils.gui {
|
DispatchUtils.gui {
|
||||||
|
@ -15,13 +15,11 @@ protocol NeoVimInfoProvider: class {
|
|||||||
extension NeoVimView: NeoVimInfoProvider {
|
extension NeoVimView: NeoVimInfoProvider {
|
||||||
|
|
||||||
func currentLine() -> Int {
|
func currentLine() -> Int {
|
||||||
let output = self.vimOutput(of: "echo line('.')")
|
return self.currentPosition.row
|
||||||
return Int(output) ?? 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func currentColumn() -> Int {
|
func currentColumn() -> Int {
|
||||||
let output = self.vimOutput(of: "echo virtcol('.')")
|
return self.currentPosition.column
|
||||||
return Int(output) ?? 0
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user