From dc3105e9c08f534a517fc95ada3219463cd675c2 Mon Sep 17 00:00:00 2001
From: Peter Jankuliak
Date: Mon, 8 May 2023 20:40:03 +0100
Subject: [PATCH] Adapt LspFileTorUri for Cygwin
Convert paths of the form "/cygdrive/c/foo/bar" to "c:/foo/bar" and paths of
the form "/home/pete/foo" to "C:/cygwin64/home/pete/foo"
---
autoload/lsp/util.vim | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/autoload/lsp/util.vim b/autoload/lsp/util.vim
index 5488561..172704d 100644
--- a/autoload/lsp/util.vim
+++ b/autoload/lsp/util.vim
@@ -111,6 +111,11 @@ enddef
export def LspFileToUri(fname: string): string
var uri: string = fname->fnamemodify(':p')
+ if has("win32unix")
+ # We're in Cygwin
+ uri = CygwinToWindowsPath(uri)
+ endif
+
var on_windows: bool = false
if uri =~? '^\a:'
on_windows = true
@@ -133,6 +138,27 @@ export def LspFileToUri(fname: string): string
return uri
enddef
+# Convert POSIX paths as used in Cygwin to native Windows paths
+def CygwinToWindowsPath(path: string): string
+ if path =~? '^\/cygdrive\/'
+ # Convert paths of the form "/cygdrive/c/foo/bar" to "C:/foo/bar"
+ return substitute(path, '^\/cygdrive\/\(\a\)\/', '\=submatch(1) .. ":/"', "")
+ elseif path =~? '^\/'
+ # Convert paths of the form "/home/pete/foo" to "C:/cygwin64/home/pete/foo"
+ if len(g:cygwinroot) == 0
+ # https://stackoverflow.com/a/7449029/273348
+ g:cygwinroot = substitute(system("reg query HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Cygwin\\\\setup /v rootdir | grep rootdir"),
+ \ '^\s*\S\+\s\+\S\+\s\+\(\p\+\).*$',
+ \ '\=submatch(1)',
+ \ "")
+ endif
+
+ return $'{g:cygwinroot}{path}'
+ else
+ return path
+ endif
+enddef
+
# Convert a Vim buffer number to an LSP URI (file://)
export def LspBufnrToUri(bnr: number): string
return LspFileToUri(bnr->bufname())
--
2.48.1