mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-04 15:50:03 +08:00
50 lines
1.7 KiB
VimL
50 lines
1.7 KiB
VimL
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
|