Commit Graph
59 Commits
Author SHA1 Message Date
Nicolas GBandGitHub b7c17af6d2 fix(cmd): Parse default commands through a json template to avoid manual parsing through regex (#137) 2026-07-10 09:06:28 +02:00
Nicolas GBandGitHub 7f2786ff16 refactor!: Migrate runners cmd from string to argv (#134)
Migrate command execution to structured argv lists across the plugin, replacing shell-string command construction with `vim.system` argv execution. The runner API now exposes argv-based execution as the default path:

   - `runner.execute_command` -> `runner.execute`
   - `runner.execute_command_async` -> `runner.execute_async`
   - `runner.execute_command_raw` -> `runner.execute_raw`
   - `runner.execute_command_raw_async` -> `runner.execute_raw_async`
   - `runner.execute_command_sync` was removed; use `runner.execute` and handle the result directly

BREAKING CHANGES:
   - `cmd.new({ args = ... })` now requires `args` as `string[]` argv tokens, not a single string.
   - `cmd.log({ ... })` now uses `raw_flags` as `string[]` for raw passthrough flags; `raw = "..."` is no longer supported.
   - Direct users of `jj.core.runner` must migrate from the old `execute_command*` string helpers to the new argv-based `execute*` helpers.
2026-07-07 18:25:30 +02:00
NicolasGB c724290141 fix(filesets): Correclty escape filesets in different commands to avoid
special characters breaking jj's parsing
2026-06-30 12:45:40 +02:00
NicolasGB aa3e98af26 fix(terminal): pass argv to native resolve
Pass raw command arguments to the interactive floating terminal instead
    of a shell-escaped string.

    This fixes native `jj resolve` exiting immediately when opened without
    an external tool.
2026-06-18 17:50:38 +02:00
Nicolas GBandGitHub 7fc91fe6d2 feat(resolve): add resolve command and log integration (#125)
Add first-class conflict resolution support to jj.nvim.

   - add `jj.cmd.resolve` to run `jj resolve` in a floating terminal or via an
     external tool
   - add `:J resolve` with support for `-r/--revision`, `--tool`,
     `--external/--ext`, and positional filesets
   - integrate resolve into the log buffer with the `gr` mapping and optional
     `resolve_strategies` picker
   - add `utils.is_change_conflicted()` and avoid opening resolve when the
     selected revision has no conflicts
   - document resolve usage, config, and keymaps in the README
   - add tests for resolve arg parsing and conflict detection helpers
2026-06-16 19:06:33 +02:00
Nicolas GBandGitHub 9f2a76d079 feat(push): Add the possibility to push to arbitrary remotes through the vim command (#124) 2026-06-16 18:46:46 +02:00
Nicolas GBandGitHub 33179e2f15 feat(duplicate): Add a duplication mode (#118) 2026-06-08 09:09:28 +02:00
larpiandGitHub 688616db52 feat(push): add the deleted option for the push operation (#117) 2026-06-03 09:21:10 +02:00
NicolasGB f30eefeaf3 fix(describe): Allow for empty descriptions in the editor 2026-05-26 15:41:11 +02:00
b3d449ad41 fix(status): pass --no-pager to jj status (#113)
Co-authored-by: Tejas Sanap <tejas.sanap@beacon.io>
2026-05-19 11:25:46 +02:00
larpiandGitHub a2d194d49e feat(log): add bookmark deletion command (#106) 2026-05-05 17:25:13 +02:00
NicolasGB 46932e5410 feat(log/summary): Add o keymap from the summary that allows users to
do the equivalent of `Jtabedit` of the file in under the cursor
2026-04-28 17:52:34 +02:00
Jonas ElhsandGitHub 46141a282e feat!(terminal): unify terminal window behavior and centralize sizing config (#102)
- add terminal.window.type support (hsplit, vsplit, floating, tab)
- add terminal.window.split_size for split-based layouts
- rename floating size options to terminal.window.floating_width/floating_height
- validate terminal window ratios during setup
- make terminal.run/run_floating merge default keymaps internally
- remove cmd.split width/height sizing in favor of terminal.window config
- improve floating/log buffer state handling and refresh behavior
- update README examples and configuration docs

BREAKING CHANGE: terminal sizing/config moved to terminal.window.*.
Removed cmd.split.width/cmd.split.height.
Renamed terminal.window.width/height to terminal.window.floating_width/floating_height
2026-04-07 10:31:12 +02:00
NicolasGB 578c5f15df feat(diff): Now diff command supports <rev1>..<rev2> format 2026-04-04 15:50:52 +02:00
Naoki MizunoandGitHub a6e163bcc3 feat(log/keymap): add keymaps to move on revision in log buffer (#100) 2026-03-19 11:06:53 +01:00
NicolasGB 29e4cd054e fix(bookmark): Always move bookmars with -B to allow the user moving
it forward and backwards seemlessly
2026-03-17 11:34:40 +01:00
NicolasGB d357409268 feat(log): Add change_revset keybind to change the current log revset
being displayed in the log command
2026-03-12 18:04:39 +01:00
NicolasGB 80caa923c2 feat(cmd): Implement the bookmark forget as a native function 2026-03-12 18:04:39 +01:00
Nicolas GBandGitHub 1c3d38a626 feat(diff): Add the diff_history command (#97)
This new command is natively implemented by both the `codediff` and `diffview` backends allowing to easily navigate the changes between two revsets while diffing the. 

It also gives a new `:J diff_hisotyr` command that optionally takes a range of revsets formatted `<rev1>..<rev2>` otherwise it prompts the user for the range.
2026-03-12 18:03:23 +01:00
NicolasGB bbba4051c8 feat(fetch_pr): Introdue the fetch_pr command that allows to pick open
Pull requests from github and import them locally
2026-02-24 18:18:59 +01:00
Wonung KimandGitHub d6aa067854 fix(keymap): use nowait opts when there are no shared prefixes (#93) 2026-02-24 10:17:42 +01:00
Wonung KimandGitHub 69679f2e15 feat: use sync describe when the log buffer should be re-opened (#91) 2026-02-23 11:26:13 +01:00
Wonung KimandGitHub f3511cb4b3 feat: refresh buffers when moving the change (#92) 2026-02-23 10:11:20 +01:00
5156fa1a3e fix: prevent duplicate --no-pager in jj log command (#90)
Co-authored-by: Roman Konoval <rkonoval@rkonoval.com>
2026-02-23 09:44:10 +01:00
Nicolas GBandGitHub 138044c7e3 feat(browse): add :Jbrowse to open current file on remote (#89) 2026-02-22 09:05:13 -08:00
Nicolas GBandGitHub 19db4e8178 feat(tag): Implement set/delete/push (push only colocated repistories) (#84) 2026-02-22 08:53:51 -08:00
Trung LamandNicolas GB 86d15cecec Add --no-pager for jj log
This allows long lists of revisions to be viewable instead of being
truncated.
2026-02-19 16:20:42 +01:00
Roman KonovalandNicolas GB d483544483 Fixes default command parsing 2026-02-18 09:22:30 +01:00
NicolasGB 3d78c28f7e feat(split): add jj split command with interactive floating terminal
Add split command that allows splitting a change into multiple revisions
    from the log buffer or via :J split. Supports --parallel, --message,
    --fileset, and --ignore-immutable flags. Includes immutability checks
    with user confirmation and empty change detection.
2026-02-13 18:44:27 +01:00
NicolasGB 2318e5ecfc feat(cmd/bookmark): Add a new bookmark_track command that uses
vim.ui.select listing the currently untracked remotes
2026-02-10 17:35:29 +01:00
NicolasGB 149ae9ebc7 fix(commit): Migrate from simulated commit to jj's native command.
- This required some improvements on the editor buffer logic,
      introduced a `on_write` (previously on_done but it wasn't the
      right meaning) hook and an `on_unload` to allow for both
      describe and commit correct workflows.
    - Introduced an utils function to extract the description text and
      clean it post buffer write
2026-02-07 17:32:57 +01:00
NicolasGB 400a3a5263 fix(describe/keymaps): Remove <ESC> from default keymap which may not be a
sensitive default after some users feedback
2026-02-02 17:08:39 +01:00
Nicolas GBandGitHub 335663c3ee Feat: Rewrite diff module to allow for external dependencies as jj.nvim's diff tool (#74)
- Refactor diff into modular architecture (native, diffview, codediff)
- Add the possibility for users to define their own diff backend
- Support external diff tools like diffview.nvim codediff.nvim
- Enable visual mode selection to diff two changes in log buffer
- Add summary tooltip integration with terminal
- Update documentation with new diff workflows
2026-01-25 09:39:31 -08:00
Nicolas GBandGitHub 8ed2aa52aa feat(log): Add summary view (#70)
Display a summary of changed files for any revision in the log buffer
using a floating tooltip. From the tooltip, users can diff or edit
specific files directly.

- Add summary tooltip triggered by <S-k> in log buffer
- Integrate tooltip as stateful component of terminal
- Make summary keymaps configurable
- Add documentation and demo gif
2026-01-25 09:25:06 -08:00
NicolasGB 9a20b24849 feat(cmd): Add jj commit as a native command 2026-01-22 11:00:07 +01:00
Marty OehmeandNicolas GB d13a5c9aec feat(cmd): Add option to set describe type for cmd
Adds the global option `describe.editor.type` to the exposed describe
command api, so it can be executed e.g. with:

`require("jj.cmd").describe(nil,nil,{with_status=false,type="input"})`

This allows having different types of describe commands invoked in a
single setting, without having to change the global plugin option.

Takes the same two option enums as the global variable, "buffer" or
"input". Is an optional field, which is given precedence to the older
order of setting the variable. That order remains the same.
2026-01-11 23:17:37 +01:00
NicolasGB 80d3a88f16 feat(log)!: add interactive bookmark selection for push commands and
remove push all method. 

BREAKING CHANGE: handle_log_push_all renamed to handle_log_push_from_all
and now requires user to select a bookmark instead of pushing all.

- Add vim.ui.select prompt when revision has multiple bookmarks
- Include "[All]" option to push all bookmarks from a revision
2026-01-09 18:26:17 +01:00
NicolasGB 5b20479cff feat(log): Allow creating new changes with multiple parents through
visual selection
2026-01-09 13:59:27 +01:00
NicolasGB b6d7ebddf6 feat(log): Allow abandoning multiple changes at once through visual
selection
2026-01-09 13:09:45 +01:00
NicolasGB 9d9e2379fd feat(log): Implement squash and quick squash from the log buffer.
- Squash: behaves like rebase, the user can select 1 or more
      revisions to squash and then a destination
    - Quick squash: `-r {rev} -u --ignore-immutable` flag from jj allowing
      for quick visuall squashes
2026-01-08 18:29:04 +01:00
NicolasGB ba48ed08b5 feat(log): add immutable-ignoring rebase keymaps
Changes add support for rebasing while ignoring immutability constraints with new keymaps (<S-CR>, <S-o>, <S-a>, <S-b>) and update documentation. Refactors rebase handler to accept optional ignore_immut parameter and includes minor comment improvements in buffer and command modules.
2026-01-06 13:20:19 +01:00
Nicolas GBandGitHub 12e91e547d feat: Rebase on log buffer (#62)
Now it is possible to rebase interactively from the log buffer with visual feedback. You can rebase one or many visually selected changes.

Supported target modes are: `-o` / `-A` / `-B`.

Limitation:
	- As of now you cannot rebase a whole branch (-b) from the log view.

Bonus from this pr:
	- Now keymaps support different modes
2026-01-02 18:41:59 +01:00
NicolasGB c40dfed316 fix(log): handle bookmark now is a method of the module instead of local
like all the others
2025-12-30 12:25:56 +01:00
NicolasGB 746f78b60f fix(log): if a default prefix has been set take it into account when
creating a bookmark from the logfile
2025-12-30 12:22:47 +01:00
Nicolas GBandGitHub 6eb41f631e Feat: Annotation by file and line (#55) 2025-12-29 11:46:35 -08:00
Marco S HymanandGitHub 176456b498 Add --no-pager to the log diff handler (#58) 2025-12-29 09:47:32 -08:00
NicolasGB 40cf2fea13 fix(bookmark): add -r when creating bookmarks to correctly handle revsets 2025-12-19 19:36:54 +10:00
NicolasGB 5dc6fbafa7 fix(runner): use sh -c wrapper for safe command execution 2025-12-19 16:57:38 +10:00
NicolasGB 1fd8faed4b feat(bookmark): add prefix configuration for bookmark creation
- Add `prefix` option to `bookmark_create()` function for setting default bookmark names
- Add `bookmark.prefix` configuration option for global bookmark prefix defaults
- Update README with bookmark prefix usage examples
2025-12-18 19:43:36 +10:00
Nicolas GBandGitHub d63761e1bf feat(bookmark): add bookmark management from log buffer and bookmark_move API (#51) 2025-11-27 22:07:22 +01:00