mirror of
https://github.com/qvacua/vimr.git
synced 2024-12-01 01:32:04 +03:00
Use API to vim command
This commit is contained in:
parent
7aeb809f86
commit
91dbba75b5
@ -47,8 +47,6 @@ typedef NS_ENUM(NSInteger, NeoVimServerMsgId) {
|
|||||||
|
|
||||||
typedef NS_ENUM(NSInteger, NeoVimAgentMsgId) {
|
typedef NS_ENUM(NSInteger, NeoVimAgentMsgId) {
|
||||||
NeoVimAgentMsgIdAgentReady = 0,
|
NeoVimAgentMsgIdAgentReady = 0,
|
||||||
NeoVimAgentMsgIdCommand,
|
|
||||||
NeoVimAgentMsgIdCommandOutput,
|
|
||||||
NeoVimAgentMsgIdInput,
|
NeoVimAgentMsgIdInput,
|
||||||
NeoVimAgentMsgIdInputMarked,
|
NeoVimAgentMsgIdInputMarked,
|
||||||
NeoVimAgentMsgIdDelete,
|
NeoVimAgentMsgIdDelete,
|
||||||
|
@ -66,8 +66,6 @@ static CFDataRef local_server_callback(CFMessagePortRef local, SInt32 msgid, CFD
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
case NeoVimAgentMsgIdCommandOutput: return data_sync(data, outputCondition, neovim_vim_command_output);
|
|
||||||
|
|
||||||
case NeoVimAgentMsgIdSelectWindow: return data_sync(data, outputCondition, neovim_select_window);
|
case NeoVimAgentMsgIdSelectWindow: return data_sync(data, outputCondition, neovim_select_window);
|
||||||
|
|
||||||
case NeoVimAgentMsgIdScroll: return data_sync(data, outputCondition, neovim_scroll);
|
case NeoVimAgentMsgIdScroll: return data_sync(data, outputCondition, neovim_scroll);
|
||||||
@ -76,8 +74,6 @@ static CFDataRef local_server_callback(CFMessagePortRef local, SInt32 msgid, CFD
|
|||||||
|
|
||||||
case NeoVimAgentMsgIdResize: return data_sync(data, outputCondition, neovim_resize);
|
case NeoVimAgentMsgIdResize: return data_sync(data, outputCondition, neovim_resize);
|
||||||
|
|
||||||
case NeoVimAgentMsgIdCommand: return data_sync(data, outputCondition, neovim_vim_command);
|
|
||||||
|
|
||||||
case NeoVimAgentMsgIdInput: return data_sync(data, outputCondition, neovim_vim_input);
|
case NeoVimAgentMsgIdInput: return data_sync(data, outputCondition, neovim_vim_input);
|
||||||
|
|
||||||
case NeoVimAgentMsgIdInputMarked: return data_sync(data, outputCondition, neovim_vim_input_marked_text);
|
case NeoVimAgentMsgIdInputMarked: return data_sync(data, outputCondition, neovim_vim_input_marked_text);
|
||||||
|
@ -15,10 +15,8 @@ extern void start_neovim(NSInteger width, NSInteger height, NSArray<NSString *>
|
|||||||
|
|
||||||
extern void neovim_select_window(void **argv);
|
extern void neovim_select_window(void **argv);
|
||||||
extern void neovim_scroll(void **argv);
|
extern void neovim_scroll(void **argv);
|
||||||
extern void neovim_vim_command_output(void **argv);
|
|
||||||
extern void neovim_escaped_filenames(void **argv);
|
extern void neovim_escaped_filenames(void **argv);
|
||||||
extern void neovim_resize(void **argv);
|
extern void neovim_resize(void **argv);
|
||||||
extern void neovim_vim_command(void **argv);
|
|
||||||
|
|
||||||
extern void neovim_vim_input(void **argv);
|
extern void neovim_vim_input(void **argv);
|
||||||
extern void neovim_vim_input_marked_text(void **argv);
|
extern void neovim_vim_input_marked_text(void **argv);
|
||||||
|
@ -744,34 +744,6 @@ void neovim_select_window(void **argv) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void neovim_vim_command_output(void **argv) {
|
|
||||||
work_and_write_data_sync(argv, ^NSData *(NSData *data) {
|
|
||||||
NSString *input = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
|
||||||
|
|
||||||
Error err = ERROR_INIT;
|
|
||||||
String commandOutput = nvim_command_output(vim_string_from(input), &err);
|
|
||||||
char_u *output = (char_u *) commandOutput.data;
|
|
||||||
|
|
||||||
// FIXME: handle err.set == true
|
|
||||||
NSString *result = nil;
|
|
||||||
if (output == NULL) {
|
|
||||||
WLOG("vim command output is null");
|
|
||||||
} else if (ERROR_SET(&err)) {
|
|
||||||
WLOG("vim command output for '%s' was not successful: %s", input.cstr, err.msg);
|
|
||||||
} else {
|
|
||||||
result = [[NSString alloc] initWithCString:(const char *) output
|
|
||||||
encoding:NSUTF8StringEncoding];
|
|
||||||
}
|
|
||||||
|
|
||||||
NSData *resultData = result == nil ? nil : [NSKeyedArchiver archivedDataWithRootObject:result];
|
|
||||||
|
|
||||||
[result release];
|
|
||||||
[input release];
|
|
||||||
|
|
||||||
return resultData;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void neovim_escaped_filenames(void **argv) {
|
void neovim_escaped_filenames(void **argv) {
|
||||||
work_and_write_data_sync(argv, ^NSData *(NSData *data) {
|
work_and_write_data_sync(argv, ^NSData *(NSData *data) {
|
||||||
NSArray *fileNames = [NSKeyedUnarchiver unarchiveObjectWithData:data];
|
NSArray *fileNames = [NSKeyedUnarchiver unarchiveObjectWithData:data];
|
||||||
@ -798,23 +770,6 @@ void neovim_resize(void **argv) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void neovim_vim_command(void **argv) {
|
|
||||||
work_and_write_data_sync(argv, ^NSData *(NSData *data) {
|
|
||||||
NSString *input = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
|
||||||
|
|
||||||
Error err = ERROR_INIT;
|
|
||||||
nvim_command(vim_string_from(input), &err);
|
|
||||||
|
|
||||||
if (ERROR_SET(&err)) {
|
|
||||||
WLOG("ERROR while executing command %s: %s", input.cstr, err.msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
[input release];
|
|
||||||
|
|
||||||
return nil;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void neovim_vim_input(void **argv) {
|
void neovim_vim_input(void **argv) {
|
||||||
work_and_write_data_sync(argv, ^NSData *(NSData *data) {
|
work_and_write_data_sync(argv, ^NSData *(NSData *data) {
|
||||||
NSString *input = [[[NSString alloc] initWithData:data
|
NSString *input = [[[NSString alloc] initWithData:data
|
||||||
|
@ -37,7 +37,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
- (bool)runLocalServerAndNeoVimWithWidth:(NSInteger)width height:(NSInteger)height;
|
- (bool)runLocalServerAndNeoVimWithWidth:(NSInteger)width height:(NSInteger)height;
|
||||||
|
|
||||||
- (NSURL *)pwd;
|
- (NSURL *)pwd;
|
||||||
- (void)vimCommand:(NSString *)string;
|
|
||||||
|
|
||||||
- (void)vimInput:(NSString *)string;
|
- (void)vimInput:(NSString *)string;
|
||||||
- (void)vimInputMarkedText:(NSString *)markedText;
|
- (void)vimInputMarkedText:(NSString *)markedText;
|
||||||
@ -52,9 +51,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
- (void)scrollHorizontal:(NSInteger)horiz vertical:(NSInteger)vert at:(Position)position;
|
- (void)scrollHorizontal:(NSInteger)horiz vertical:(NSInteger)vert at:(Position)position;
|
||||||
- (void)selectWindow:(NeoVimWindow *)window;
|
- (void)selectWindow:(NeoVimWindow *)window;
|
||||||
|
|
||||||
// WAITS
|
|
||||||
- (NSString * _Nullable)vimCommandOutput:(NSString *)string;
|
|
||||||
|
|
||||||
- (void)focusGained:(bool)gained;
|
- (void)focusGained:(bool)gained;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -268,24 +268,6 @@ static CFDataRef local_server_callback(CFMessagePortRef local __unused, SInt32 m
|
|||||||
return pwd;
|
return pwd;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)vimCommand:(NSString *)string {
|
|
||||||
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
[self sendMessageWithId:NeoVimAgentMsgIdCommand data:data expectsReply:NO];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)vimCommandOutput:(NSString *)string {
|
|
||||||
NSData *data = [self sendMessageWithId:NeoVimAgentMsgIdCommandOutput
|
|
||||||
data:[string dataUsingEncoding:NSUTF8StringEncoding]
|
|
||||||
expectsReply:YES];
|
|
||||||
|
|
||||||
if (data == nil) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSString *result = [NSKeyedUnarchiver unarchiveObjectWithData:data];
|
|
||||||
return [result stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)vimInput:(NSString *)string {
|
- (void)vimInput:(NSString *)string {
|
||||||
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
|
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
|
||||||
[self sendMessageWithId:NeoVimAgentMsgIdInput data:data expectsReply:NO];
|
[self sendMessageWithId:NeoVimAgentMsgIdInput data:data expectsReply:NO];
|
||||||
|
@ -133,7 +133,7 @@ extension NeoVimView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func vimOutput(of command: String) -> String {
|
public func vimOutput(of command: String) -> String {
|
||||||
return self.agent.vimCommandOutput(command) ?? ""
|
return self.nvim.commandOutput(str: command) ?? ""
|
||||||
}
|
}
|
||||||
|
|
||||||
public func cursorGo(to position: Position) {
|
public func cursorGo(to position: Position) {
|
||||||
|
@ -59,9 +59,9 @@ extension NeoVimView {
|
|||||||
|
|
||||||
self.nvim.connect()
|
self.nvim.connect()
|
||||||
|
|
||||||
self.agent.vimCommand("set mouse=a")
|
self.nvim.setOption(name: "mouse", value: .string("a"))
|
||||||
self.agent.vimCommand("set title")
|
self.nvim.setOption(name: "title", value: .bool(true))
|
||||||
self.agent.vimCommand("set termguicolors")
|
self.nvim.setOption(name: "termguicolors", value: .bool(true))
|
||||||
|
|
||||||
if noErrorDuringInitialization == false {
|
if noErrorDuringInitialization == false {
|
||||||
self.logger.fault("There was an error launching neovim.")
|
self.logger.fault("There was an error launching neovim.")
|
||||||
|
@ -139,7 +139,7 @@ public class NeoVimView: NSView,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
self.agent.vimCommandOutput("cd \(escapedCwd)")
|
self.nvim.command(command: "cd \(escapedCwd)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user