Skip to content

Add configurable custom commands#42

Merged
textfuel merged 1 commit intotextfuel:mainfrom
seflue:feat/custom-commands
Apr 16, 2026
Merged

Add configurable custom commands#42
textfuel merged 1 commit intotextfuel:mainfrom
seflue:feat/custom-commands

Conversation

@seflue
Copy link
Copy Markdown
Contributor

@seflue seflue commented Apr 13, 2026

Closes #39

Let users bind shell commands to keys, with Go template access to
the focused issue, project, or comment. Each command declares the
UI contexts in which it fires (issues, info, projects,
detail, detail.comments); when contexts: is omitted, the
default is wherever an issue is focused.

customCommands:
  - key: "ctrl+y"
    name: "Copy issue key"
    command: "printf %s {{.Key}} | wl-copy"
    suspend: false
  - key: "ctrl+w"
    name: "Log work"
    command: "jira issue worklog add {{.Key}}"

Custom bindings take precedence over built-in keys, so users can
override any action. A suspend flag controls TUI suspension for
the command's duration, and a shellescape template helper is
available for safe interpolation. Registered commands appear in the
help overlay.

@seflue seflue requested a review from textfuel as a code owner April 13, 2026 00:30
Copy link
Copy Markdown
Owner

@textfuel textfuel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

really like this feature, custom commands have been on my wishlist for a while
left some small notes inline, if any of those land i think this becomes great
thanks for writing it up

Comment thread pkg/config/config.go
Comment thread pkg/tui/custom_commands.go Outdated
Comment thread pkg/tui/app.go
@seflue seflue force-pushed the feat/custom-commands branch from b33bb47 to 6a2a92c Compare April 13, 2026 16:08
@seflue seflue requested a review from textfuel April 13, 2026 16:15
Bind shell commands to keys with Go template access to the focused
issue, project, or comment. Each command declares the UI contexts
in which it fires (issues, info, projects, detail, detail.comments);
when `contexts:` is omitted, the default is wherever an issue is
focused.

Custom bindings take precedence over built-in keys, so users can
override any action. A `suspend` flag controls TUI suspension for
the command's duration, and a `shellescape` template helper is
available for safe interpolation. Registered commands appear in
the help overlay.
@seflue seflue force-pushed the feat/custom-commands branch from 6a2a92c to 5a8db18 Compare April 15, 2026 06:29
@textfuel textfuel merged commit 45afec5 into textfuel:main Apr 16, 2026
2 checks passed
@seflue seflue deleted the feat/custom-commands branch April 16, 2026 15:53
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request May 8, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [textfuel/lazyjira](https://github.com/textfuel/lazyjira) | minor | `v2.9.0` → `v2.13.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>textfuel/lazyjira (textfuel/lazyjira)</summary>

### [`v2.13.0`](https://github.com/textfuel/lazyjira/releases/tag/v2.13.0)

[Compare Source](textfuel/lazyjira@v2.12.0...v2.13.0)

#### Changelog

- [`16a6dd6`](textfuel/lazyjira@16a6dd6) Merge branch 'hotfixes-of-demo-check'
- [`11ba667`](textfuel/lazyjira@11ba667) Reach parents and children from the task list ([#&#8203;68](textfuel/lazyjira#68))
- [`26afc79`](textfuel/lazyjira@26afc79) Show parent-link children in Sub tab on Cloud ([#&#8203;66](textfuel/lazyjira#66))
- [`d5f63df`](textfuel/lazyjira@d5f63df) changelog
- [`34ab861`](textfuel/lazyjira@34ab861) changelog
- [`5dbd650`](textfuel/lazyjira@5dbd650) codowners adjustments
- [`6aa089d`](textfuel/lazyjira@6aa089d) fixes
- [`d22816b`](textfuel/lazyjira@d22816b) release v2.13.0

***

**Full changelog:** [CHANGELOG.md](https://github.com/textfuel/lazyjira/blob/main/CHANGELOG.md)

### [`v2.12.0`](https://github.com/textfuel/lazyjira/releases/tag/v2.12.0)

[Compare Source](textfuel/lazyjira@v2.11.1...v2.12.0)

#### Changelog

- [`6af4d03`](textfuel/lazyjira@6af4d03) Feat/task status icons ([#&#8203;64](textfuel/lazyjira#64))
- [`a19773b`](textfuel/lazyjira@a19773b) changelog
- [`4ca1ee7`](textfuel/lazyjira@4ca1ee7) release v2.12.0
- [`c476e2b`](textfuel/lazyjira@c476e2b) sprint fields ([#&#8203;48](textfuel/lazyjira#48))

***

**Full changelog:** [CHANGELOG.md](https://github.com/textfuel/lazyjira/blob/main/CHANGELOG.md)

### [`v2.11.1`](https://github.com/textfuel/lazyjira/releases/tag/v2.11.1)

[Compare Source](textfuel/lazyjira@v2.11.0...v2.11.1)

#### Changelog

- [`29ca5ae`](textfuel/lazyjira@29ca5ae) Route to tracking only on exact remote match ([#&#8203;62](textfuel/lazyjira#62))
- [`5516244`](textfuel/lazyjira@5516244) release v2.11.1

***

**Full changelog:** [CHANGELOG.md](https://github.com/textfuel/lazyjira/blob/main/CHANGELOG.md)

### [`v2.11.0`](https://github.com/textfuel/lazyjira/releases/tag/v2.11.0)

[Compare Source](textfuel/lazyjira@v2.10.2...v2.11.0)

#### Changelog

- [`382fe06`](textfuel/lazyjira@382fe06) changelog
- [`23b6d49`](textfuel/lazyjira@23b6d49) feat: add catppuccin theme support ([#&#8203;59](textfuel/lazyjira#59))
- [`ced4b10`](textfuel/lazyjira@ced4b10) readme v2 path
- [`9d434fc`](textfuel/lazyjira@9d434fc) release v2.11.0
- [`e570d8b`](textfuel/lazyjira@e570d8b) some dev QOL ([#&#8203;60](textfuel/lazyjira#60))

***

**Full changelog:** [CHANGELOG.md](https://github.com/textfuel/lazyjira/blob/main/CHANGELOG.md)

### [`v2.10.2`](https://github.com/textfuel/lazyjira/releases/tag/v2.10.2)

[Compare Source](textfuel/lazyjira@v2.10.1...v2.10.2)

#### Changelog

- [`94fafd7`](textfuel/lazyjira@94fafd7) fix of v2 version naming ([#&#8203;57](textfuel/lazyjira#57))
- [`86f48fe`](textfuel/lazyjira@86f48fe) release v2.10.2

***

**Full changelog:** [CHANGELOG.md](https://github.com/textfuel/lazyjira/blob/main/CHANGELOG.md)

### [`v2.10.1`](https://github.com/textfuel/lazyjira/releases/tag/v2.10.1)

[Compare Source](textfuel/lazyjira@v2.10.0...v2.10.1)

#### Changelog

- [`fe34157`](textfuel/lazyjira@fe34157) changelog
- [`5728a57`](textfuel/lazyjira@5728a57) pkg/config: accept string shorthand for the projects list ([#&#8203;53](textfuel/lazyjira#53))
- [`cce7280`](textfuel/lazyjira@cce7280) release v2.10.1

***

**Full changelog:** [CHANGELOG.md](https://github.com/textfuel/lazyjira/blob/main/CHANGELOG.md)

### [`v2.10.0`](https://github.com/textfuel/lazyjira/releases/tag/v2.10.0)

[Compare Source](textfuel/lazyjira@v2.9.0...v2.10.0)

#### Changelog

- [`45afec5`](textfuel/lazyjira@45afec5) Add configurable custom commands ([#&#8203;42](textfuel/lazyjira#42))
- [`851bfa1`](textfuel/lazyjira@851bfa1) Context-sensitive preview for Sub/Lnk tabs ([#&#8203;55](textfuel/lazyjira#55))
- [`f546bc7`](textfuel/lazyjira@f546bc7) Make maxResults configurable globally and per tab ([#&#8203;45](textfuel/lazyjira#45))
- [`672fb6d`](textfuel/lazyjira@672fb6d) changelog
- [`67bdf1a`](textfuel/lazyjira@67bdf1a) changelog
- [`d14fb0e`](textfuel/lazyjira@d14fb0e) perl for make release
- [`b04c7a8`](textfuel/lazyjira@b04c7a8) release v2.10.0

***

**Full changelog:** [CHANGELOG.md](https://github.com/textfuel/lazyjira/blob/main/CHANGELOG.md)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNjguNSIsInVwZGF0ZWRJblZlciI6IjQzLjE2OC41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Configurable custom commands bound to keys

2 participants