little tool for building Wardley maps
on.keychord_press = function(chord, key)
	if chord == 'C-=' then
		-- zoom in
		Viewport.zoom = Viewport.zoom+0.1
		B()
	elseif chord == 'C--' then
		-- zoom out
		if Viewport.zoom > 0.1 then
			Viewport.zoom = Viewport.zoom-0.1
			B()
		end
	elseif chord == 'C-0' then
		-- reset zoom
		Viewport.zoom = 1.0
		B()
	elseif Cursor_node then
		local old_top = {line=Cursor_node.editor.screen_top1.line, pos=Cursor_node.editor.screen_top1.pos}
		edit.keychord_press(Cursor_node.editor, chord, key)
		if not eq(Cursor_node.editor.screen_top1, old_top) then
			Viewport.y = Cursor_node.y + y_of_schema1(Cursor_node.editor, Cursor_node.editor.screen_top1)
		end
		A(--[[preserve screen_top of cursor node]] true)
	else
		if chord == 'up' then
			Viewport.y = Viewport.y - scale(20)
			B()
		elseif chord == 'down' then
			Viewport.y = Viewport.y + scale(20)
			B()
		elseif chord == 'left' then
			Viewport.x = Viewport.x - scale(50)
			B()
		elseif chord == 'right' then
			Viewport.x = Viewport.x + scale(50)
			B()
		elseif chord == 'pageup' then
			Viewport.y = Viewport.y - App.screen.height/Viewport.zoom
			B()
		elseif chord == 'S-up' then
			Viewport.y = Viewport.y - App.screen.height/Viewport.zoom
			B()
		elseif chord == 'pagedown' then
			Viewport.y = Viewport.y + App.screen.height/Viewport.zoom
			B()
		elseif chord == 'S-down' then
			Viewport.y = Viewport.y + App.screen.height/Viewport.zoom
			B()
		elseif chord == 'S-left' then
			Viewport.x = Viewport.x - App.screen.width/Viewport.zoom
			B()
		elseif chord == 'S-right' then
			Viewport.x = Viewport.x + App.screen.width/Viewport.zoom
			B()
		end
	end
end