Merge branch 'feature/filetype-dict' into develop

This commit is contained in:
Michael Mandl 2019-10-20 15:50:57 +02:00
commit 84cd6e1661
4 changed files with 71 additions and 10 deletions

View file

@ -16,6 +16,15 @@ source file in the right window.
You can configure the following settings: You can configure the following settings:
### g:splitopen_extensions
Use this dictionary to define your pairs of left-hand- right-hand-side file
types. E.g.
let g:splitopen_extensions = {"h": "cpp"}
always places a .cpp file on the right-hand side when opening an .h file and
vice versa.
### g:splitopen_set_fzf_keys ### g:splitopen_set_fzf_keys

View file

@ -1,3 +1,22 @@
function s:invert_dict(source_dict)
let result = {}
for [key, value] in items(a:source_dict)
let result[value] = key
endfor
return result
endfunc
let s:extensions = g:splitopen_extensions
let s:extensions_rev = s:invert_dict(s:extensions)
function s:isLeftSideExtension(extension)
return has_key(s:extensions, a:extension)
endfunc
function s:isRightSideExtension(extension)
return has_key(s:extensions_rev, a:extension)
endfunc
function s:getFileExtension(filename) function s:getFileExtension(filename)
return fnamemodify(a:filename, ":e") return fnamemodify(a:filename, ":e")
endfunction endfunction
@ -6,23 +25,36 @@ function s:getFileRoot(filename)
return fnamemodify(a:filename, ":r") return fnamemodify(a:filename, ":r")
endfunc endfunc
function s:getSwitchExtension(extension) function s:getSwitchExtension(filename)
if (a:extension == "cpp") let extension = s:getFileExtension(a:filename)
return "h" if s:isLeftSideExtension(extension)
elseif (a:extension == "h") return s:extensions[extension]
return "cpp" elseif s:isRightSideExtension(extension)
return s:extensions_rev[extension]
endif endif
endfunc endfunc
function s:getSwitchFile(filename) function s:getSwitchFile(filename)
return s:getFileRoot(a:filename) . "." . s:getSwitchExtension(s:getFileExtension(a:filename)) return s:getFileRoot(a:filename) . "." . s:getSwitchExtension(a:filename)
endfunc endfunc
function s:addLeftSplit(filename) function s:addLeftSplit(filename)
execute("vsplit " . s:getSwitchFile(a:filename)) execute("vsplit " . s:getSwitchFile(a:filename))
execute("wincmd l")
endfunc
function s:addRightSplit(filename)
execute("vsplit " . s:getSwitchFile(a:filename))
execute("wincmd L")
execute("wincmd h")
endfunc endfunc
function splitopen#SplitOpenFile(filename) function splitopen#SplitOpenFile(filename)
execute("tabedit " . a:filename) execute("tabedit " . a:filename)
let extension = s:getFileExtension(a:filename)
if s:isLeftSideExtension(extension)
call s:addRightSplit(a:filename)
elseif s:isRightSideExtension(extension)
call s:addLeftSplit(a:filename) call s:addLeftSplit(a:filename)
endif
endfunction endfunction

View file

@ -5,7 +5,8 @@ CONTENTS *SplitOpenContents*
1. Usage ..............................|SplitOpenUsage| 1. Usage ..............................|SplitOpenUsage|
2. Configuration ......................|SlitOpenConfiguraton| 2. Configuration ......................|SlitOpenConfiguraton|
2.1 g:splitopen_set_fzf_keys.......|SplitOpenConfiguration_set_fzf_keys| 2.1 g:splitopen_extensions.........|SplitOpenConfiguration_extensions|
2.2 g:splitopen_set_fzf_keys.......|SplitOpenConfiguration_set_fzf_keys|
3. License ............................|SplitOpenLicense| 3. License ............................|SplitOpenLicense|
4. Changelog ..........................|SplitOpenChangelog| 4. Changelog ..........................|SplitOpenChangelog|
@ -26,8 +27,18 @@ source file in the right window.
You can configure the following settings: You can configure the following settings:
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
2.1 g:splitopen_extensions *SplitOpenConfiguration_extensions*
2.1 g:splitopen_set_fzf_keys *SplitOpenConfiguration_set_fzf_keys* Use this dictionary to define your pairs of left-hand- right-hand-side file
types. E.g.
let g:splitopen_extensions = {"h": "cpp"}
always places a .cpp file on the right-hand side when opening an .h file and
vice versa.
--------------------------------------------------------------------------------
2.2 g:splitopen_set_fzf_keys *SplitOpenConfiguration_set_fzf_keys*
Set this option to 1 Set this option to 1

View file

@ -1,5 +1,13 @@
command -nargs=1 SplitOpen :call splitopen#SplitOpenFile("<args>") command -nargs=1 SplitOpen :call splitopen#SplitOpenFile("<args>")
" map left-split / right-split file extensions
if !exists("g:splitopen_extensions")
let g:splitopen_extensions = {
\ "h": "cpp",
\ "H": "CPP",
\ }
endif
if !exists('g:splitopen_set_fzf_keys') if !exists('g:splitopen_set_fzf_keys')
let g:splitopen_set_fzf_keys = 0 let g:splitopen_set_fzf_keys = 0
endif endif
@ -9,5 +17,6 @@ if g:splitopen_set_fzf_keys
\ 'ctrl-s': 'SplitOpen', \ 'ctrl-s': 'SplitOpen',
\ 'ctrl-t': 'tab split', \ 'ctrl-t': 'tab split',
\ 'ctrl-x': 'split', \ 'ctrl-x': 'split',
\ 'ctrl-v': 'vsplit' } \ 'ctrl-v': 'vsplit',
\ }
endif endif