1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-04 18:50:05 +08:00
SpaceVim/bundle/gina.vim/autoload/gina/action/export.vim

50 lines
1.7 KiB
VimL
Raw Normal View History

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