diff --git a/autoload/fuzzyy/files.vim b/autoload/fuzzyy/files.vim index 4c6bd7ec..47af52e6 100644 --- a/autoload/fuzzyy/files.vim +++ b/autoload/fuzzyy/files.vim @@ -109,10 +109,13 @@ def Preview(wid: number, opts: dict) return endif var preview_bufnr = winbufnr(preview_wid) - var fileraw = readfile(path, '', 1000) - noautocmd call popup_settext(preview_wid, fileraw) + if selector.IsBinary(path) + noautocmd call popup_settext(preview_wid, 'Cannot preview binary file') + else + noautocmd call popup_settext(preview_wid, readfile(path, '', 1000)) + win_execute(preview_wid, 'silent! doautocmd filetypedetect BufNewFile ' .. path) + endif win_execute(preview_wid, 'norm gg') - win_execute(preview_wid, 'silent! doautocmd filetypedetect BufNewFile ' .. path) noautocmd win_execute(preview_wid, 'silent! setlocal nospell nolist') enddef diff --git a/autoload/fuzzyy/grep.vim b/autoload/fuzzyy/grep.vim index a6d8a1ed..12a046da 100644 --- a/autoload/fuzzyy/grep.vim +++ b/autoload/fuzzyy/grep.vim @@ -315,8 +315,7 @@ def Preview(wid: number, opts: dict) if path != last_path var preview_bufnr = winbufnr(preview_wid) - var fileraw = readfile(path) - noautocmd call popup_settext(preview_wid, fileraw) + noautocmd call popup_settext(preview_wid, readfile(path)) win_execute(preview_wid, 'silent! doautocmd filetypedetect BufNewFile ' .. path) noautocmd win_execute(preview_wid, 'silent! setlocal nospell nolist') endif diff --git a/autoload/fuzzyy/mru.vim b/autoload/fuzzyy/mru.vim index 92bd2cd0..ec2cdaed 100644 --- a/autoload/fuzzyy/mru.vim +++ b/autoload/fuzzyy/mru.vim @@ -41,10 +41,13 @@ def Preview(wid: number, opts: dict) return endif var preview_bufnr = winbufnr(preview_wid) - var fileraw = readfile(path) - noautocmd call popup_settext(preview_wid, fileraw) + if selector.IsBinary(path) + noautocmd call popup_settext(preview_wid, 'Cannot preview binary file') + else + noautocmd call popup_settext(preview_wid, readfile(path)) + win_execute(preview_wid, 'silent! doautocmd filetypedetect BufNewFile ' .. path) + endif win_execute(preview_wid, 'norm gg') - win_execute(preview_wid, 'silent! doautocmd filetypedetect BufNewFile ' .. path) noautocmd win_execute(preview_wid, 'silent! setlocal nospell nolist') enddef diff --git a/autoload/fuzzyy/utils/selector.vim b/autoload/fuzzyy/utils/selector.vim index 07f3b837..b5571c21 100644 --- a/autoload/fuzzyy/utils/selector.vim +++ b/autoload/fuzzyy/utils/selector.vim @@ -92,6 +92,18 @@ export def GetRootDir(): string return getcwd() enddef +export def IsBinary(path: string): bool + # NUL byte check for binary files, used to avoid showing preview + # Assumes a file encoding that does not allow NUL bytes, so will + # generate false positives for UTF-16 and UTF-32, but the preview + # window doesn't work for these encodings anyway, even with a BOM + var bytes = readblob(path, 0, 128) + for byte in bytes + if byte == 0 | return true | endif + endfor + return false +enddef + # Search pattern @pattern in a list of strings @li # if pattern is empty, return [li, []] # params: