11let s: Promise = vital#fern#import (' Async.Promise' )
2- let s: drawer_opener = ' topleft vsplit'
2+ let s: drawer_left_opener = ' topleft vsplit'
3+ let s: drawer_right_opener = ' botright vsplit'
34
45function ! fern#internal#command#fern#command (mods, fargs) abort
56 try
@@ -8,15 +9,17 @@ function! fern#internal#command#fern#command(mods, fargs) abort
89 let reveal = fern#internal#args#pop (a: fargs , ' reveal' , ' ' )
910 let drawer = fern#internal#args#pop (a: fargs , ' drawer' , v: false )
1011 if drawer
11- let opener = s: drawer_opener
1212 let width = fern#internal#args#pop (a: fargs , ' width' , ' ' )
1313 let keep = fern#internal#args#pop (a: fargs , ' keep' , v: false )
1414 let toggle = fern#internal#args#pop (a: fargs , ' toggle' , v: false )
15+ let right = fern#internal#args#pop (a: fargs , ' right' , v: false )
16+ let opener = right ? s: drawer_right_opener : s: drawer_left_opener
1517 else
1618 let opener = fern#internal#args#pop (a: fargs , ' opener' , g: fern #opener)
1719 let width = ' '
1820 let keep = v: false
1921 let toggle = v: false
22+ let right = v: false
2023 endif
2124
2225 if len (a: fargs ) isnot # 1
@@ -28,10 +31,11 @@ function! fern#internal#command#fern#command(mods, fargs) abort
2831 \ || type (width) isnot # v: t_string
2932 \ || type (keep) isnot # v: t_bool
3033 \ || type (toggle) isnot # v: t_bool
34+ \ || type (right ) isnot # v: t_bool
3135 if empty (drawer)
3236 throw ' Usage: Fern {url} [-opener={opener}] [-stay] [-wait] [-reveal={reveal}]'
3337 else
34- throw ' Usage: Fern {url} -drawer [-toggle] [-keep] [-width={width}] [-stay] [-wait] [-reveal={reveal}]'
38+ throw ' Usage: Fern {url} -drawer [-right] [- toggle] [-keep] [-width={width}] [-stay] [-wait] [-reveal={reveal}]'
3539 endif
3640 endif
3741
@@ -41,9 +45,14 @@ function! fern#internal#command#fern#command(mods, fargs) abort
4145 " Force project drawer style when
4246 " - The current buffer is project drawer style fern
4347 " - The 'opener' is 'edit'
44- if opener == # ' edit' && fern#internal#drawer#is_drawer ()
45- let drawer = v: true
46- let opener = s: drawer_opener
48+ if opener == # ' edit'
49+ if fern#internal#drawer#is_left_drawer ()
50+ let drawer = v: true
51+ let opener = s: drawer_left_opener
52+ elseif right && fern#internal#drawer#is_right_drawer ()
53+ let drawer = v: true
54+ let opener = s: drawer_right_opener
55+ endif
4756 endif
4857
4958 let expr = fern#util#expand (a: fargs [0 ])
@@ -58,7 +67,9 @@ function! fern#internal#command#fern#command(mods, fargs) abort
5867 \ ' path' : path ,
5968 \} )
6069 let fri.authority = drawer
61- \ ? printf (' drawer:%d' , tabpagenr ())
70+ \ ? right
71+ \ ? printf (' drawer-right:%d' , tabpagenr ())
72+ \ : printf (' drawer:%d' , tabpagenr ())
6273 \ : ' '
6374 let fri.query = extend (fri.query, {
6475 \ ' width' : width,
@@ -77,12 +88,13 @@ function! fern#internal#command#fern#command(mods, fargs) abort
7788 endif
7889
7990 let winid_saved = win_getid ()
80- if fri.authority = ~# ' ^drawer:'
91+ if fri.authority = ~# ' ^drawer\(-right\)\? :'
8192 call fern#internal#drawer#open (fri, {
8293 \ ' mods' : a: mods ,
8394 \ ' toggle' : toggle,
8495 \ ' opener' : opener,
8596 \ ' stay' : stay ? win_getid () : 0 ,
97+ \ ' right' : right ,
8698 \} )
8799 else
88100 call fern#internal#viewer#open (fri, {
0 commit comments