diff --git a/Editor/Config.cs b/Editor/Config.cs index d18559b..77b8cff 100644 --- a/Editor/Config.cs +++ b/Editor/Config.cs @@ -9,7 +9,10 @@ namespace NvimUnity public class Config { public string last_project = ""; - public void MergeMissingDefaults(Config defaults) { } +#if UNITY_EDITOR_WIN + public string neovimLocation = "C:\\Program Files\\Neovim\\bin\\nvim.exe"; +#endif + public void MergeMissingDefaults(Config defaults) { } } public static class ConfigManager diff --git a/Editor/NeovimEditor.cs b/Editor/NeovimEditor.cs index f455ce2..b18ef56 100644 --- a/Editor/NeovimEditor.cs +++ b/Editor/NeovimEditor.cs @@ -60,26 +60,32 @@ public bool OpenProject(string path, int line, int column) { if (OS == "Windows") { + +#if UNITY_EDITOR_WIN var psi = new ProcessStartInfo { FileName = defaultApp, - Arguments = $"{path} {line}", + Arguments = $"{path} {line} {config.neovimLocation}", UseShellExecute = true, CreateNoWindow = false, }; if(debugging) UnityEngine.Debug.Log($"[NvimUnity] Executing: {psi.FileName} {psi.Arguments}"); - Process.Start(defaultApp, $"{path} {line}"); + Process.Start(defaultApp, $"{path} {line} {config.neovimLocation}"); +#endif } else { - // Original behavior for other OSes + +#if !UNITY_EDITOR_WIN + // Original behavior for other OSes ProcessStartInfo psi = Utils.BuildProcessStartInfo(defaultApp, path, line); if(debugging) UnityEngine.Debug.Log($"[NvimUnity] Executing in terminal: {psi.FileName} {psi.Arguments}"); Process.Start(psi); - } +#endif + } return true; } catch (Exception ex) @@ -100,7 +106,13 @@ public bool OpenFile(string filePath, int line) { string cmd = $"e +{line} {filePath}"; string nvimArgs = $"--server {Socket} --remote-send \"{cmd}\""; - string nvimPath = Utils.GetNeovimPath(); + string nvimPath = + +#if UNITY_EDITOR_WIN + config.neovimLocation; +#else + Utils.GetNeovimPath(); +#endif var psi = new ProcessStartInfo { @@ -134,7 +146,19 @@ public void OnGUI() } EditorGUILayout.EndHorizontal(); + + +#if UNITY_EDITOR_WIN + EditorGUILayout.BeginHorizontal(); + GUILayout.Label("Neovim location", EditorStyles.boldLabel, GUILayout.Width(250)); + config.neovimLocation = GUILayout.TextField(config.neovimLocation); + if(GUILayout.Button("Browse", GUILayout.Width(80))){ + config.neovimLocation = EditorUtility.OpenFilePanel("Select neovim", "", "exe"); + ConfigManager.SaveConfig(config); + } + EditorGUILayout.EndHorizontal(); +#endif GUILayout.Space(10); } @@ -189,7 +213,7 @@ public bool TryGetInstallationForPath(string editorPath, out CodeEditor.Installa return true; } - public void Save() + public static void Save() { if (needSaveConfig) { diff --git a/Editor/Utils.cs b/Editor/Utils.cs index 8625241..5d78a79 100644 --- a/Editor/Utils.cs +++ b/Editor/Utils.cs @@ -140,10 +140,10 @@ public static void EnsureLauncherExecutable() } #endif } +#if !UNITY_EDITOR_WIN public static ProcessStartInfo BuildProcessStartInfo(string defaultApp, string path, int line) { -#if !UNITY_EDITOR_WIN string preferredTerminal = NeovimPreferences.GetPreferredTerminal(); string fileName = "/usr/bin/env"; @@ -183,13 +183,12 @@ public static ProcessStartInfo BuildProcessStartInfo(string defaultApp, string p UseShellExecute = true, CreateNoWindow = false }; -#endif - return null; } +#endif +#if !UNITY_EDITOR_WIN public static bool IsTerminalAvailable(string terminalName) { -#if !UNITY_EDITOR_WIN UnityEngine.Debug.Log($"[NvimUnity] Checking if terminal is available: {terminalName}"); try { @@ -213,9 +212,9 @@ public static bool IsTerminalAvailable(string terminalName) { return false; } -#endif - return true; } +#endif + } }