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