Editor Bug, cursor suddenly pops to bottom of tab when down-arrowing, version 3.3.1

I found a reproducible occurrence of the cursor suddenly jetting to the bottom of the screen. In the movie below you can see me cursoring down, one magic keyboard down-arrow at a time. Suddenly the cursor jumps to bottom of screen. Up arrow brings you back a line above where the jump started. If you go down again, it happens again.

The lines in question are kind of long but not amazingly so.

Here’s a movie of it happening. I can provide the file, but it is too long to be acceptable here. It’s the Monsters tab (not `Monsters) in the D2 file, whose zip is in that same folder as the movie. Link to the file at end of the article, or of course I’ll happily mail it somewhere.

When I get some time I’ll try to shorten the file. Thanks!!

https://ronjeffries.com/articles/020-dung/a04ff/d-159/editor-bug.mov

@RonJeffries @Simeon - with 370 I have seen the reverse of this, when I have selectively scrolled down the tab, taken my finger off to scroll the window up, tried to grab the selection bar at bottom right and the selection suddenly disappeared with the cursor an window set for the top of the tab. Getting hold of the selection window bar just above the keyboard is very dodgy.

Here’s a tab that should show no red bars, but that shows the bug. Try placing the cursor at the first occurrence of level=1, after the “1”, then cursor down repeatedly with magic keyboard. Cursor pops to bottom after being on “mattack10”. Cursor up from the bottom puts cursor back at the end of the “mwalk10” line.

-- Monster
-- RJ 202012??

local MT = nil

Monster = class()

function Monster:initMonsterTable()
    local m
    MT = {}
    m = {name="Pink Slime", level = 1, health={1,2}, speed = {4,10}, strength=1,
        attackVerbs={"smears", "squishes", "sloshes at"},
        dead={"asset.slime_squashed"}, hit={"asset.slime_hit"},
        moving={"asset.slime, asset.slime_walk, asset.slime_squashed"}}
    table.insert(MT,m)
    m = {name="Mimic", level=1, health={10,10}, speed={10,10}, strength=10, facing=-1, strategy=MimicMonsterStrategy,
        attackVerbs={"bites", "chomps", "gnaws"},
        dead={"mdead01","mdead02","mdead03","mdead04","mdead05","mdead06","mdead07","mdead08","mdead09","mdead10"},
        hit={"mhurt01", "mhurt02", "mhurt03", "mhurt04", "mhurt05", "mhurt06", "mhurt07", "mhurt08", "mhurt09", "mhurt10"},
        moving={"mwalk01", "mwalk02", "mwalk03", "mwalk04", "mwalk05", "mwalk06", "mwalk07", "mwalk08", "mwalk09", "mwalk10"},
        attack={"mattack01", "mattack02", "mattack03", "mattack04", "mattack05", "mattack06", "mattack07", "mattack08", "mattack09", "mattack10"},
        idle={"midle01", "midle02", "midle03", "midle04", "midle05", "midle06", "midle07", "midle08", "midle09", "midle10"},
        hide={"mhide01", "mhide02", "mhide03", "mhide04", "mhide05", "mhide06", "mhide07", "mhide08", "mhide09", "mhide10"},
    }
    table.insert(MT,m)
    m = {name="Death Fly", level = 1, health={2,3}, speed = {8,12}, strength=1,
        attackVerbs={"bites", "poisons"},
        dead={"asset.fly_dead"}, hit={"asset.fly_hit"},
        moving={"asset.fly, asset.fly_fly"}}
    table.insert(MT,m)
    m = {name="Ghost", level=1, health={1,5}, speed={5,9},strength={1,1},
        attackVerbs={"licks", "terrifies", "slams"},
        dead={"asset.ghost_dead"}, hit={"asset.ghost_hit"},
        moving={"asset.ghost, asset.ghost_normal"}}
    table.insert(MT,m)
    m = {name="Toothhead", level = 2, health={4,6}, speed = {8,15}, strength={1,2},
        attackVerbs={"gnaws at", "bites", "sinks teeth into"},
        dead={"asset.barnacle_dead"}, hit={"asset.barnacle_hit"},
        moving={"asset.barnacle, asset.barnacle_bite"}}
    table.insert(MT,m)
    m = {name="Vampire Bat", level=2, health={3,8}, speed={5,10}, strength={8,10},
        attackVerbs={"drains", "bites", "fangs"},
        dead={"asset.bat_dead"}, hit={"asset.bat_hit"},
        moving={"asset.bat, asset.bat_fly"}}
    table.insert(MT,m)
    m = {name="Murder Hornet", level = 2, health={2,3}, speed = {8,12}, strength={2,4},
        attackVerbs={"stings", "poisons", "jabs"},
        dead={"asset.bee_dead"}, hit={"asset.bee_hit"},
        moving={"asset.bee, asset.bee_fly"}}
    table.insert(MT,m)
    m = {name="Serpent", level=3, health={8,14}, speed={8,15}, strength={8,12},
        attackVerbs={"bites", "poisons", "strikes at"},
        dead={"asset.snake_dead"}, hit={"asset.snake_hit"},
        moving={"asset.snake, asset.snake_walk"}}
    table.insert(MT,m)
    m = {name="Yellow Widow", level=3, health={1,4}, speed = {2,5}, strength={9,15},
        attackVerbs={"bites", "poisons", "tangles"},
        dead={"asset.spider_dead"}, hit={"asset.spider_hit"},
        moving={"asset.spider, asset.spider_walk1,asset.spider_walk2"}}
    table.insert(MT,m)
    m = {name="Poison Frog", level=3, health={4,8}, speed = {2,6}, strength={8,11},
        attackVerbs={"leaps at", "smears poison on", "poisons", "bites"},
        dead={"asset.frog_dead"}, hit={"asset.frog_hit"},
        moving={"asset.frog, asset.frog_leap"}}
    table.insert(MT,m)
    m = {name="Ankle Biter", level=4, health={9,18}, speed={3,7}, strength={10,15},
        attackVerbs={"grinds ankles of", "cuts ankle of", "saws at feet of"},
        dead={"asset.spinnerHalf_dead"}, hit={"asset.spinnerHalf_hit"},
        moving={"asset.spinnerHalf, asset.spinnerHalf_spin"}}
    table.insert(MT,m)
    m = {name="Cloud", level=99, health={20,20}, speed={20,20}, strength={20,20},
        attackVerbs={"wafts"}, dead={"asset.whitePuff00"},    moving={"asset.whitePuff00, asset.whitePuff01, asset.whitePuff02, asset.whitePuff03"}}
    table.insert(MT,m)
end

function Monster:__tostring()
    return string.format("Monster (%d,%d)", self.tile:pos().x,self.tile:pos().y)
end

function Monster:basicMaintainRangeToPlayer(dungeon)
    local tiles = dungeon:availableTilesSameDistanceFromPlayer(self.tile)
    self:basicRandomMove(tiles)
end

Thank you for the steps to reproduce! Will look into resolving this

@RonJeffries I can’t reproduce this exactly but I do get the cursor skipping a line (the line before mattack10). What size iPad are you using? If you try the same steps but with the reference panel open (Do → Reference…) do you see the same behaviour?

@RonJeffries managed to reproduce, looks like 12.9" iPad is key and a font size around 20

i’m def 12.9. not sure of font size. weird bug, i’ll be interested to hear what caused it.