Since LUA is single threaded I reached a limit to performance
optimization, both 'git_icons' and 'file_icons' require string
matching and manipulations which eventually hurt performance
when running on large amount of files.
In order to solve that this commit introduces the option to spawn
commands and process the entries in a separate neovim process which
prints to stdio as if it was a regular shell command. This speeds up
things significantly and also makes the UI super responsive as if fzf
was run in the shell. This required a few lua hacks to be able to load
nvim-web-devicons in a '--headless --clean' instance and sharing the
user configuration through the RPC interface from the running instance.
This is enabled by default for 'files' and 'grep' providers and can also
be enabled for 'git.files' if required, control using the 'multiprocess'
option.
also changes buffers preview to read lines from the buffer instead
of attaching the exisiting buffer to the preview window, the former
turned out to changed the 'lastused' field of the buffer which was
undesireable for buffer sorting.
'nvim-jdtls' extends the LSP to support eclipse jdt classes
since classes are inside '.jar' file it displays them as 'jdt://'
URIs which are then handled by 'nvim-jdtls', we can then use
'vim.lsp.util.jump_to_location' to open the URIs.
Warning: this may cause a performance degradation so you have to
manually enable this by setting `grep.experimental = true` or directly
via `:lua require'fzf-lua'.live_grep({ experimental = true })`
'fzf_binds' and 'previewers.builtin.keymap' were merged and moved under
'keymap.fzf' and 'keymap.builtin' respectively.
See ':help fzf-lua-customization' how to reconfigure.