GithubHelp home page GithubHelp logo

rogual / neovim-dot-app Goto Github PK

View Code? Open in Web Editor NEW
1.1K 24.0 62.0 873 KB

Mac OS X GUI for Neovim

Shell 1.15% Objective-C 3.41% C++ 13.75% Objective-C++ 73.68% Makefile 0.40% Python 2.96% Vim Script 4.66%

neovim-dot-app's Introduction

OS X GUI for Neovim

License

This source code is distributed under the terms of the GNU General Public License, version 3:

http://www.gnu.org/licenses/gpl-3.0.html

Features

What's Done

Text editing, mouse support, tabs, clipboard, Mac menus, font selection, font size adjustments, confirm-on-close, multiple windows.

Still to do

See the list of issues.

Pull requests are welcome, and greatly appreciated!

Contributing

See here.

Compiling

Prerequisites

  • Neovim.app compiles on OS X 10.9 to 10.14.
  • You'll need to install Xcode and its command-line tools.
  • Homebrew isn't required but it's an easy way to install the rest of the dependencies.

Dependencies

SCons

$ brew install scons

MsgPack-C

$ brew install msgpack

A Neovim binary

$ brew tap neovim/homebrew-neovim
$ brew install --HEAD neovim

To compile:

$ make

This will look for a Neovim executable on your PATH. To specify an executable to use, just set the NVIM environment variable, e.g.:

$ NVIM=/path/to/nvim make

When the .app bundle is created, Vim's runtime files will be copied into it. By default, the build script asks Vim where its runtime files are, and Vim will probably say they're somewhere under /usr.

If you're compiling your own Neovim, and you don't want to install the runtime files system-wide, the build script can copy the runtime files directly from your neovim checkout. Just set VIM when compiling, e.g.:

$ VIM=/path/to/your/neovim/checkout make

If you're setting one of these options, you'll most likely want to set both.

Problems Compiling?

  • error: no member named 'ext' in 'msgpack::object::union_type'

This means your msgpack is out of date. Try:

brew uninstall msgpack
brew update
brew install msgpack
  • 'msgpack.hpp' file not found
  • ld: library not found for -lmsgpack

Homebrew installs things into /usr/local, but the compiler doesn't look there unless you've run:

xcode-select --install

so try doing that!

Running the Tests

$ build/test

Q&A

I'm having Python problems

Neovim uses the first Python it finds on your PATH. If you've launched Neovim from anywhere other than a terminal, it will only see your system PATH, which probably doesn't have that fancy new version of Python you've installed on it.

To point Neovim at the Python installation you want to use, put this in your .nvimrc:

let g:python_host_prog='/path/to/python'

neovim-dot-app's People

Contributors

baileyparker avatar bambu avatar basilesimon avatar bfulkers avatar bulkan avatar davidosomething avatar dbanetto avatar fibo avatar hboon avatar james2doyle avatar jbaum98 avatar jltisland avatar jocelynmallon avatar josephholsten avatar jrolfs avatar kitten avatar mikew avatar mikker avatar randy3k avatar ridiculousfish avatar rogual avatar sfuller avatar snatchev avatar tarqd avatar thenotary avatar tvon avatar velrok avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neovim-dot-app's Issues

Can't input unicode characters

Many unicode characters can't be input or even displayed. For example, when I paste 日本語 I see 日本___ (_ represents blank space). Typing with kotoeri input yields nihongo (actual keys pressed), while input from kana table or character viewer don't register anything. In a directory with an existing folder named 日本語 the ls command shows the same as when I attempt to paste (日本___). European accents I can paste and display but not type.

This is what happens when I drag-select text that originally read 日本___:
screen shot 2015-04-13 at 4 25 30 pm

No issues with nvim launched from the shell, i.e. I can type, paste, display all unicode characters fine.

YouCompleteMe with Homebrew Python causes errors

I have added the let g:python_host_prog='/usr/local/bin/python' to the top of my .nvimrc. However, when I start Neovim.app, I get a message telling me that Python quit unexpectedly while using the Python plug-in.. Clicking on the report button shows the report below, which implies that Neovim.app is still using system python. However, after I dismiss the error message, I can use python and it's the HomeBrew python that is used.

If I remove let g:python_host_prog='/usr/local/bin/python' from my .nvimrc, the error message disappears. However, I cannot use python and YCM begins complaining, as the system default python is used.

This issued happens only in neovim-dot-app when YCM is used. Without, YCM everything goes smoothly. If I use nvim inside terminal, with the same .nvimrc no error is displayed.

Process:               Python [27469]
Path:                  /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
Identifier:            Python
Version:               2.7.6 (2.7.6)
Code Type:             X86-64 (Native)
Parent Process:        Python [27464]
Responsible:           Neovim [27459]
User ID:               501

PlugIn Path:             /usr/local/Frameworks/Python.framework/Versions/2.7/Python
PlugIn Identifier:       org.python.python
PlugIn Version:          2.7.9, [c] 2004-2014 Python Software Foundation. (2.7.9)

Date/Time:             2015-04-11 23:35:09.988 +0300
OS Version:            Mac OS X 10.10.3 (14D131)
Report Version:        11
Anonymous UUID:        89877AE2-DF0F-88C8-691F-96E2F2DA771D


Time Awake Since Boot: 13000 seconds

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000

Application Specific Information:
abort() called



*****************A HUGE BACKTRACE IF NEEDED I WILL SEND IT*******************

Error building

After following all of the instructions, I get this:

In file included from src/client.cc:7:
In file included from src/client.h:11:
In file included from src/rpc.h:6:
src/vimtypes.h:15:22: error: no member named 'ext' in 'msgpack::object::union_type'
        assert(o.via.ext.type() == type_id);
               ~~~~~ ^
/usr/include/assert.h:93:25: note: expanded from macro 'assert'
    (__builtin_expect(!(e), 0) ? __assert_rtn(__func__, __FILE__, __LINE__, #e) : (void)0)
                        ^
In file included from src/client.cc:7:
In file included from src/client.h:11:
In file included from src/rpc.h:6:
src/vimtypes.h:16:20: error: no member named 'ext' in 'msgpack::object::union_type'
        id = o.via.ext.data()[0];
             ~~~~~ ^
src/client.cc:45:14: error: no viable overloaded '='
    unpacked = msgpack::unpacked();
    ~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~
/usr/local/include/msgpack/unpack.hpp:41:7: note: candidate function (the implicit copy assignment operator) not viable: expects an l-value for 1st argument
class unpacked {
      ^
src/client.cc:58:22: error: no matching function for call to 'get'
            int id = std::get<1>(response);
                     ^~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:114:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:119:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(const array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:124:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:599:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:607:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(const pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:617:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>&& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:713:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:722:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(const tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:731:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>&& __t) _NOEXCEPT
^
src/client.cc:63:30: error: no matching function for call to 'get'
                rpc->error = std::get<2>(response);
                             ^~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:114:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:119:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(const array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:124:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:599:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:607:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(const pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:617:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>&& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:713:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:722:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(const tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:731:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>&& __t) _NOEXCEPT
^
src/client.cc:64:30: error: no matching function for call to 'get'
                rpc->value = std::get<3>(response);
                             ^~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:114:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:119:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(const array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:124:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:599:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:607:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(const pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:617:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>&& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:713:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:722:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(const tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:731:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>&& __t) _NOEXCEPT
^
src/client.cc:76:34: error: no matching function for call to 'get'
            std::string method = std::get<1>(note_data);
                                 ^~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:114:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:119:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(const array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:124:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:599:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:607:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(const pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:617:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>&& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:713:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:722:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(const tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:731:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>&& __t) _NOEXCEPT
^
src/client.cc:77:36: error: no matching function for call to 'get'
            msgpack::object args = std::get<2>(note_data);
                                   ^~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:114:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:119:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(const array<_Tp, _Size>&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__tuple:124:1: note: candidate template ignored: could not match 'array' against 'tuple'
get(array<_Tp, _Size>&&) _NOEXCEPT;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:599:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:607:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(const pair<_T1, _T2>& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:617:1: note: candidate template ignored: could not match 'pair' against 'tuple'
get(pair<_T1, _T2>&& __p) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:713:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:722:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(const tuple<_Tp...>& __t) _NOEXCEPT
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/tuple:731:1: note: candidate template ignored: could not match 'std::__1::tuple' against 'msgpack::type::tuple'
get(tuple<_Tp...>&& __t) _NOEXCEPT
^
8 errors generated.
scons: *** [build/client.o] Error 1
make: *** [all] Error 2

Text stays same pixel size when moving between retina and non-retina displays

neovim dot app - non-retina to retina
Above is a screenshot of a window that was opened on a non-retina display and moved to a retina display.

neovim dot app - retina to non-retina
Above is a screenshot of a window that was opened on a retina display and moved to a non-retina display.

In both cases the cursor behaves correctly for the resized window, but all text is incorrectly sized,

Font Antialiasing

Your screenshots look like they are cleaner, but when I look at Neovim.app vs MacVim.app with the same font selected, the Neovim ones look far more "fuzzy" like they are antialiased. Is that something that can be disabled?

Accept stdin through command-line

Accept stdin to a new buffer (tab/split/... depends on a setting/option) through command line (maybe with #65?). It would be nice if I can do:

$ git diff | neovimapp

and the diff will be opened in a buffer. Vim's - argument might be optional.

Slow redrawing

I had a look at why NeoVim.app doesn't feel as responsive as MacVim or terminal nvim. It turns out the bottleneck is the redraw code.

Here's how redrawing works now:

The view has a member NSImage *mCanvas. When Vim tells us to draw some stuff, we:

  1. [mCanvas lockFocus]
  2. Draw things. If this includes scrolling, we also unlock/lock the canvas for each scroll call, otherwise the canvas doesn't update properly for some reason.
  3. [mCanvas unlockFocus]
  4. [view display]

When we call display, Cocoa calls our view's drawRect method, which copies the canvas to the screen using [mCanvas drawInRect:...]

Why is this slow?

lockFocus (NSImage) is very slow — it appears to copy and convert the entire image — so we can't keep calling it every redraw, let alone multiple times per redraw.

Possible Solutions

NSGraphicsContext

lockFocus is really just a convenience method that sets the current graphics context to one that will draw to the image. If we managed our own graphics context we might be able to do this more efficiently. I had a go at keeping our own NSImageRepresentation and NSGraphicsContext inside the view, but I couldn't get Cocoa to draw anything that way.

The NSGraphicsContext docs are well below Apple's normal (dire) standards, though, so it's possible I was doing totally the wrong thing.

If anyone picks this up and ends up reading these docs, save yourself some hair-pulling and ignore the paragraph about graphics contexts being saved on a stack. It's utter horseshit: the only way to set the current graphics context is with setCurrentContext. The save/restore methods seem to only affect state within the current context.

CoreImage

Maybe look into this. If we go this way we can use filters to draw the cursor properly too

Do all rendering in drawRect

We give up trying to render to a buffer. Instead, when redraw calls come in from Vim, we add them to a queue, call setNeedsDisplay, and only decode the calls inside drawRect. This seems like it might better fit the “cocoa way” of doing things, but it does mean we'd need to copy the entire msgpack object when we receive it, and right now I don't know how to do that in msgpack (object data is stored in a separate buffer whose lifetime is tied to that of the unpacker object).

Other thoughts

This should be simple. All we want to do is render to an offscreen buffer then blit it to the screen when it's time to redraw the view, without doing any copying, resizing, format conversion, etc.

Other people's notes on offscreen drawing:

Setting locale, environment variables

The issue I am experiencing is described here fish-shell/fish-shell#277. This can be worked around by setting LC_ALL in one's fish config however it is "better" if the variables can be set with the terminal emulator. Example:

nvim in iTerm

fish> nvim
nvim> :terminal
nvim-terminal> locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

Neovim.app launched with open

fish> open -a Neovim
Neovim.app> :terminal
Neovim.app-terminal> locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

Neovim.app launched from desktop

Neovim.app> :terminal
Neovim.app-terminal> locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

Emacs.app has a similar issue which led to the creation of the exec-path-from-shell. Without it, the exec-path in Emacs depends on the system-wide settings in a plist (depending on which OS X version).

Would it be better to automatically adopt the configuration of the user's login environment at launch, set environment variables manually (as TextMate does), or leave it entirely up each program's own configs? The first might be closer to the expected behavior while the last requires no changes.

Build failing on master

Hi there,

I tried building from latest, 12f3ca9cfb, at this time and I received the following error:

VIM=/usr/local/share/nvim NVIM=/usr/local/bin/nvim scons -Q
g++ -o build/view.o -c -std=c++11 -g -Wno-deprecated-register -Ibuild -Isrc src/view.mm
g++ -o build/Neovim.app/Contents/MacOS/Neovim build/client.o build/process.o build/rpc.o build/vim.o build/vimtypes.o build/app.o build/font.o build/input.o build/keys.o build/main.o build/menu.o build/redraw.o build/view.o -lmsgpack -framework Cocoa -framework Carbon
sh makeicons.sh build/Neovim.app/Contents/Resources/Neovim.icns res/Neovim.png
/Users/richeyryan/neovim-dot-app/res/NeoVim.png
  /Users/richeyryan/neovim-dot-app/build/temp.iconset/icon_16x16.png
/Users/richeyryan/neovim-dot-app/res/NeoVim.png
  /Users/richeyryan/neovim-dot-app/build/temp.iconset/[email protected]
/Users/richeyryan/neovim-dot-app/res/NeoVim.png
  /Users/richeyryan/neovim-dot-app/build/temp.iconset/icon_32x32.png
/Users/richeyryan/neovim-dot-app/res/NeoVim.png
  /Users/richeyryan/neovim-dot-app/build/temp.iconset/[email protected]
/Users/richeyryan/neovim-dot-app/res/NeoVim.png
  /Users/richeyryan/neovim-dot-app/build/temp.iconset/icon_128x128.png
/Users/richeyryan/neovim-dot-app/res/NeoVim.png
  /Users/richeyryan/neovim-dot-app/build/temp.iconset/[email protected]
/Users/richeyryan/neovim-dot-app/res/NeoVim.png
  /Users/richeyryan/neovim-dot-app/build/temp.iconset/icon_256x256.png
/Users/richeyryan/neovim-dot-app/res/NeoVim.png
  /Users/richeyryan/neovim-dot-app/build/temp.iconset/[email protected]
/Users/richeyryan/neovim-dot-app/res/NeoVim.png
  /Users/richeyryan/neovim-dot-app/build/temp.iconset/icon_512x512.png
Install file: "/usr/local/bin/nvim" as "build/Neovim.app/Contents/Resources/nvim"
Install file: "res/nvimrc" as "build/Neovim.app/Contents/Resources/nvimrc"
Install directory: "/usr/local/share/nvim/runtime" as "build/Neovim.app/Contents/Resources/runtime"
g++ -o build/tests/main.o -c -std=c++11 -g -Wno-deprecated-register -Ibuild -Isrc src/tests/main.mm
g++ -o build/test build/tests/main.o build/keys.o -lmsgpack -framework Cocoa -framework Carbon
richeyryan@s139-111 ~/neovim-dot-app (master)*$ make
VIM=/usr/local/share/nvim NVIM=/usr/local/bin/nvim scons -Q
g++ -o build/view.o -c -std=c++11 -g -Wno-deprecated-register -Ibuild -Isrc src/view.mm
src/view.mm:197:40: error: use of undeclared identifier 'NSCompositeDifference'
    NSRectFillUsingOperation(viewRect, NSCompositeDifference);
                                       ^
1 error generated.
scons: *** [build/view.o] Error 1
make: *** [all] Error 2

It builds if you change it back to NSRectFill like in 1a148bf143ef4aa13089b6573c11781ca2570eab but it just launches with a blank screen.

I don't know much about Cocoa stuff so I can't provide too much insight but let me know if you need anything else.

Thanks

Font line-height not being respected?

It appears the font is being rendered with extra line margins. The result is rows that are taller than they should be.

On the left is NeoVim.app, and on the right is iTerm2. Both are configured (independent of guifont) to use DroidSansMono.

screen shot 2015-03-26 at 7 35 57 am

As you can see the line height in NeoVim.app is awkward looking.

Weird Font Rendering Issues

Seems I can see any fonts being rendered, until random types of redraw events take place.

Neovim in terminal (looks fine):
terminal neovim

Neovim in Neovim dot app (broken):
neovim dot app

If I try to enter a command, I see the cursor move around, but no text:
neovim command

And finally, if I load a file, I still get nothing, however if I use ctrl - e to scroll, the text appears:
text shows

Also, this is with default nvim settings, I have no .nvimrc being loaded.

Can not open files from shell

When trying to open a file from command using open -a Neovim FILENAME i'm getting the following error alter:
The document “maybe.h” could not be opened. Neovim cannot open files in the “C header code” format.

screen shot 2015-03-29 at 21 42 12

Minor issue: repo named .app

This is more of just a nuisance, but by naming the repo .app when doing a default git clone without providing an alternative name for the folder or else running mv on it, OS X by default will think it is an app. If it was neovim-app it might work better.

OS X tab styles

Was it intentional to keep the console style tabs, or it's a temporary solution? IMHO it will look better with standard OS tabs.

PS: Great job with this lightweight vim client :)

Ability to remove, remap default Menu mappings

It would be nice to have something like macmenu for MacVim

For instance if you would like, to remove or remap default menu mapping in MacVim you can do like so:

macmenu File.Print key=<nop>

Case sensitive file system

It doesn't compile out of the box on a case-sensitive file system. The fix is too easy (to create a pull request):

diff --git a/SConstruct b/SConstruct
index 396ab6c..d0cfc48 100644
--- a/SConstruct
+++ b/SConstruct
@@ -62,6 +62,6 @@ else:

 env.Command(
     'build/Neovim.app/Contents/Resources/Neovim.icns',
-    'res/Neovim.png',
+    'res/NeoVim.png',
     'sh makeicons.sh $TARGET $SOURCE'
 )

Compilation fails on master

Hi there,

Can't seem to be able to compile the latest master. I went back and at 1a148bf is when I can successfully compile.

NVIM 0.0.0-alpha+201503270525 (compiled Mar 31 2015 16:41:18)
msgpack-c: 1.0.1

System Log

Mar 31 16:57:28 spock com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.system): Caller not allowed to perform action: open.81325, action = service submission, code = 1: Operation not permitted, uid = 501, euid = 501, gid = 20, egid = 20, asid = 100005
Mar 31 16:57:29 spock com.apple.xpc.launchd[1] (com.apple.ReportCrash[81338]): Endpoint has been activated through legacy launch(3) APIs. Please switch to XPC or bootstrap_check_in(): com.apple.ReportCrash

nvim crash log

<tuple> missing on OS X 10.8.5

When running make, this happens:

shandris :: ~/git/neovim-dot-app ‹master*› % make
VIM=/usr/local/Cellar/neovim/HEAD/share/nvim NVIM=/usr/local/bin/nvim scons -Q
g++ -o build/client.o -c -std=c++11 -g -Wno-deprecated-register -Ibuild -Isrc src/client.cc
src/client.cc:2:10: fatal error: 'tuple' file not found
#include <tuple>
         ^
1 error generated.
scons: *** [build/client.o] Error 1
make: *** [all] Error 2

I don't really know much about c++. I've been googling around and tried the following

  • Upgrade all my homebrew packages
  • Change -std=c++11 to -std=c++0x
  • Use g++ instead of clang
  • Change the offending header to ```#include <tr1/tuple.hpp>
  • Change the header to #include "boost/tuple/tuple.hpp"
    • That made the error vanish from client.cc, but instead it then happened in /usr/local/include/msgpack/cpp_config.hpp
  • Update my XCode and Command Line Tools (although I can't get the newest one on 10.8)

clang --version says Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Does that happen because my xcode is too old? Any pointers what I could try next?

App exits after a keypress

I've compiled it with NVIM=/usr/local/bin/nvim make, but when I open the application, the screen is blank (and it's not picking up my nvimrc) and if I press any key it exits.

Neovim homebrew formula

I don't use OS X, so please just close this if I misunderstood how things work.

Neovim has a homebrew formula, so maybe you can simplify the setup instructions. You could probably also add a formula to this repo in a similar fashion (don't know if that makes sense with .apps).

And a heads up: when neovim/neovim#1927 is merged, your build script will break (replaces use of $VIM/$VIMRUNTIME with $NVIM/$NVIMRUNTIME).

Colour space differs from MacVim and Terminal

Neovim.app’s colour space does not match that of other GUI apps, the resultant effect with a light, mid contrast theme like Solarized light being a washed out look. In the screenshot below, the right hand window is MacVim. Its colour space corresponds to that used by Terminal.app when configured to use Solarized as ANSI colours. The left hand window is Neovim.app, using the same config and colour theme, looking distinctly lighter:

Neovim.app vs. MacVim

For reference, colour code for the light background:

  • Screen rendering of MacVim and Terminal.app: #fef7e3
  • Screen rendering of Neovim.app: #fef7e8

(note none of these exactly matches the Solarized Base3 colour definition of #fdf6e3 – the point here is not that OS X colour rendering has its quirks, but that Neovim.app deviates from the otherwise, er, consistently quirky behaviour).

Neovim.app 814cf2b, OS X 10.10.2

Cursor shape

I'm not sure if this is something to do with neovim or neovim.app
How do I change the cursor shape to be like in (Mac)Vim (first pict at the top)?

Cursor

EDIT: if I run nvim from the command line (iTerm2), I can see the block cursor.

Mouse scroll wheel broken

It seems the click-count patches to enable double/triple/etc. click events broke mouse wheel scrolling.

You can verify that scrolling worked fine prior by resetting to commit ce1b99c

No bold fonts used even if available

In the below screenshot, using identical configurations, Neovim.app displays the “NORMAL” status string in a non-bold weight, while MacVim uses the bold weight defined by the status line theme; this can be easily confirmed by inspecting the respective areas with a screen loupe (like xScope):

neovim app vs macvim

– for the record, the Neovim TUI displays the status string in bold without complaining.

Neovim.app 814cf2b, OS X 10.10.2, Menlo for Powerline font

Font rendering off

First things first: awesome work, I cannot wait to see where this is going!

Neovim.app’s font rendering is not producing the same results as other OS X apps: In the screenshot below, compare MacVim (left) and Neovim (right), both using the Powerline version of Menlo at 12 pt:

Ignoring the difference in line height already mentioned in #4, you will notice that:

macvim neovim app font rendering

  • while MacVim’s font rendering looks as expected on OS X, Neovim.app makes the beefy Menlo look positively wispy
  • Neovim.app is unable to show italics and bold font variants (which exist and are used by MacVim)

Note this is true independently of the font used – I also tried stock Menlo and CamingoCode, with the same overall result.

Redraw sluggish

First: congrats on the strong start. This project was the first of the many gui projects I actually got up and running without any hickups.

Unfortunately, it is very sluggish in redrawing. Any chance of speeding that up somehow?

unable to compile

I have uninstalled msgpack via brew uninstall msgpack, brew update and then brew install msgpack
but I'm still unable to compile:

src/client.cc:5:10: fatal error: 'msgpack.hpp' file not found
#include <msgpack.hpp>
         ^
1 error generated.
scons: *** [build/client.o] Error 1
make: *** [all] Error 2

fatal error: 'msgpack.hpp' file not found

after following the instructions to brew install msgpack my msgpack.hpp is located at /usr/local/Cellar/msgpack/0.5.9/include/msgpack.hpp

and yet when I run make

$ make
VIM=/usr/local/Cellar/neovim/HEAD/share/nvim NVIM=/usr/local/bin/nvim scons -Q
Install file: "res/Info.plist" as "build/NeoVim.app/Contents/Info.plist"
g++ -o build/client.o -c -std=c++11 -g -Wno-deprecated-register -Ibuild -Isrc src/client.cc
src/client.cc:5:10: fatal error: 'msgpack.hpp' file not found
#include <msgpack.hpp>
         ^
1 error generated.
scons: *** [build/client.o] Error 1
make: *** [all] Error 2

my head is at

2d30d73 Fixes & changes to build system

Cmd key mapping doesn't work

this is a feature request in order to support Cmd key
for instance, now

nnoremap <D-r> :echo('run')<cr> 

just don't do anything.

"PowerLine" like patched font support

I see another issue with custom patched fonts, if you use custom patched font for "PowerLine", "lightline" or any other plugin, which prettify your statusline you can see utf8 chars not displayed properly

for instance Status Line with patched font

I use Monaco for Powerline with following setting
set guifont=Monaco\ for\ Powerline:h12

Command-line invocation

It would be nice if NeoVim.app had a command-line invocation in a similar way as vimr and macvim have. Instead of running open -a NeoVim ... do something like neovimapp ... or just neo (not sure if it would not conflict with some other tool though).

System python is run instead of the first python found in path

Not sure if this is a bug in NeoVim.app.

With an empty .vimrc:

$ open NeoVim.app
:py print("hi")
>>> No neovim module found for Python 2.7.6..... 

It works like this though:
$ open Neovim.app/Contents/MacOS/Neovim
:py print("hi")
hi


this seems to pick up that I have a homebrew python installed that has the neovim python installed. 

symbol(s) not found for architecture x86_64 - during compilation

During compilation i've got the following error

NVIM=/usr/local/bin/nvim make                                                                                                                      master (ruby-2.2.0) ] 12:37 PM
VIM=/usr/local/Cellar/neovim/HEAD/share/nvim NVIM=/usr/local/bin/nvim scons -Q
CC -o build/Neovim.app/Contents/MacOS/Neovim build/client.o build/process.o build/rpc.o build/vim.o build/vimtypes.o build/app.o build/font.o build/input.o build/keys.o build/main.o build/menu.o build/redraw.o build/view.o -lmsgpack -framework Cocoa -framework Carbon
Undefined symbols for architecture x86_64:
  "std::runtime_error::what() const", referenced from:
      vtable for msgpack::v1::parse_error in client.o
      vtable for msgpack::v1::unpack_error in client.o
      vtable for msgpack::v1::depth_size_overflow in client.o
      vtable for msgpack::v1::size_overflow in client.o
      vtable for msgpack::v1::map_size_overflow in client.o
      vtable for msgpack::v1::array_size_overflow in client.o
      vtable for msgpack::v1::bin_size_overflow in client.o
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(char const*) const", referenced from:
      Vim::wait() in vim.o
      -[AppDelegate notified:withData:] in app.o
  "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
      std::__1::vector<msgpack::v1::object, std::__1::allocator<msgpack::v1::object> >::__append(unsigned long) in client.o
      std::__1::vector<msgpack::v1::detail::unpack_stack, std::__1::allocator<msgpack::v1::detail::unpack_stack> >::__append(unsigned long) in client.o
      void std::__1::vector<msgpack::v1::detail::unpack_stack, std::__1::allocator<msgpack::v1::detail::unpack_stack> >::__push_back_slow_path<msgpack::v1::detail::unpack_stack>(msgpack::v1::detail::unpack_stack&&) in client.o
      void std::__1::vector<NSEvent*, std::__1::allocator<NSEvent*> >::__push_back_slow_path<NSEvent* const&>(NSEvent* const&&&) in input.o
  "std::__1::__basic_string_common<true>::__throw_length_error() const", referenced from:
      std::__1::enable_if<__is_forward_iterator<char*>::value, void>::type std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init<char*>(char*, char*) in app.o
      std::__1::enable_if<__is_forward_iterator<char*>::value, void>::type std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init<char*>(char*, char*) in input.o
      std::__1::enable_if<__is_forward_iterator<char*>::value, void>::type std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init<char*>(char*, char*) in view.o
  "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in input.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in keys.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in redraw.o
  "std::__1::ios_base::getloc() const", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in input.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in keys.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in redraw.o
  "std::bad_cast::what() const", referenced from:
      vtable for msgpack::v1::type_error in client.o
      vtable for msgpack::v1::type_error in app.o
      vtable for msgpack::v1::type_error in redraw.o
  "std::exception::what() const", referenced from:
      vtable for std::__1::bad_function_call in app.o
      vtable for std::__1::bad_function_call in input.o
  "std::logic_error::logic_error(char const*)", referenced from:
      std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, msgpack::v1::object> > >::at(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in redraw.o
  "std::out_of_range::~out_of_range()", referenced from:
      std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, msgpack::v1::object> > >::at(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in redraw.o
  "std::runtime_error::runtime_error(char const*)", referenced from:
      msgpack::v1::unpack_error::unpack_error(char const*) in client.o
      msgpack::v1::container_size_overflow::container_size_overflow(char const*) in app.o
      msgpack::v1::container_size_overflow::container_size_overflow(char const*) in input.o
      msgpack::v1::container_size_overflow::container_size_overflow(char const*) in view.o
  "std::runtime_error::~runtime_error()", referenced from:
      msgpack::v1::unpack_error::~unpack_error() in client.o
      msgpack::v1::container_size_overflow::~container_size_overflow() in app.o
      msgpack::v1::container_size_overflow::~container_size_overflow() in input.o
      msgpack::v1::container_size_overflow::~container_size_overflow() in view.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)", referenced from:
      -[WindowDelegate windowDidBecomeKey:] in app.o
      -[WindowDelegate windowDidResignKey:] in app.o
      -[AppDelegate newTab] in app.o
      -[AppDelegate nextTab] in app.o
      -[AppDelegate prevTab] in app.o
      -[AppDelegate closeTab] in app.o
      Vim::vim_command(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in app.o
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(unsigned long, char)", referenced from:
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in client.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in app.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in input.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in keys.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in redraw.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*, unsigned long)", referenced from:
      -[VimView(Redraw) doAction:withItem:] in redraw.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*, unsigned long)", referenced from:
      msgpack::v1::operator>>(msgpack::v1::object const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in client.o
      msgpack::v1::operator>>(msgpack::v1::object const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in app.o
      msgpack::v1::operator>>(msgpack::v1::object const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in redraw.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::resize(unsigned long, char)", referenced from:
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in app.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in app.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in input.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in input.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in view.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in view.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::push_back(char)", referenced from:
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in app.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in input.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in view.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      Client::wait() in client.o
      Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::get() const in app.o
      TypedRPC<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::then(std::__1::function<void (Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >)>)::'lambda'(msgpack::v1::object, msgpack::v1::object)::operator()(msgpack::v1::object, msgpack::v1::object) const in app.o
      Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::Maybe(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object) in app.o
      msgpack::v1::type::tuple<int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::type::tuple<VimObject<0> > >::tuple<int, int&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<VimObject<0> >&, false>(int&&, int&&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&&, msgpack::v1::type::tuple<VimObject<0> >&&&) in app.o
      msgpack::v1::type::tuple<int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::type::tuple<> >::tuple<int, int&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<>&, false>(int&&, int&&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&&, msgpack::v1::type::tuple<>&&&) in app.o
      msgpack::v1::type::tuple<int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::type::tuple<int, int, bool> >::tuple<int, int&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<int, int, bool>&, false>(int&&, int&&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&&, msgpack::v1::type::tuple<int, int, bool>&&&) in app.o
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
      Client::wait() in client.o
      std::__1::__tuple_leaf<1ul, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::~__tuple_leaf() in client.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in client.o
      Event::~Event() in client.o
      Event::~Event() in vim.o
      -[WindowDelegate windowDidBecomeKey:] in app.o
      -[WindowDelegate windowDidResignKey:] in app.o
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in app.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in input.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in view.o
  "std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::write(char const*, long)", referenced from:
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in app.o
      msgpack::v1::packer<std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::append_buffer(char const*, unsigned long) in app.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in input.o
      msgpack::v1::packer<std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::append_buffer(char const*, unsigned long) in input.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in redraw.o
      msgpack::v1::packer<std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::append_buffer(char const*, unsigned long) in view.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in input.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in keys.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in redraw.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in input.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in keys.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in redraw.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(double)", referenced from:
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in app.o
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Input) scrollWheel:] in input.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in input.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in redraw.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(unsigned short)", referenced from:
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in app.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in input.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in redraw.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(long long)", referenced from:
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in app.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in input.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in redraw.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(unsigned long long)", referenced from:
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in app.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in input.o
      msgpack::v1::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, msgpack::v1::object const&) in redraw.o
  "std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      RPC* Client::call<msgpack::v1::type::tuple<VimObject<0> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<VimObject<0> >) in app.o
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream() in app.o
      RPC* Client::call<msgpack::v1::type::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<int, int, bool> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<int, int, bool>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >) in app.o
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Input) scrollWheel:] in input.o
      ...
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::sync()", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::imbue(std::__1::locale const&)", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::uflow()", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::setbuf(char*, long)", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsgetn(char*, long)", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsputn(char const*, long)", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::showmanyc()", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::basic_streambuf()", referenced from:
      RPC* Client::call<msgpack::v1::type::tuple<VimObject<0> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<VimObject<0> >) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<int, int, bool> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<int, int, bool>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >) in app.o
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Input) scrollWheel:] in input.o
      -[VimView(Input) sendKeys] in input.o
      ...
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::~basic_streambuf()", referenced from:
      RPC* Client::call<msgpack::v1::type::tuple<VimObject<0> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<VimObject<0> >) in app.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringbuf() in app.o
      RPC* Client::call<msgpack::v1::type::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<int, int, bool> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<int, int, bool>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >) in app.o
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Input) scrollWheel:] in input.o
      ...
  "std::__1::cerr", referenced from:
      Client::wait() in client.o
      Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::get() const in app.o
      Maybe<VimObject<0> >::get() const in app.o
      Maybe<int>::get() const in input.o
  "std::__1::cout", referenced from:
      -[AppDelegate notified:withData:] in app.o
      -[VimView(Redraw) redraw:] in redraw.o
  "std::__1::ctype<char>::id", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in input.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in keys.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in redraw.o
  "std::__1::locale::~locale()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in input.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in keys.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in redraw.o
  "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in input.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in keys.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in redraw.o
  "std::__1::ios_base::init(void*)", referenced from:
      RPC* Client::call<msgpack::v1::type::tuple<VimObject<0> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<VimObject<0> >) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<int, int, bool> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<int, int, bool>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >) in app.o
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Input) scrollWheel:] in input.o
      -[VimView(Input) sendKeys] in input.o
      ...
  "std::__1::ios_base::clear(unsigned int)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in input.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in keys.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in redraw.o
  "std::__1::basic_ios<char, std::__1::char_traits<char> >::~basic_ios()", referenced from:
      RPC* Client::call<msgpack::v1::type::tuple<VimObject<0> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<VimObject<0> >) in app.o
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream() in app.o
      RPC* Client::call<msgpack::v1::type::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<int, int, bool> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<int, int, bool>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >) in app.o
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Input) scrollWheel:] in input.o
      ...
  "std::bad_cast::bad_cast()", referenced from:
      msgpack::v1::type_error::type_error() in client.o
      msgpack::v1::type_error::type_error() in app.o
      msgpack::v1::type_error::type_error() in redraw.o
  "std::bad_cast::~bad_cast()", referenced from:
      msgpack::v1::type_error::~type_error() in client.o
      msgpack::v1::type_error::~type_error() in app.o
      msgpack::v1::type_error::~type_error() in redraw.o
  "std::bad_alloc::bad_alloc()", referenced from:
      msgpack::v1::unpacker::expand_buffer(unsigned long) in client.o
      msgpack::v1::zone::finalizer_array::push_expand(void (*)(void*), void*) in client.o
      msgpack::v1::zone::operator new(unsigned long) in client.o
      msgpack::v1::zone::chunk_list::chunk_list(unsigned long) in client.o
      msgpack::v1::zone::allocate_expand(unsigned long) in client.o
      msgpack::v1::unpacker::unpacker(bool (*)(msgpack::v1::type::object_type, unsigned long, void*), void*, unsigned long, msgpack::v1::unpack_limit const&) in client.o
  "std::bad_alloc::~bad_alloc()", referenced from:
      msgpack::v1::unpacker::expand_buffer(unsigned long) in client.o
      msgpack::v1::zone::finalizer_array::push_expand(void (*)(void*), void*) in client.o
      msgpack::v1::zone::operator new(unsigned long) in client.o
      msgpack::v1::zone::chunk_list::chunk_list(unsigned long) in client.o
      msgpack::v1::zone::allocate_expand(unsigned long) in client.o
      msgpack::v1::unpacker::unpacker(bool (*)(msgpack::v1::type::object_type, unsigned long, void*), void*, unsigned long, msgpack::v1::unpack_limit const&) in client.o
  "std::exception::~exception()", referenced from:
      std::__1::bad_function_call::~bad_function_call() in app.o
      std::__1::bad_function_call::~bad_function_call() in input.o
  "std::terminate()", referenced from:
      ___clang_call_terminate in client.o
      ___clang_call_terminate in rpc.o
      ___clang_call_terminate in app.o
      ___clang_call_terminate in input.o
      ___clang_call_terminate in keys.o
      ___clang_call_terminate in redraw.o
      ___clang_call_terminate in view.o
      ...
  "typeinfo for std::__1::basic_istream<char, std::__1::char_traits<char> >", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "typeinfo for std::__1::basic_ostream<char, std::__1::char_traits<char> >", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "typeinfo for std::__1::basic_iostream<char, std::__1::char_traits<char> >", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      typeinfo for std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      typeinfo for std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
      typeinfo for std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "typeinfo for std::__1::basic_streambuf<char, std::__1::char_traits<char> >", referenced from:
      typeinfo for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      typeinfo for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      typeinfo for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "typeinfo for std::out_of_range", referenced from:
      std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, msgpack::v1::object> > >::at(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in redraw.o
  "typeinfo for std::runtime_error", referenced from:
      typeinfo for msgpack::v1::unpack_error in client.o
      typeinfo for msgpack::v1::container_size_overflow in app.o
      typeinfo for msgpack::v1::container_size_overflow in input.o
      typeinfo for msgpack::v1::container_size_overflow in view.o
  "typeinfo for std::bad_cast", referenced from:
      typeinfo for msgpack::v1::type_error in client.o
      typeinfo for msgpack::v1::type_error in app.o
      typeinfo for msgpack::v1::type_error in redraw.o
  "typeinfo for std::bad_alloc", referenced from:
      GCC_except_table141 in client.o
      msgpack::v1::unpacker::expand_buffer(unsigned long) in client.o
      msgpack::v1::zone::finalizer_array::push_expand(void (*)(void*), void*) in client.o
      msgpack::v1::zone::operator new(unsigned long) in client.o
      msgpack::v1::zone::chunk_list::chunk_list(unsigned long) in client.o
      msgpack::v1::zone::allocate_expand(unsigned long) in client.o
      msgpack::v1::unpacker::unpacker(bool (*)(msgpack::v1::type::object_type, unsigned long, void*), void*, unsigned long, msgpack::v1::unpack_limit const&) in client.o
      ...
  "typeinfo for std::exception", referenced from:
      typeinfo for std::__1::bad_function_call in app.o
      typeinfo for std::__1::bad_function_call in input.o
      GCC_except_table2 in redraw.o
  "vtable for __cxxabiv1::__class_type_info", referenced from:
      typeinfo for std::__1::__function::__base<void (VimObject<0>)> in app.o
      typeinfo for std::__1::__function::__base<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)> in app.o
      typeinfo for std::__1::__function::__base<void (Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >)> in app.o
      typeinfo for TypedRPC<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::then(std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)>)::'lambda'(Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >) in app.o
      typeinfo for std::__1::__function::__base<void (msgpack::v1::object, msgpack::v1::object)> in app.o
      typeinfo for TypedRPC<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::then(std::__1::function<void (Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >)>)::'lambda'(msgpack::v1::object, msgpack::v1::object) in app.o
      typeinfo for std::__1::__function::__base<void (Maybe<VimObject<0> >)> in app.o
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for __cxxabiv1::__si_class_type_info", referenced from:
      typeinfo for msgpack::v1::type_error in client.o
      typeinfo for msgpack::v1::unpack_error in client.o
      typeinfo for msgpack::v1::parse_error in client.o
      typeinfo for msgpack::v1::size_overflow in client.o
      typeinfo for msgpack::v1::depth_size_overflow in client.o
      typeinfo for msgpack::v1::map_size_overflow in client.o
      typeinfo for msgpack::v1::array_size_overflow in client.o
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::ios_base", referenced from:
      RPC* Client::call<msgpack::v1::type::tuple<VimObject<0> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<VimObject<0> >) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<int, int, bool> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<int, int, bool>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >) in app.o
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Input) scrollWheel:] in input.o
      -[VimView(Input) sendKeys] in input.o
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::basic_ios<char, std::__1::char_traits<char> >", referenced from:
      RPC* Client::call<msgpack::v1::type::tuple<VimObject<0> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<VimObject<0> >) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<int, int, bool> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<int, int, bool>) in app.o
      RPC* Client::call<msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, msgpack::v1::type::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >) in app.o
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Input) scrollWheel:] in input.o
      -[VimView(Input) sendKeys] in input.o
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::out_of_range", referenced from:
      std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, msgpack::v1::object> > >::at(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in redraw.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::exception", referenced from:
      std::__1::bad_function_call::bad_function_call() in app.o
      std::__1::bad_function_call::bad_function_call() in input.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "non-virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "non-virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "non-virtual thunk to std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "non-virtual thunk to std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "non-virtual thunk to std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "non-virtual thunk to std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "non-virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "non-virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in app.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in input.o
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in view.o
  "operator delete(void*)", referenced from:
      msgpack::v1::type_error::~type_error() in client.o
      std::__1::__tree<std::__1::__value_type<int, RPC*>, std::__1::__map_value_compare<int, std::__1::__value_type<int, RPC*>, std::__1::less<int>, true>, std::__1::allocator<std::__1::__value_type<int, RPC*> > >::erase(std::__1::__tree_const_iterator<std::__1::__value_type<int, RPC*>, std::__1::__tree_node<std::__1::__value_type<int, RPC*>, void*>*, long>) in client.o
      std::__1::__split_buffer<msgpack::v1::object, std::__1::allocator<msgpack::v1::object>&>::~__split_buffer() in client.o
      std::__1::__vector_base<msgpack::v1::object, std::__1::allocator<msgpack::v1::object> >::~__vector_base() in client.o
      std::__1::__split_buffer<msgpack::v1::detail::unpack_stack, std::__1::allocator<msgpack::v1::detail::unpack_stack>&>::~__split_buffer() in client.o
      msgpack::v1::parse_error::~parse_error() in client.o
      msgpack::v1::unpack_error::~unpack_error() in client.o
      ...
  "operator new(unsigned long)", referenced from:
      std::__1::__split_buffer<msgpack::v1::object, std::__1::allocator<msgpack::v1::object>&>::__split_buffer(unsigned long, unsigned long, std::__1::allocator<msgpack::v1::object>&) in client.o
      std::__1::__split_buffer<msgpack::v1::detail::unpack_stack, std::__1::allocator<msgpack::v1::detail::unpack_stack>&>::__split_buffer(unsigned long, unsigned long, std::__1::allocator<msgpack::v1::detail::unpack_stack>&) in client.o
      std::__1::map<int, RPC*, std::__1::less<int>, std::__1::allocator<std::__1::pair<int const, RPC*> > >::__construct_node_with_key(int const&) in rpc.o
      -[AppDelegate applicationWillFinishLaunching:] in app.o
      std::__1::__function::__func<-[AppDelegate updateWindowTitle]::$_0, std::__1::allocator<-[AppDelegate updateWindowTitle]::$_0>, void (VimObject<0>)>::__clone() const in app.o
      __ZNKSt3__110__function6__funcIZZ32-[AppDelegate updateWindowTitle]ENK3$_0clE9VimObjectILi0EEEUlNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEE_NS8_ISB_EEFvSA_EE7__cloneEv in app.o
      std::__1::function<void (Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >)>::function<TypedRPC<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::then(std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)>)::'lambda'(Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >)>(TypedRPC<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::then(std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)>)::'lambda'(Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >), std::__1::enable_if<(__callable<TypedRPC<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::then(std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)>)::'lambda'(Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >)>::value) && (!(is_same<TypedRPC<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::then(std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)>)::'lambda'(Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >), std::__1::function<void (Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >)> >::value)), void>::type*) in app.o
      ...
  "___cxa_allocate_exception", referenced from:
      msgpack::v1::object const& msgpack::v1::operator>><int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object>(msgpack::v1::object const&, msgpack::v1::type::tuple<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object>&) in client.o
      msgpack::v1::operator>>(msgpack::v1::object const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in client.o
      msgpack::v1::type::detail::convert_integer_sign<int, true>::convert(msgpack::v1::object const&) in client.o
      msgpack::v1::object const& msgpack::v1::operator>><int, int, msgpack::v1::object, msgpack::v1::object>(msgpack::v1::object const&, msgpack::v1::type::tuple<int, int, msgpack::v1::object, msgpack::v1::object>&) in client.o
      msgpack::v1::object const& msgpack::v1::operator>><msgpack::v1::object>(msgpack::v1::object const&, std::__1::vector<msgpack::v1::object, std::__1::allocator<msgpack::v1::object> >&) in client.o
      msgpack::v1::unpacker::expand_buffer(unsigned long) in client.o
      msgpack::v1::zone::finalizer_array::push_expand(void (*)(void*), void*) in client.o
      ...
  "___cxa_begin_catch", referenced from:
      ___clang_call_terminate in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      msgpack::v1::unpacker::expand_buffer(unsigned long) in client.o
      msgpack::v1::unpacker::flush_zone() in client.o
      ___clang_call_terminate in rpc.o
      ___clang_call_terminate in app.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      ...
  "___cxa_call_unexpected", referenced from:
      msgpack::v1::zone::operator new(unsigned long) in client.o
      msgpack::v1::zone::operator delete(void*) in client.o
  "___cxa_end_catch", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in client.o
      msgpack::v1::unpacker::expand_buffer(unsigned long) in client.o
      msgpack::v1::unpacker::flush_zone() in client.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in app.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in app.o
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in input.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in input.o
      ...
  "___cxa_free_exception", referenced from:
      msgpack::v1::unpacker::next(msgpack::v1::unpacked&, bool&) in client.o
      msgpack::v1::detail::unpack_str(msgpack::v1::detail::unpack_user&, char const*, unsigned int, msgpack::v1::object&) in client.o
      int msgpack::v1::detail::context::push_aggregate<msgpack::v1::detail::fix_tag, msgpack::v1::detail::unpack_array>(msgpack::v1::detail::unpack_array const&, unsigned int, msgpack::v1::object&, char const*, unsigned long&) in client.o
      int msgpack::v1::detail::context::push_aggregate<msgpack::v1::detail::fix_tag, msgpack::v1::detail::unpack_map>(msgpack::v1::detail::unpack_map const&, unsigned int, msgpack::v1::object&, char const*, unsigned long&) in client.o
      msgpack::v1::detail::unpack_ext(msgpack::v1::detail::unpack_user&, char const*, unsigned long, msgpack::v1::object&) in client.o
      msgpack::v1::detail::unpack_bin(msgpack::v1::detail::unpack_user&, char const*, unsigned int, msgpack::v1::object&) in client.o
      int msgpack::v1::detail::context::push_aggregate<unsigned short, msgpack::v1::detail::unpack_array>(msgpack::v1::detail::unpack_array const&, unsigned int, msgpack::v1::object&, char const*, unsigned long&) in client.o
      ...
  "___cxa_guard_abort", referenced from:
      -[VimView(Input) mouseEvent:drag:type:] in input.o
  "___cxa_guard_acquire", referenced from:
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Redraw) doAction:withItem:] in redraw.o
  "___cxa_guard_release", referenced from:
      -[VimView(Input) mouseEvent:drag:type:] in input.o
      -[VimView(Redraw) doAction:withItem:] in redraw.o
  "___cxa_pure_virtual", referenced from:
      vtable for std::__1::__function::__base<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)> in app.o
      vtable for std::__1::__function::__base<void (Maybe<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >)> in app.o
      vtable for std::__1::__function::__base<void (msgpack::v1::object, msgpack::v1::object)> in app.o
      vtable for std::__1::__function::__base<void (VimObject<0>)> in app.o
      vtable for std::__1::__function::__base<void (Maybe<VimObject<0> >)> in app.o
      vtable for std::__1::__function::__base<void ()> in input.o
      vtable for std::__1::__function::__base<void (msgpack::v1::object)> in input.o
      ...
  "___cxa_rethrow", referenced from:
      msgpack::v1::unpacker::expand_buffer(unsigned long) in client.o
  "___cxa_throw", referenced from:
      msgpack::v1::object const& msgpack::v1::operator>><int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object>(msgpack::v1::object const&, msgpack::v1::type::tuple<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object>&) in client.o
      msgpack::v1::operator>>(msgpack::v1::object const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in client.o
      msgpack::v1::type::detail::convert_integer_sign<int, true>::convert(msgpack::v1::object const&) in client.o
      msgpack::v1::object const& msgpack::v1::operator>><int, int, msgpack::v1::object, msgpack::v1::object>(msgpack::v1::object const&, msgpack::v1::type::tuple<int, int, msgpack::v1::object, msgpack::v1::object>&) in client.o
      msgpack::v1::object const& msgpack::v1::operator>><msgpack::v1::object>(msgpack::v1::object const&, std::__1::vector<msgpack::v1::object, std::__1::allocator<msgpack::v1::object> >&) in client.o
      msgpack::v1::unpacker::expand_buffer(unsigned long) in client.o
      msgpack::v1::zone::finalizer_array::push_expand(void (*)(void*), void*) in client.o
      ...
  "___gxx_personality_v0", referenced from:
      Client::Client(Process&) in client.o
      Client::~Client() in client.o
      Client::wait() in client.o
      msgpack::v1::type::tuple<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object> msgpack::v1::object::as<msgpack::v1::type::tuple<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object> >() const in client.o
      msgpack::v1::type::tuple<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, msgpack::v1::object>::tuple() in client.o
      std::__1::vector<msgpack::v1::object, std::__1::allocator<msgpack::v1::object> > msgpack::v1::object::as<std::__1::vector<msgpack::v1::object, std::__1::allocator<msgpack::v1::object> > >() const in client.o
      std::__1::vector<msgpack::v1::object, std::__1::allocator<msgpack::v1::object> >::__append(unsigned long) in client.o
      ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
scons: *** [build/Neovim.app/Contents/MacOS/Neovim] Error 1
make: *** [all] Error 2

Way to set line spacing

As noted in #4, linespace is a no-op in the GUI (because it is a no-op in Neovim?). As legibility is both highly subjective and tightly coupled to line spacing and column width, an option to set line spacing in Neovim.app would be helpful..

Multiple window support

App should support having several windows open, each controlling its own Neovim instance.

NSCompositeDifference unknown identifier.

seeing the following block I suppose that NSCompositeDiff is 10.10+ only, though it seem to raise

src/view.mm:199:44: error: use of undeclared identifier 'NSCompositeDifference'
        NSRectFillUsingOperation(viewRect, NSCompositeDifference);

On 10.9.5.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.