File the open thread with the rest of the web's keys - #410
Merged
Conversation
monorkin
force-pushed
the
thread-filing-keys
branch
from
September 8, 2026 06:04
3c84cd5 to
3a036af
Compare
A thread on screen answered to a, l and t. The web app's topic toolbar keeps every filing key live while a topic is open, so u, i, d, p, b and v now work there too. The moves needed wiring rather than writing: postingAction has handled all four since the list gained them, and the thread's key switch simply never named them. It has no default the way the list's does, so anything unnamed reaches the viewport and scrolls. The two pickers needed more. Both read the list's selection, which is not the thread's row once the automatic mark-seen has resorted it under the cover, so they take the posting from actionPosting and answer to fileablePosting's rule: a thread with no row to file gets the notice the filing keys already give rather than a picker aimed at whatever the cursor has landed on. Marking unseen needed the snapshot kept in step. Opening an unseen thread marks it seen, and the snapshot is taken before that lands, so u measured against a stale row and said the thread it had just marked seen was already unseen. Left out, because the web leaves them out of an open thread too: spam, ignore, and collections. Mark seen is left out because opening the thread has already done it. Trash landed separately in #349. Closes #358
monorkin
force-pushed
the
thread-filing-keys
branch
from
September 8, 2026 06:06
3a036af to
78b3cde
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Finishes what #349 starts. A thread on screen answered to
a,landt; the web app's topic toolbar keeps every filing key live while a topic is open, sou,i,d,p,bandvnow work there too.This is the same customer report as #349, from the other direction: the card behind it is [HEY TUI] Missing actions in bundles + Trash unavailable.
Why this shape rather than a menu
#358 proposed an
mMore menu for the same actions. HEY web has that menu, but it is for the mouse. Its shortcuts are github/hotkey, whosefireDeterminedActioncallselement.click()with no visibility check, so the keys bound inside the menu fire without it ever opening. On the web you presst, notmthent. This PR matches that.Closes #358.The three kinds of change
The moves were wiring, not writing.
postingActionhas handledu,i,dandpsince the list gained them. The thread's key switch simply never named them, and unlike the list's it has nodefault, so anything unnamed reaches the viewport and scrolls.The pickers needed pointing.
startFolderPickerandstartMoveboth read the list's selection, which is not the thread's row once the automatic mark-seen has resorted it under the cover. They now takeactionPosting(), and answer tofileablePosting()'s rule: a thread with no row to file gets the notice the filing keys already give, rather than a picker aimed at wherever the cursor has landed.Mark unseen needed the snapshot kept in step. Opening an unseen thread marks it seen, and the snapshot the thread files on is taken before that lands. So
umeasured against a stale row and refused, saying the thread it had just marked seen was already unseen.Left out on purpose
Spam, ignore and collections, because the web leaves them out of an open thread too — they are in the More menu with no key of their own. Mark seen, because opening the thread has already done it. Bubble up has no action in the TUI at all, so it is a feature rather than a key.
Not covered here
The card's other half. A thread opened from a bundle still refuses to file, because
fileablePosting()refuses it. Worth knowing that the web does not: an open topic carries the full toolbar however you reached it, which is why the customer reports the actions working there. That is a deliberate decision in #371 and changing it is @jeremy's call, so I have left it alone.Checks
make checkpasses. The snapshot fix is mutation-checked: removing it failsTestMailViewMarksTheOpenThreadUnseen.Stacked on #349, so the diff shows that commit too until it merges.