rider2emacs
What?
rider2emacs is a command-line utility which translates JetBrains Rider invocations to emacsclient invocations.
Why?
The Unity game engine editor only officially supports four IDEs/editors: MonoDevelop, Visual Studio, Visual Studio Code, and JetBrains Rider. If and only if the Unity editor is configured to open source files in one of these editors will it generate sln and csproj files for your code. If you want to use any other editor, including the best text editor, Emacs, with the OmniSharp LSP, you must convince Unity that you're using one of the four editors listed above.
It gets worse: support for each of the above editors each generate project/solution files completely differently from one another, and the ability for OnniSharp to correctly interpret these project and solution files varies just as much. The best of the bunch seems to be the Rider project generation.
Why not just use a shell script or something?
Making this a shell script would more or less make this impossible for Windows users. My first shot at this was done in C for portability reasons and to reduce the dependency tree. However, the amount of *printf*
calls, string manipulation, and platform-specific code required for what is on paper a very simple shim made me uncomfortable. Unfortunately, this means that installation of unity.el is slightly more complex than I would have liked.
Usage
Now that I have justified why this tool even needs to exist in the first place, here's how to use it.
Install rider2emacs via:
cargo intall rider2emacs
In Unity, navigate to Edit->Preferences...
, select the External Tools
tab in the left-side pane, and select Browse...
in the drop-down menu for External Script Editor
.
Navigate to the rider2emacs
binary. It will have been installed in $CARGO_INSTALL_ROOT/bin
, which by default is $HOME/.cargo/bin
. See the documentation on cargo install
for more details.
Since the file starts with rider
, Unity will be tricked into thinking that it's actually JetBrains Rider. Congratulations! Any source files you open via Unity should now open in Emacs via emacsclient
. Ensure you have the Emacs daemon running. See "(emacs)Emacs Server", accessible in the Emacs manual via {C-h r}
under "Advanced Features".
Troubleshooting
emacsclient
(or emacsclientw.exe
on Windows) must be in your $PATH
for rider2emacs
to correctly invoke it. On non-Windows platforms, emacsclient
is invoked via /bin/sh
so that environment variables set in your .profile
and similar are taken into account. This is important on macOS, which does not provide a robust way to set $PATH
for a GUI session, unlike Linux/FreeBSD.