diff --git a/sloth/editor.scm b/sloth/editor.scm index c36835a..af19faa 100644 --- a/sloth/editor.scm +++ b/sloth/editor.scm @@ -121,31 +121,41 @@ (define (next-node state) (define target (ts-node-next-sibling - (sloth-state-point-node state))) - (define point (ts-node-start-point target)) - (move (sloth-state-win state) - (car point) (cdr point)) - (set-sloth-state-point-node state target)) + (sloth-state-point-node state) + #t)) + (if target + (let ((point (ts-node-start-point target))) + (move (sloth-state-win state) + (car point) (cdr point)) + (set-sloth-state-point-node state target)) + state)) (define (prev-node state) (define target (ts-node-prev-sibling (sloth-state-point-node state) - #f)) - (define point (ts-node-start-point target)) - (move (sloth-state-win state) - (car point) (cdr point)) - (set-sloth-state-point-node state target)) + #t)) + (if target + (let ((point (ts-node-start-point target))) + (move (sloth-state-win state) + (car point) (cdr point)) + (set-sloth-state-point-node state target)) + state)) (define (down-node state) - (define target (ts-node-child (sloth-state-point-node state) 0)) - (define point (ts-node-start-point target)) - (move (sloth-state-win state) - (car point) (cdr point)) - (set-sloth-state-point-node state target)) + (define nodes (ts-node-childs (sloth-state-point-node state) + #t)) + (if (not (null? nodes)) + (let ((point (ts-node-start-point (car nodes)))) + (move (sloth-state-win state) + (car point) (cdr point)) + (set-sloth-state-point-node state (car nodes))) + state)) (define (up-node state) (define target (ts-node-parent (sloth-state-point-node state))) - (define point (ts-node-start-point target)) - (move (sloth-state-win state) - (car point) (cdr point)) - (set-sloth-state-point-node state target)) + (if target + (let ((point (ts-node-start-point target))) + (move (sloth-state-win state) + (car point) (cdr point)) + (set-sloth-state-point-node state target)) + state))