@@ -9,11 +9,20 @@ local M = {}
9
9
function M .fn (where , what )
10
10
return function ()
11
11
local node_cur = lib .get_node_at_cursor ()
12
- local nodes_by_line = utils .get_nodes_by_line (core .get_explorer ().nodes , core .get_nodes_starting_line ())
12
+ local first_node_line = core .get_nodes_starting_line ()
13
+ local nodes_by_line = utils .get_nodes_by_line (core .get_explorer ().nodes , first_node_line )
14
+ local iter_start , iter_end , iter_step , cur , first , nex
13
15
14
- local cur , first , prev , nex = nil , nil , nil , nil
15
- for line , node in pairs (nodes_by_line ) do
16
+ if where == " next" then
17
+ iter_start , iter_end , iter_step = first_node_line , # nodes_by_line , 1
18
+ elseif where == " prev" then
19
+ iter_start , iter_end , iter_step = # nodes_by_line , first_node_line , - 1
20
+ end
21
+
22
+ for line = iter_start , iter_end , iter_step do
23
+ local node = nodes_by_line [line ]
16
24
local valid = false
25
+
17
26
if what == " git" then
18
27
valid = explorer_node .get_git_status (node ) ~= nil
19
28
elseif what == " diag" then
@@ -28,29 +37,16 @@ function M.fn(where, what)
28
37
29
38
if node == node_cur then
30
39
cur = line
31
- elseif valid then
32
- if not cur then
33
- prev = line
34
- end
35
- if cur and not nex then
36
- nex = line
37
- break
38
- end
40
+ elseif valid and cur then
41
+ nex = line
42
+ break
39
43
end
40
44
end
41
45
42
- if where == " prev" then
43
- if prev then
44
- view .set_cursor { prev , 0 }
45
- end
46
- else
47
- if cur then
48
- if nex then
49
- view .set_cursor { nex , 0 }
50
- end
51
- elseif first then
52
- view .set_cursor { first , 0 }
53
- end
46
+ if nex then
47
+ view .set_cursor { nex , 0 }
48
+ elseif vim .o .wrapscan and first then
49
+ view .set_cursor { first , 0 }
54
50
end
55
51
end
56
52
end
0 commit comments