Skip to content

Commit fd14757

Browse files
committed
add proper events and make the notifier class generic
Expand the event system to have explicit Event objects and potentially many Notifiers. Previously they was only one notifier and one (implied) event. A lot of this is stolen from preservim#358.
1 parent f9a9339 commit fd14757

File tree

6 files changed

+53
-25
lines changed

6 files changed

+53
-25
lines changed

autoload/nerdtree.vim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@ function! nerdtree#loadClassFiles()
7474
runtime lib/nerdtree/tree_dir_node.vim
7575
runtime lib/nerdtree/opener.vim
7676
runtime lib/nerdtree/creator.vim
77-
runtime lib/nerdtree/refresh_notifier.vim
7877
runtime lib/nerdtree/flag_set.vim
7978
runtime lib/nerdtree/nerdtree.vim
8079
runtime lib/nerdtree/ui.vim
80+
runtime lib/nerdtree/event.vim
81+
runtime lib/nerdtree/notifier.vim
8182
endfunction
8283

8384
" FUNCTION: nerdtree#postSourceActions() {{{2

lib/nerdtree/event.vim

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"CLASS: Event
2+
"============================================================
3+
let s:Event = {}
4+
let g:NERDTreeEvent = s:Event
5+
6+
function! s:Event.New(nerdtree, subject, action, params) abort
7+
let newObj = copy(self)
8+
let newObj.nerdtree = a:nerdtree
9+
let newObj.subject = a:subject
10+
let newObj.action = a:action
11+
let newObj.params = a:params
12+
return newObj
13+
endfunction

lib/nerdtree/notifier.vim

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"CLASS: Notifier
2+
"============================================================
3+
let s:Notifier = {}
4+
5+
function! s:Notifier.AddListener(event, funcname)
6+
let listeners = s:Notifier.GetListenersForEvent(a:event)
7+
if listeners == []
8+
let listenersMap = s:Notifier.GetListenersMap()
9+
let listenersMap[a:event] = listeners
10+
endif
11+
call add(listeners, a:funcname)
12+
endfunction
13+
14+
function! s:Notifier.NotifyListeners(event, path, params)
15+
let event = g:NERDTreeEvent.New(b:NERDTree, a:path, a:event, a:params)
16+
17+
for listener in s:Notifier.GetListenersForEvent(a:event)
18+
call {listener}(event)
19+
endfor
20+
endfunction
21+
22+
function! s:Notifier.GetListenersMap()
23+
if !exists("s:refreshListenersMap")
24+
let s:refreshListenersMap = {}
25+
endif
26+
return s:refreshListenersMap
27+
endfunction
28+
29+
function! s:Notifier.GetListenersForEvent(name)
30+
let listenersMap = s:Notifier.GetListenersMap()
31+
return get(listenersMap, a:name, [])
32+
endfunction
33+
34+
let g:NERDTreePathNotifier = deepcopy(s:Notifier)
35+

lib/nerdtree/path.vim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -549,13 +549,13 @@ endfunction
549549
"FUNCTION: Path.refresh() {{{1
550550
function! s:Path.refresh()
551551
call self.readInfoFromDisk(self.str())
552-
call g:NERDTreeRefreshNotifier.NotifyListeners(self)
552+
call g:NERDTreePathNotifier.NotifyListeners('refresh', self, {})
553553
call self.cacheDisplayString()
554554
endfunction
555555

556556
"FUNCTION: Path.refreshFlags() {{{1
557557
function! s:Path.refreshFlags()
558-
call g:NERDTreeRefreshNotifier.NotifyListeners(self)
558+
call g:NERDTreePathNotifier.NotifyListeners('refreshFlags', self, {})
559559
call self.cacheDisplayString()
560560
endfunction
561561

lib/nerdtree/refresh_notifier.vim

Lines changed: 0 additions & 21 deletions
This file was deleted.

lib/nerdtree/tree_dir_node.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ function! s:TreeDirNode._initChildren(silent)
252252
try
253253
let path = g:NERDTreePath.New(i)
254254
call self.createChild(path, 0)
255-
call g:NERDTreeRefreshNotifier.NotifyListeners(path)
255+
call g:NERDTreePathNotifier.NotifyListeners('init', path, {})
256256
catch /^NERDTree.\(InvalidArguments\|InvalidFiletype\)Error/
257257
let invalidFilesFound += 1
258258
endtry

0 commit comments

Comments
 (0)