diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-03 19:07:48 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-03 19:07:48 -0500 |
| commit | c23592e3c175b4c31b775b57c3985bfcbef90d9c (patch) | |
| tree | 35b1c7a90d1f313a8f97657eabc9454e4d82e1f7 /README.org | |
| parent | 8e0f0eedc91558e5d45edeb5a731103ba83e4d8b (diff) | |
| download | pearl-c23592e3c175b4c31b775b57c3985bfcbef90d9c.tar.gz pearl-c23592e3c175b4c31b775b57c3985bfcbef90d9c.zip | |
feat(compose): @-mention Linear users from a picker
Mentioning a teammate meant recalling their exact Linear handle, dotted last names and all. Now a picker inserts it for you.
In a comment or description compose buffer, typing @ at the start of a word pops a completing-read over the issue team's members, showing "Full Name (@handle)" so you can find someone by name, and inserts @displayName, the bare handle Linear resolves to a mention (no id or link wrapper). C-; L @ (pearl-mention-user) runs the same picker explicitly and also works inline in an issue buffer, resolving the team from the heading at point. An @ mid-word (an email) stays literal, and cancelling the picker leaves a literal @, so neither case is hijacked.
The compose buffer now carries the issue's team id so the picker knows whom to offer. The @ trigger is bound only when a team is in context. @displayName survives the md/org round-trip unchanged, so it reaches Linear intact.
Not yet confirmed: that writing a body with @displayName through the API fires Linear's mention notification (the web app does, and stored bodies carry the bare handle, so it almost certainly round-trips). Worth one self-mention write-test before relying on it.
Diffstat (limited to 'README.org')
| -rw-r--r-- | README.org | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -168,6 +168,7 @@ The hot-path commands sit one key under the prefix; the rest are grouped into su | =r= | refresh the issue at point | | =s= / =S= | save the issue at point / save every issue in the file | | =d= | edit the description | +| =@= | mention a Linear user (=@displayName=) at point | | =m= | open the full transient menu | | =f= ... | fetch (issue sources): =s= pick source, =o= open issues, =p= by project, =f= filter | | =v= ... | views: =l= run local, =L= run Linear, =c= create, =e= edit, =k= delete, =u= publish, =U= publish current, =d= save Linear view locally, =D= set default | @@ -320,6 +321,7 @@ How each field is edited: - *State* -- =pearl-edit-state=, completing over the team's workflow states. - *Assignee and labels* -- =pearl-edit-assignee= / =pearl-edit-labels=, completing over the team's members and labels. Labels also render as Org tags on the heading (=:bug:backend:=), so you can filter, sparse-tree, and build agendas on them. The =:LINEAR-LABELS:= drawer stays the source of truth; hand-edited heading tags are ignored and rewritten from Linear on the next change or fetch, so change labels with =pearl-edit-labels=. The assignee renders as a leading =@=-tag (=:@eric:bug:backend:=) so you can see who owns an issue at a glance on a team or "by person" view; set =pearl-show-assignee= to nil to omit it. It is display-only -- the =:LINEAR-ASSIGNEE-ID:= drawer is the source of truth, and the tag stays outside the title hash, so it never affects sync. - *Comments* -- edit your own in place, or =pearl-create-comment= for a new one. +- *Mentions* -- in a comment or description compose buffer, type =@= at the start of a word to pop a picker over the team's members and insert =@displayName= (Linear's mention handle), so you never have to recall a teammate's exact spelling. =C-; L @= (=pearl-mention-user=) runs the same picker explicitly, and works inline in an issue buffer too. An =@= mid-word (an email, say) stays literal, and cancelling the picker leaves a literal =@=. Picking a constrained field writes the value into the buffer and marks it changed; it doesn't push until you save. The display name or label text is there to read -- Pearl reconciles by the underlying id, and a refresh rewrites the display from the remote, so hand-editing the visible name has no effect. |
