eandualem / eandualem/tmux-workspaces
Add selectable and typed persistent workspace glyphs with plain-text fallback
- Dominant language
- Python
- Stars
- 1
- Forks
- 0
- Avg merge
- 2h 12m
- Merged PRs (30d)
- 40
Description
[from:tmux-workspaces]
## Problem
Users identify workspaces by purpose, but the compact switcher primarily represents them by numbers and text. Let each workspace carry a selected or typed glyph that remains associated with that purpose across navigation and reopening.
## Evidence and scope
Reviewed main `4d3d213` on 2026-09-08. `model.workspace()` stores ID, name, tabs and selection; there is no workspace icon field or editor. Workspace buttons use labels derived from position/name. The request is persistent user-chosen workspace identity, not merely replacing decorative button characters.
## Acceptance criteria
- [ ] Add an optional workspace glyph field with a picker of conservative choices and a typed-entry path. Offer clear/reset and keyboard operation; changing a glyph does not rename the workspace or alter tab/session associations.
- [ ] Display the selected glyph in the workspace switcher and relevant current-workspace label while retaining a readable name/number fallback and stable click targets.
- [ ] Define supported Unicode/grapheme and display-cell-width behavior. Reject controls, escape sequences, newlines and unsupported zero-width-only input; do not truncate inside a supported cluster. Prevent wide glyphs or combining marks from shifting neighboring hit areas at narrow widths.
- [ ] Provide a plain ASCII/no-icons mode. Terminals cannot reliably report font glyph coverage; do not promise automatic missing-glyph detection or require installing a special font. Document any restricted glyph set or emoji-width limitation honestly.
- [ ] Persist and validate the field using stable workspace IDs and the existing library concurrency model. Older saved libraries without icons still open; concurrent independent edits merge, same-field conflicts are surfaced, and stale/deleted workspace targets cannot change another workspace.
- [ ] Preserve labels, icons and layout through exit/reopen, workspace reorder/deletion and concurrent viewers. Test save failure, corrupt/unsupported glyph input, width/overflow and keyboard/mouse targeting with disposable libraries and PTYs.
- [ ] Obtain owner visual acceptance for the selected compact presentation. Keep the purpose-based arrangement and pull-attention positioning.
## Dependencies and limits
Prioritize landing the existing PRs individually. Depends on the existing validated persistence layer; use #1 for picker/menu keyboard navigation and coordinate with navigation controls #29 and theme work #32 only where they share rendering. This adds no agent status rings, unread badges, notifications, automatic state-driven icon changes, font installation or process lifecycle control.
Finish only after actionable review feedback is addressed, the PR is merged and this issue is verified closed. Preserve user libraries and external sessions.
Contributor guide
Research direction
Start by tracing model.workspace() and the existing validated persistence layer, then inspect the workspace switcher and current-workspace label behavior. Review PR #1 and coordinate with navigation controls #29 and theme work #32 where rendering overlaps. Done means persistent validated glyphs, fallback and ASCII mode, stable layout and targeting, concurrency-safe saves, and coverage with disposable libraries and PTYs.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cli, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100