let s:Path = vital#gina#import('System.Filepath') let s:String = vital#gina#import('Data.String') function! gina#action#export#define(binder) abort call a:binder.define('export:quickfix', function('s:on_quickfix'), { \ 'description': 'Create a new quickfix list with selected candidates', \ 'mapping_mode': 'nv', \ 'requirements': ['path', 'word'], \ 'options': {}, \}) call a:binder.define('export:quickfix:add', function('s:on_quickfix'), { \ 'hidden': 1, \ 'description': 'Add selected candidates to an existing quickfix list', \ 'mapping_mode': 'nv', \ 'requirements': ['path', 'word'], \ 'options': { 'action': 'a' }, \}) call a:binder.define('export:quickfix:replace', function('s:on_quickfix'), { \ 'hidden': 1, \ 'description': 'Replace an existing quickfix list with selected candidates', \ 'mapping_mode': 'nv', \ 'requirements': ['path', 'word'], \ 'options': { 'action': 'r' }, \}) endfunction " Private -------------------------------------------------------------------- function! s:on_quickfix(candidates, options) abort dict let options = extend({ \ 'action': ' ', \}, a:options) let git = gina#core#get_or_fail() call setqflist( \ map(copy(a:candidates), 's:to_quickfix(git, v:val)'), \ options.action, \) endfunction function! s:to_quickfix(git, candidate) abort let abspath = gina#core#repo#abspath(a:git, a:candidate.path) return { \ 'filename': s:Path.realpath(abspath), \ 'lnum': get(a:candidate, 'line', 1), \ 'col': get(a:candidate, 'col', 1), \ 'text': s:String.remove_ansi_sequences(a:candidate.word), \} endfunction