1
1
mirror of https://github.com/qvacua/vimr.git synced 2024-12-29 00:34:26 +03:00
vimr/NeoVimServer/main.m

64 lines
1.8 KiB
Mathematica
Raw Normal View History

/**
* Tae Won Ha - http://taewon.de - @hataewon
* See LICENSE
*/
2016-10-22 18:25:43 +03:00
@import Foundation;
#import "NeoVimServer.h"
#import "server_globals.h"
2016-08-13 00:45:56 +03:00
#import "Logging.h"
#import "CocoaCategories.h"
NeoVimServer *_neovim_server;
CFRunLoopRef _mainRunLoop;
void observe_parent_termination() {
pid_t parentPID = getppid();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t source = dispatch_source_create(
DISPATCH_SOURCE_TYPE_PROC, (uintptr_t) parentPID, DISPATCH_PROC_EXIT, queue
);
if (source == NULL) {
WLOG("No parent process monitoring...");
return;
}
dispatch_source_set_event_handler(source, ^{
WLOG("Exiting neovim server due to parent termination.");
2017-01-08 21:01:34 +03:00
quit_neovim();
dispatch_source_cancel(source);
});
dispatch_resume(source);
}
int main(int argc, const char *argv[]) {
_mainRunLoop = CFRunLoopGetCurrent();
observe_parent_termination();
@autoreleasepool {
NSArray<NSString *> *arguments = [NSProcessInfo processInfo].arguments;
2016-07-10 15:43:26 +03:00
NSString *remoteServerName = arguments[1];
NSString *localServerName = arguments[2];
NSArray<NSString *> *nvimArgs = argc > 3 ? [arguments subarrayWithRange:NSMakeRange(3, (NSUInteger) (argc - 3))]
: nil;
_neovim_server = [[NeoVimServer alloc] initWithLocalServerName:localServerName
remoteServerName:remoteServerName
nvimArgs:nvimArgs];
DLOG("Started neovim server '%s' with args '%@' and connected it with the remote agent '%s'.",
localServerName.cstr, nvimArgs, remoteServerName.cstr);
[_neovim_server notifyReadiness];
}
2016-07-10 14:51:00 +03:00
CFRunLoopRun();
2017-01-08 21:01:34 +03:00
2017-01-08 23:35:54 +03:00
DLOG("NeoVimServer returning.");
return 0;
}