Skip to content

Conversation

@lambdalisue
Copy link
Owner

@lambdalisue lambdalisue commented Jun 11, 2020

To solve #107, fern#smart#ready() function has added. The function invoke a given expression once a fern buffer become ready thus users do not need to care the asynchronous calls.

To execute tcd:root action every after enter/leave action, first define <Plug>(my-fern-tcd-on-ready) action like

nnoremap <buffer><silent> <Plug>(my-fern-tcd-on-ready)
      \ :<C-u>call fern#smart#ready("\<Plug>(fern-action-tcd:root)")<CR>

Then, create <Plug>(my-fern-enter-or-tcd)/<Plug>(my-fern-leave-or-tcd) like

nmap <buffer> <Plug>(my-fern-enter-or-tcd)
      \ <Plug>(fern-action-enter)<Plug>(my-fern-tcd-on-ready)
nmap <buffer> <Plug>(my-fern-leave-or-tcd)
      \ <Plug>(fern-action-leave)<Plug>(my-fern-tcd-on-ready)

Top-Left indicates current working directory. The cwd changes when the root directory has changed.

Kapture 2020-06-12 at 2 25 30

More complex mapping example for change behavior on drawer/window
function! s:fern_init() abort
  nnoremap <buffer><silent>
       \ <Plug>(fern-my-tcd:root-ready)
       \ :<C-u>call fern#smart#ready("\<Plug>(fern-action-tcd:root)")<CR>
  nmap <buffer>
        \ <Plug>(fern-my-enter-and-tcd)
        \ <Plug>(fern-action-enter)<Plug>(fern-my-tcd:root-ready)
  nmap <buffer>
        \ <Plug>(fern-my-leave-and-tcd)
        \ <Plug>(fern-action-leave)<Plug>(fern-my-tcd:root-ready)

  nmap <buffer><expr>
        \ <Plug>(fern-my-open-or-enter-and-tcd)
        \ fern#smart#leaf(
        \   "\<Plug>(fern-action-open)",
        \   "\<Plug>(fern-my-enter-and-tcd)",
        \ )

  nmap <buffer><expr>
        \ <Plug>(fern-my-open-or-enter)
        \ fern#smart#drawer(
        \   "\<Plug>(fern-my-open-or-enter-and-tcd)",
        \   "\<Plug>(fern-open-or-enter)",
        \ )
  nmap <buffer><expr>
        \ <Plug>(fern-my-leave)
        \ fern#smart#drawer(
        \   "\<Plug>(fern-my-leave-and-tcd)",
        \   "\<Plug>(fern-action-leave)",
        \ )
  nmap <buffer><nowait> <Return> <Plug>(fern-my-open-or-enter)
  nmap <buffer><nowait> <Backspace> <Plug>(fern-my-leave)
  nmap <buffer><nowait> <C-m> <Plug>(fern-my-open-or-enter)
  nmap <buffer><nowait> <C-h> <Plug>(fern-my-leave)
endfunction

@lambdalisue lambdalisue changed the title Await - WIP Support asynchronous mappings Jun 11, 2020
@lambdalisue lambdalisue changed the title Support asynchronous mappings Add fern#smart#ready() to support await like mapping call Jun 11, 2020
@lambdalisue lambdalisue changed the title Add fern#smart#ready() to support await like mapping call RFC: Add fern#smart#ready() to support await like mapping call Jun 11, 2020
@lambdalisue
Copy link
Owner Author

It's a bit tricky. I'd like to find a better way.

@lambdalisue
Copy link
Owner Author

In favor of #112. Close this PR.

@lambdalisue lambdalisue deleted the await branch June 12, 2020 02:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants