zet.tlv: yet another bugfix
Need for tests growing more acute..
This commit is contained in:
parent
2d3cad5945
commit
bbd47aaa5b
141
zet.tlv
141
zet.tlv
|
@ -2368,3 +2368,144 @@
|
|||
> -- We could silently fail to save.
|
||||
> end
|
||||
>end
|
||||
- __teliva_timestamp:
|
||||
>Fri Feb 11 07:51:42 2022
|
||||
__teliva_note:
|
||||
>bugfix in parent link when inserting child
|
||||
update:
|
||||
>function update(window)
|
||||
> local key = curses.getch()
|
||||
> local h, w = window:getmaxyx()
|
||||
> local curr = zettels[current_zettel_id]
|
||||
> assert(curr, string.format('cursor fell off the edge of the world: %s', type(current_zettel_id)))
|
||||
> -- move along the graph
|
||||
> if key == string.byte('j') then
|
||||
> if curr.child then
|
||||
> current_zettel_id = curr.child
|
||||
> elseif curr.next then
|
||||
> current_zettel_id = curr.next
|
||||
> elseif curr.parent and zettels[curr.parent].next then
|
||||
> current_zettel_id = zettels[curr.parent].next
|
||||
> end
|
||||
> elseif key == string.byte('k') then
|
||||
> if curr.parent then
|
||||
> current_zettel_id = curr.parent
|
||||
> end
|
||||
> elseif key == string.byte('h') then
|
||||
> if curr.prev then
|
||||
> current_zettel_id = curr.prev
|
||||
> elseif curr.parent then
|
||||
> current_zettel_id = curr.parent
|
||||
> end
|
||||
> elseif key == string.byte('l') then
|
||||
> if curr.next then
|
||||
> current_zettel_id = curr.next
|
||||
> elseif curr.parent and zettels[curr.parent].next then
|
||||
> current_zettel_id = zettels[curr.parent].next
|
||||
> end
|
||||
> -- move along the screen
|
||||
> elseif key == curses.KEY_UP then
|
||||
> if render_state.curr_h > 1 then
|
||||
> current_zettel_id = render_state.wh2id[render_state.curr_w][render_state.curr_h - 1]
|
||||
> end
|
||||
> elseif key == curses.KEY_DOWN then
|
||||
> if render_state.wh2id[render_state.curr_w][render_state.curr_h + 1] then
|
||||
> current_zettel_id = render_state.wh2id[render_state.curr_w][render_state.curr_h + 1]
|
||||
> end
|
||||
> elseif key == curses.KEY_LEFT then
|
||||
> if render_state.curr_w > 1 then
|
||||
> current_zettel_id = render_state.wh2id[render_state.curr_w - 1][render_state.curr_h]
|
||||
> end
|
||||
> elseif key == curses.KEY_RIGHT then
|
||||
> if render_state.wh2id[render_state.curr_w + 1] and render_state.wh2id[render_state.curr_w + 1][render_state.curr_h] then
|
||||
> current_zettel_id = render_state.wh2id[render_state.curr_w + 1][render_state.curr_h]
|
||||
> end
|
||||
> -- mutations
|
||||
> elseif key == string.byte('e') then
|
||||
> editz(window)
|
||||
> elseif key == string.byte('a') then
|
||||
> -- insert sibling after
|
||||
> local old = curr.next
|
||||
> curr.next = new_id()
|
||||
> local new = zettels[curr.next]
|
||||
> new.data = ''
|
||||
> new.next = old
|
||||
> new.prev = current_zettel_id
|
||||
> if old then
|
||||
> zettels[old].prev = curr.next
|
||||
> assert(curr.parent == zettels[old].parent, 'siblings should have same parent')
|
||||
> end
|
||||
> new.parent = curr.parent
|
||||
> current_zettel_id = curr.next
|
||||
> render(window) -- recompute render_state
|
||||
> editz(window)
|
||||
> elseif key == string.byte('b') then
|
||||
> -- insert sibling before
|
||||
> local old = curr.prev
|
||||
> curr.prev = new_id()
|
||||
> local new = zettels[curr.prev]
|
||||
> new.data = ''
|
||||
> new.prev = old
|
||||
> new.next = current_zettel_id
|
||||
> if old then
|
||||
> zettels[old].next = curr.prev
|
||||
> assert(curr.parent == zettels[old].parent, 'siblings should have same parent')
|
||||
> end
|
||||
> new.parent = curr.parent
|
||||
> current_zettel_id = curr.prev
|
||||
> render(window) -- recompute render_state
|
||||
> editz(window)
|
||||
> elseif key == string.byte('c') then
|
||||
> -- insert child
|
||||
> local old = curr.child
|
||||
> curr.child = new_id()
|
||||
> local new = zettels[curr.child]
|
||||
> new.data = ''
|
||||
> new.next = old
|
||||
> if old then
|
||||
> assert(zettels[old].prev == nil, "first child shouldn't have a previous sibling")
|
||||
> zettels[old].prev = curr.child
|
||||
> end
|
||||
> new.parent = current_zettel_id
|
||||
> current_zettel_id = curr.child
|
||||
> render(window) -- recompute render_state
|
||||
> editz(window)
|
||||
> -- cross-links
|
||||
> elseif key == string.byte('s') then
|
||||
> -- save zettel to a stash
|
||||
> stash = current_zettel_id
|
||||
> elseif key == string.byte('t') then
|
||||
> -- cross-link a zettel bidirectionally with what's on the stash
|
||||
> local insert_crosslink =
|
||||
> function(a, rel, b_id)
|
||||
> if a.crosslinks == nil then
|
||||
> a.crosslinks = {}
|
||||
> end
|
||||
> a.crosslinks[rel] = b_id
|
||||
> end
|
||||
> insert_crosslink(curr, 'a', stash)
|
||||
> insert_crosslink(zettels[stash], 'a', current_zettel_id)
|
||||
> stash = nil
|
||||
> -- view settings
|
||||
> elseif key == string.byte('x') then
|
||||
> if view_settings.width > 5 then
|
||||
> view_settings.width = view_settings.width - 5
|
||||
> end
|
||||
> elseif key == string.byte('X') then
|
||||
> if view_settings.width < w-5 then
|
||||
> view_settings.width = view_settings.width + 5
|
||||
> end
|
||||
> elseif key == string.byte('y') then
|
||||
> if view_settings.height > 0 then
|
||||
> view_settings.height = view_settings.height - 1
|
||||
> end
|
||||
> elseif key == string.byte('Y') then
|
||||
> if view_settings.height < h-2 then
|
||||
> view_settings.height = view_settings.height + 1
|
||||
> end
|
||||
> elseif key == string.byte('z') then
|
||||
> -- scroll to show the current zettel at top of screen
|
||||
> -- often has the effect of zooming in on its hierarchy
|
||||
> view_settings.first_zettel = current_zettel_id
|
||||
> end
|
||||
>end
|
||||
|
|
Loading…
Reference in New Issue