From 726f418993d6d508966dd5e844ebce57581727a9 Mon Sep 17 00:00:00 2001 From: lambdalisue Date: Mon, 3 Aug 2020 01:26:56 +0900 Subject: [PATCH 1/2] Support scheme mapping overwrite --- autoload/fern/internal/scheme.vim | 10 +++++++--- autoload/fern/scheme/dict/mapping.vim | 8 +++++--- autoload/fern/scheme/file/mapping.vim | 16 +++++++++------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/autoload/fern/internal/scheme.vim b/autoload/fern/internal/scheme.vim index a57f674d..7ab90c92 100644 --- a/autoload/fern/internal/scheme.vim +++ b/autoload/fern/internal/scheme.vim @@ -11,13 +11,17 @@ function! fern#internal#scheme#provider_new(scheme) abort endfunction function! fern#internal#scheme#mapping_init(scheme, disable_default_mappings) abort - return call('s:call', [a:scheme, 'mapping#init', a:disable_default_mappings]) + let mappings = get(g:, printf('fern#scheme#%s#mapping#mappings', a:scheme), []) + for name in mappings + call s:call(a:scheme, printf('mapping#%s#init', name), a:disable_default_mappings) + endfor + return s:call(a:scheme, 'mapping#init', a:disable_default_mappings) endfunction function! fern#internal#scheme#complete_url(scheme, arglead, cmdline, cursorpos) abort - return call('s:call', [a:scheme, 'complete#url', a:arglead, a:cmdline, a:cursorpos]) + return s:call(a:scheme, 'complete#url', a:arglead, a:cmdline, a:cursorpos) endfunction function! fern#internal#scheme#complete_reveal(scheme, arglead, cmdline, cursorpos) abort - return call('s:call', [a:scheme, 'complete#reveal', a:arglead, a:cmdline, a:cursorpos]) + return s:call(a:scheme, 'complete#reveal', a:arglead, a:cmdline, a:cursorpos) endfunction diff --git a/autoload/fern/scheme/dict/mapping.vim b/autoload/fern/scheme/dict/mapping.vim index fb8f1829..12e941f3 100644 --- a/autoload/fern/scheme/dict/mapping.vim +++ b/autoload/fern/scheme/dict/mapping.vim @@ -2,9 +2,6 @@ let s:Prompt = vital#fern#import('Prompt') let s:Promise = vital#fern#import('Async.Promise') function! fern#scheme#dict#mapping#init(disable_default_mappings) abort - call fern#scheme#dict#mapping#clipboard#init(a:disable_default_mappings) - call fern#scheme#dict#mapping#rename#init(a:disable_default_mappings) - nnoremap (fern-action-new-leaf) :call call('new_leaf') nnoremap (fern-action-new-branch) :call call('new_branch') nnoremap (fern-action-copy) :call call('copy') @@ -204,3 +201,8 @@ function! s:map_edit_leaf(helper) abort \.then({ -> a:helper.async.reload_node(root.__key) }) \.then({ -> a:helper.async.redraw() }) endfunction + +let g:fern#scheme#dict#mapping#mappings = get(g:, 'fern#scheme#dict#mapping#mappings', [ + \ 'clipboard', + \ 'rename', + \]) diff --git a/autoload/fern/scheme/file/mapping.vim b/autoload/fern/scheme/file/mapping.vim index 2c98fd8b..9d238175 100644 --- a/autoload/fern/scheme/file/mapping.vim +++ b/autoload/fern/scheme/file/mapping.vim @@ -2,13 +2,6 @@ let s:Promise = vital#fern#import('Async.Promise') let s:Prompt = vital#fern#import('Prompt') function! fern#scheme#file#mapping#init(disable_default_mappings) abort - call fern#scheme#file#mapping#cd#init(a:disable_default_mappings) - call fern#scheme#file#mapping#system#init(a:disable_default_mappings) - call fern#scheme#file#mapping#clipboard#init(a:disable_default_mappings) - call fern#scheme#file#mapping#rename#init(a:disable_default_mappings) - call fern#scheme#file#mapping#terminal#init(a:disable_default_mappings) - call fern#scheme#file#mapping#grep#init(a:disable_default_mappings) - nnoremap (fern-action-new-file) :call call('new_file') nnoremap (fern-action-new-dir) :call call('new_dir') nnoremap (fern-action-copy) :call call('copy') @@ -198,3 +191,12 @@ function! s:map_remove(helper) abort \.then({ -> a:helper.async.redraw() }) \.then({ -> a:helper.sync.echo(printf('%d items are removed', len(ps))) }) endfunction + +let g:fern#scheme#file#mapping#mappings = get(g:, 'fern#scheme#file#mapping#mappings', [ + \ 'cd', + \ 'clipboard', + \ 'grep', + \ 'rename', + \ 'system', + \ 'terminal', + \]) From 3bcfc6ed216474068ff601556f01c98bf02257bf Mon Sep 17 00:00:00 2001 From: lambdalisue Date: Mon, 3 Aug 2020 01:41:28 +0900 Subject: [PATCH 2/2] Add documentation about mapping --- doc/fern-develop.txt | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/doc/fern-develop.txt b/doc/fern-develop.txt index 8e7a5ab3..531e91ee 100644 --- a/doc/fern-develop.txt +++ b/doc/fern-develop.txt @@ -185,7 +185,21 @@ See https://github.com/lambdalisue/fern-comparator-lexical.vim as example. ============================================================================= MAPPING *fern-develop-mapping* -TBW +Fern provides global mappings under "autoload/fern/mapping" directory. +Mapping MUST provide an init function as "fern#mapping#{name}#init()" with +a boolean argument to disable default mappings. + +Mappings under that directory are registered automatically when a filename has +listed in |g:fern#mapping#mappings| variable. + +So 3rd party plugin MUST register mappings by add followings to plugin.vim +like: +> + call add(g:fern#mapping#mappings, ['your_plugin']) +> +*g:fern#mapping#mappings* + A |List| of globally available mapping names. + A target mapping MUST exist under "fern#mapping#" namespace. ============================================================================= @@ -292,7 +306,23 @@ the following methods. ----------------------------------------------------------------------------- MAPPING *fern-develop-scheme-mapping* -TBW +Fern provides scheme mappings under "autoload/fern/scheme/{scheme}/mapping" +directory. Mapping MUST provide an init function as +"fern#scheme#{scheme}#mapping#{name}#init()" with a boolean argument to disable +default mappings. + +Mappings under that directory are registered automatically when a filename has +listed in |g:fern#scheme#{scheme}#mapping#mappings| variable. + +So 3rd party plugin MUST register mappings by add followings to plugin.vim +like: +> + call add(g:fern#scheme#file#mapping#mappings, ['your_plugin']) +> +*g:fern#scheme#{scheme}#mapping#mappings* + A |List| of scheme available mapping names for {scheme}. + A target mapping MUST exist under "fern#scheme#{scheme}#mapping#" + namespace. =============================================================================