diff --git a/NeoVimServer/NeoVimServer.m b/NeoVimServer/NeoVimServer.m index fbedc9a6..93a0a61e 100644 --- a/NeoVimServer/NeoVimServer.m +++ b/NeoVimServer/NeoVimServer.m @@ -95,6 +95,8 @@ static CFDataRef local_server_callback(CFMessagePortRef local, SInt32 msgid, CFD case NeoVimAgentMsgIdSetBoolOption: return data_sync(data, outputCondition, neovim_set_bool_option); + case NeoVimAgentMsgIdGetEscapeFileNames: return data_sync(data, outputCondition, neovim_escaped_filenames); + default: break; } @@ -283,17 +285,6 @@ static CFDataRef local_server_callback(CFMessagePortRef local, SInt32 msgid, CFD return [NSData dataWithBytes:&dirty length:sizeof(bool)]; } - case NeoVimAgentMsgIdGetEscapeFileNames: { - NSArray *fileNames = [NSKeyedUnarchiver unarchiveObjectWithData:data]; - NSMutableArray *result = [NSMutableArray new]; - - [fileNames enumerateObjectsUsingBlock:^(NSString* fileName, NSUInteger idx, BOOL *stop) { - [result addObject:server_escaped_filename(fileName)]; - }]; - - return [NSKeyedArchiver archivedDataWithRootObject:result]; - } - default: return nil; } diff --git a/NeoVimServer/server_globals.h b/NeoVimServer/server_globals.h index 17523b1b..07f3b812 100644 --- a/NeoVimServer/server_globals.h +++ b/NeoVimServer/server_globals.h @@ -17,7 +17,6 @@ extern void server_delete(NSInteger count); extern void server_resize(int width, int height); extern void server_vim_input_marked_text(NSString *markedText); extern bool server_has_dirty_docs(); -extern NSString *server_escaped_filename(NSString *filename); extern void server_quit(); extern void neovim_select_window(void **argv); @@ -26,3 +25,4 @@ extern void neovim_buffers(void **argv); extern void neovim_vim_command_output(void **argv); extern void neovim_set_bool_option(void **argv); extern void neovim_get_bool_option(void **argv); +extern void neovim_escaped_filenames(void **argv); diff --git a/NeoVimServer/server_ui.m b/NeoVimServer/server_ui.m index 85f7bfa6..5c5b19c8 100644 --- a/NeoVimServer/server_ui.m +++ b/NeoVimServer/server_ui.m @@ -685,15 +685,6 @@ bool server_has_dirty_docs() { return false; } -NSString *server_escaped_filename(NSString *filename) { - const char *file_system_rep = filename.fileSystemRepresentation; - - char_u *escaped_filename = vim_strsave_fnameescape((char_u *) file_system_rep, 0); - NSString *result = [NSString stringWithCString:(const char *) escaped_filename encoding:NSUTF8StringEncoding]; - xfree(escaped_filename); - - return result; -} static NeoVimBuffer *buffer_for(buf_T *buf) { // To be sure... @@ -949,3 +940,26 @@ void neovim_get_bool_option(void **argv) { return [NSKeyedArchiver archivedDataWithRootObject:@(result)]; }); } + +static NSString *escaped_filename(NSString *filename) { + const char *file_system_rep = filename.fileSystemRepresentation; + + char_u *escaped_filename = vim_strsave_fnameescape((char_u *) file_system_rep, 0); + NSString *result = [NSString stringWithCString:(const char *) escaped_filename encoding:NSUTF8StringEncoding]; + xfree(escaped_filename); + + return result; +} + +void neovim_escaped_filenames(void **argv) { + work_and_write_data_sync(argv, ^NSData *(NSData *data) { + NSArray *fileNames = [NSKeyedUnarchiver unarchiveObjectWithData:data]; + NSMutableArray *result = [NSMutableArray new]; + + [fileNames enumerateObjectsUsingBlock:^(NSString* fileName, NSUInteger idx, BOOL *stop) { + [result addObject:escaped_filename(fileName)]; + }]; + + return [NSKeyedArchiver archivedDataWithRootObject:result]; + }); +}