Skip to content

feat(lua): add context module#465

Merged
idursun merged 1 commit intomainfrom
feat/context-module
Jan 12, 2026
Merged

feat(lua): add context module#465
idursun merged 1 commit intomainfrom
feat/context-module

Conversation

@idursun
Copy link
Copy Markdown
Owner

@idursun idursun commented Jan 12, 2026

Adds a new Lua context API surface for scripts, exposing selected item metadata (change/commit IDs, file path, operation ID) and checked-item helpers, then wires it into both the jjui namespace and top-level globals.

An example:

# Open file in editor
[custom_commands."Open file in editor"]
key_sequence = ["i", "f"]
name = "Open file in editor"
lua = '''
local f = context.file()
if f then
  jj_interactive("util", "exec", "--", os.getenv("EDITOR") or "vim", f)
else
  flash("No file selected")
end
'''

closes #433

@idursun idursun merged commit ad427ae into main Jan 12, 2026
4 checks passed
@idursun idursun deleted the feat/context-module branch January 12, 2026 20:56
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Jan 18, 2026
This MR contains the following updates:

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

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.10`](https://github.com/idursun/jjui/releases/tag/v0.9.10)

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

### Release Notes

#### 🆕 Features

##### Lua Scripting Enhancements

- **Lua Context Module** ([#&#8203;465](idursun/jjui#465)): Added context module to Lua scripting API, exposing methods for accessing selected item metadata and checked items:
  - `context.change_id()` - Get the change ID of selected revision or file
  - `context.commit_id()` - Get the commit ID of selected revision, file, or commit
  - `context.file()` - Get the file path of selected file
  - `context.operation_id()` - Get the operation ID of selected operation
  - `context.checked_files()` - Get array of checked file paths
  - `context.checked_change_ids()` - Get array of change IDs from checked items
  - `context.checked_commit_ids()` - Get array of commit IDs from checked items
- **Shell Execution in Lua** ([#&#8203;471](idursun/jjui#471)): Exposed `exec_shell()` function to Lua scripts, enabling interactive commands like opening files in external editors directly from jjui. This enables custom commands such as:
  ```toml
  [custom_commands.open_file]
  key = ["O"]
  lua = '''
  local file = context.file()
  if not file then
      flash("No file selected")
      return
  end
  exec_shell("vim " .. file)
  '''
  ```

#### ✨ Improvements

- **Abandon Workflow**: Removed confirmation dialog; users can now use Space to add/remove revisions from the abandon list

#### 🐛 Bug Fixes

- **Preview Pane Scrolling** ([#&#8203;472](idursun/jjui#472)): Fixed broken Ctrl-U/Ctrl-D scrolling in the preview pane that was introduced by earlier input routing changes. Preview commands are now properly grouped and always handled.
- **Parser**: Fixed handling of divergent change ID format
- **Bookmarks**: Fixed tracking of new bookmarks (currently tracks all remotes)

#### 🔧 Compatibility

- **Jujutsu 0.36.0 Support** ([#&#8203;407](idursun/jjui#407)): Updated commands to work with breaking changes in Jujutsu 0.36.0:
  - Changed `--destination` flag to `--onto`
  - Changed `--edit` flag to `--editor`
  - Removed deprecated `--allow-new` flag from `git push` commands
  - Updated keybinding from `d` to `o` for `--onto` flag in related modes

#### 📝 Documentation

- **README Updates** ([#&#8203;470](idursun/jjui#470)):
  - Added missing op log revert item to help menu
  - Fixed redo documentation
  - Updated custom command examples

#### What's Changed

- jj-update: fix commands to work with breaking changes in jj-0.36.0 by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;407](idursun/jjui#407)
- refactor(abandon): remove confirmation dialog by [@&#8203;idursun](https://github.com/idursun) in [#&#8203;462](idursun/jjui#462)
- fix(bookmarks): track new bookmarks by [@&#8203;idursun](https://github.com/idursun) in [#&#8203;463](idursun/jjui#463)
- feat(lua): add context module by [@&#8203;idursun](https://github.com/idursun) in [#&#8203;465](idursun/jjui#465)
- lua: expose exec\_shell to lua script by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;471](idursun/jjui#471)
- README improvements and help menu missing item by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;470](idursun/jjui#470)
- ui,preview: fix preview pane ctrl-u/d scrolling by [@&#8203;baggiiiie](https://github.com/baggiiiie) in [#&#8203;472](idursun/jjui#472)

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

</details>

---

### Configuration

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

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever MR is behind base branch, 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NC4wIiwidXBkYXRlZEluVmVyIjoiNDIuODQuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90IiwiYXV0b21hdGlvbjpib3QtYXV0aG9yZWQiLCJkZXBlbmRlbmN5LXR5cGU6OnBhdGNoIl19-->
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.

IP: context methods in Lua

1 participant