Skip to content

feat(lua): add ability to await on operation results (cancelled/applied)#422

Merged
idursun merged 1 commit intomainfrom
await-on-operation-result
Dec 13, 2025
Merged

feat(lua): add ability to await on operation results (cancelled/applied)#422
idursun merged 1 commit intomainfrom
await-on-operation-result

Conversation

@idursun
Copy link
Copy Markdown
Owner

@idursun idursun commented Dec 12, 2025

This PR updates the lua bridge to know if an operation has been applied or cancelled. This will allow #310 to be implemented like the following:

[custom_commands."inline commit"]
  key_sequence = ["w", "x"]
  lua = '''
  if revisions.start_inline_describe() then
    jj("new")
  end
  '''

A new revision is created only if the user pressed apply (i.e. alt+enter)

I’ll gradually apply the same approach to the remaining operations.

fixes #310

Copy link
Copy Markdown
Collaborator

@baggiiiie baggiiiie left a comment

Choose a reason for hiding this comment

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

nice!

@idursun idursun merged commit 354fa92 into main Dec 13, 2025
3 checks passed
@idursun idursun deleted the await-on-operation-result branch December 13, 2025 08:31
@OliverJAsh
Copy link
Copy Markdown
Contributor

OliverJAsh commented Dec 14, 2025

This is great @idursun 👏

I noticed your command doesn't move the cursor to the new commit. How would I go about doing that?

@idursun
Copy link
Copy Markdown
Owner Author

idursun commented Dec 14, 2025

You can move to any commit using:

revisions.navigate { to = <change id goes here> }

Having said that though, in my case, it is automatically moving to @ already. Is it staying on the same revision and not moving to the new one in your case?

@OliverJAsh
Copy link
Copy Markdown
Contributor

I had to make a small change to make sure the new commit is inserted on top of the same commit that was just described (rather than the current working copy commit which might be a different commit):

[custom_commands."inline commit"]
  key_sequence = ["w", "x"]
  lua = '''
  if revisions.start_inline_describe() then
    jj("new", revisions.current())
  end
  '''

@idursun
Copy link
Copy Markdown
Owner Author

idursun commented Dec 14, 2025

Ah, I see. Then the following should work I think:

[custom_commands."inline commit"]
  key_sequence = ["w", "x"]
  lua = '''
  if revisions.start_inline_describe() then
    jj("new", revisions.current())
    revisions.navigate { to = "@" }
  end
  '''

@OliverJAsh
Copy link
Copy Markdown
Contributor

When I run this on a selected commit that is not the working copy commit, the navigate call seems to interfere with the inline describe:

Screen.Recording.2025-12-14.at.16.46.52.mov

@idursun
Copy link
Copy Markdown
Owner Author

idursun commented Dec 14, 2025

@OliverJAsh are you on the main branch or on 0.9.8? This only works on the main branch for now. I haven't released it yet.

I added refresh after new to correctly navigate to the new commit, seems to be working just fine on main.

[custom_commands."inline commit"]
  key_sequence = ["w", "x"]
  lua = '''
  if revisions.start_inline_describe() then
    jj("new", revisions.current())
    revisions.refresh()
    revisions.navigate { to = "@" }
  end
  '''

@OliverJAsh
Copy link
Copy Markdown
Contributor

I'm using 0.9.8, I will wait for the next release, thanks!

tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Jan 9, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [idursun/jjui](https://github.com/idursun/jjui) | patch | `v0.9.8` → `v0.9.9` |

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>idursun/jjui (idursun/jjui)</summary>

### [`v0.9.9`](https://github.com/idursun/jjui/releases/tag/v0.9.9)

[Compare Source](idursun/jjui@v0.9.8...v0.9.9)

### Release Notes

Another release with small improvements and bug fixes. Thanks to all contributors!

#### 🎉 New Features

##### Custom Commands & Lua API Enhancements

- **Custom Commands with Sequence Keys** ([#&#8203;420](idursun/jjui#420))
  - Added `key_sequence` property allowing custom commands to be invoked with multiple key presses in sequence
  - Added `desc` property for command descriptions
  - Introduced sequence overlay UI showing available key sequences when first key is pressed
  - Example: `key_sequence = ["w", "b", "l"]`

- **Lua API: Choose Method and UI** ([#&#8203;427](idursun/jjui#427)) ([#&#8203;442](idursun/jjui#442))
  - New `choose()` function for interactive selection prompts in Lua scripts
  - New `input()` function to prompt users for text input with customizable title and prompt
  - New `split_lines()` function for text processing

- **Lua API: Await on Operation Results** ([#&#8203;422](idursun/jjui#422))
  - `start_inline_describe()` now returns boolean indicating if operation was applied or cancelled
  - Enables conditional command execution based on user actions
  - Fixes [#&#8203;310](idursun/jjui#310)

- **Lua API: Interactive Commands** ([commit 8b257263](idursun/jjui@8b257263))
  - Added `jj_interactive` Lua function for interactive jj command execution

##### Navigation & UI Improvements

- **Ace Jump for Operations** ([#&#8203;445](idursun/jjui#445))
  - Pressing 'f' in set\_parents/duplicate/rebase/squash modes now triggers ace jump
  - After jump completes, returns to the original operation mode instead of normal mode
  - Closes [#&#8203;394](idursun/jjui#394)

- **Preview Width Variable** ([#&#8203;452](idursun/jjui#452))
  - Added `$preview_width` placeholder variable for preview commands
  - Exposes actual view width (in columns) to enable tools like delta to use `--side-by-side` correctly
  - Width updates dynamically when preview pane is resized
  - Similar to fzf's `$FZF_PREVIEW_COLUMNS`

- **Configurable Flash Message Display Time** ([#&#8203;456](idursun/jjui#456))
  - New config key: `ui.flash_message_display_seconds` (default: 4)
  - Special value `0` means messages display until manually dismissed
  - Fixes [#&#8203;455](idursun/jjui#455)

- **Page Up/Down Key Configuration** ([#&#8203;437](idursun/jjui#437))
  - ScrollUp/Down keys now registered in config instead of hardcoded
  - Keys exposed to configuration for customization
  - Fixes [#&#8203;360](idursun/jjui#360)

##### SSH & Authentication

- **SSH Askpass Support** ([#&#8203;423](idursun/jjui#423))
  - New `[ssh] hijack_askpass` setting to prompt for SSH passphrases/PINs within jjui
  - Works on Linux and macOS
  - Properly handles prompt overriding and cancellation
  - Fixes [#&#8203;100](idursun/jjui#100)

#### 🐛 Bug Fixes

- **Exec Command History** ([#&#8203;458](idursun/jjui#458))
  - Fixed issue where selected command history wasn't applied in exec mode
  - Input value now properly updated when selecting from fuzzy/regex suggestions
  - Selected commands correctly saved to history

- **Menu Pagination Display** ([#&#8203;446](idursun/jjui#446))
  - Fixed incorrect `%d/%d` pagination display
  - Height now calculated before pagination render
  - Added tab/shift+tab to short help menu
  - Fixes [#&#8203;444](idursun/jjui#444)

- **Flash Message Width** ([#&#8203;432](idursun/jjui#432))
  - Added maxWidth (50% of screen) to flash message rendering
  - Messages now properly line-wrap instead of extending beyond window width

- **Operation Log Refresh** ([#&#8203;431](idursun/jjui#431))
  - Operation log now returns Refresh and SelectionChanged messages upon closing
  - Fixes [#&#8203;430](idursun/jjui#430)

- **Custom Commands List Sorting** ([commit 3fa9783a](idursun/jjui@3fa9783a))
  - Fixed custom commands list to use stable sort
  - Fixes [#&#8203;424](idursun/jjui#424)

- **JJ Error Pass-through** ([#&#8203;421](idursun/jjui#421))
  - jjui now properly passes through stderr from jj commands
  - Error messages are more informative and show actual jj errors

- **Navigation Message Display** ([commit 94a4a874](idursun/jjui@94a4a874))
  - Navigation messages now only shown for paged scrolls

#### What's Changed

- main: pass through jj error by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;421](idursun/jjui#421)
- feat(lua): add ability to await on operation results (cancelled/applied) by [@&#8203;idursun](https://github.com/idursun) in [#&#8203;422](idursun/jjui#422)
- oplog: return Refresh and SelectionChanged upon oplog closing by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;431](idursun/jjui#431)
- feat(nix): add comprehensive nix flake by [@&#8203;doprz](https://github.com/doprz) in [#&#8203;426](idursun/jjui#426)
- Add option to hijack SSH Askpass to prompt for passphrase/pin by [@&#8203;oliverpool](https://github.com/oliverpool) in [#&#8203;423](idursun/jjui#423)
- feat(lua): add choose method and ui by [@&#8203;idursun](https://github.com/idursun) in [#&#8203;427](idursun/jjui#427)
- flash: add maxWidth to flash msg rendering by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;432](idursun/jjui#432)
- keys: add pageup/down to keys config by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;437](idursun/jjui#437)
- chore(github): Add Adda0 as an automatic reviewer for Nix-related changes by [@&#8203;Adda0](https://github.com/Adda0) in [#&#8203;440](idursun/jjui#440)
- feat: add .editorconfig by [@&#8203;doprz](https://github.com/doprz) in [#&#8203;434](idursun/jjui#434)
- Add input and log to custom\_commands API by [@&#8203;ArnaudBger](https://github.com/ArnaudBger) in [#&#8203;442](idursun/jjui#442)
- oplog,list: refactor scrolling with Scrollable/StreamableList interface by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;429](idursun/jjui#429)
- menu: calculate height before pagination render by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;446](idursun/jjui#446)
- operations: enable ace jump for set\_parents/duplicate/rebase/squash by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;445](idursun/jjui#445)
- feat: make flash message display time configurable by [@&#8203;living180](https://github.com/living180) in [#&#8203;456](idursun/jjui#456)
- feat: add $width variable for preview commands by [@&#8203;pablospe](https://github.com/pablospe) in [#&#8203;452](idursun/jjui#452)
- status: fix exec command history not applied by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;458](idursun/jjui#458)

#### New Contributors

- [@&#8203;doprz](https://github.com/doprz) made their first contribution in [#&#8203;426](idursun/jjui#426)
- [@&#8203;oliverpool](https://github.com/oliverpool) made their first contribution in [#&#8203;423](idursun/jjui#423)
- [@&#8203;living180](https://github.com/living180) made their first contribution in [#&#8203;456](idursun/jjui#456)
- [@&#8203;pablospe](https://github.com/pablospe) made their first contribution in [#&#8203;452](idursun/jjui#452)

**Full Changelog**: <idursun/jjui@v0.9.8...v0.9.9>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **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 [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43NS4xIiwidXBkYXRlZEluVmVyIjoiNDIuNzUuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90IiwiYXV0b21hdGlvbjpib3QtYXV0aG9yZWQiLCJkZXBlbmRlbmN5LXR5cGU6OnBhdGNoIl19-->
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.

FR: Inline commit

3 participants