Commit Graph
53 Commits
Author SHA1 Message Date
NicolasGB b32ba1aa5e fix(utils): get_all_bookmarks returns only local and non deleted ones 2025-11-27 21:29:37 +01:00
NicolasGB 8350606dab feat(cmd): add platform-agnostic PR/MR opening functionality 2025-11-27 20:58:34 +01:00
NicolasGB e22bf5ec4e feat: Add fetch/push commands and log keybinds, make long-running operations non-blocking
Convert blocking jj commands to async using vim.fn.jobstart() to prevent UI
freezing during fetch, push, rebase, squash, and other heavy operations.

Changes:
- Implement execute_command_async() in runner with proper error handling
  - Captures stdout from job and passes to success callback
  - Supports stdin input for commands that require it
  - Includes silent flag to suppress error notifications
  - Replicates sync version's error handling behavior

- Convert blocking operations to async:
  - handle_log_fetch, handle_log_push_all, handle_log_new
  - handle_log_edit, handle_log_abandon, handle_log_describe
  - describe.execute_describe, all init.lua commands

- Add push/fetch as public commands with CLI support:
  - M.fetch() - fetch from remote
  - M.push(opts) - push all changes or specific bookmark
  - CLI: :J push, :J push <bookmark>, :J fetch

- Implement handle_log_push_bookmark() for revision under cursor:
  - Retrieves and strips modified bookmark indicator (*)
  - Pushes specific bookmark to remote
  - Keybind: Shift+p in log buffer

- Update README with new keybinds:
  - a: abandon revision under cursor
  - f: fetch from remote
  - p: push all changes
  - Shift+p: push revision's bookmark

- Add Lua API docs for push command options
2025-11-27 20:58:34 +01:00
NicolasGB 8f1a60342a feat: implement jj abandon as native 2025-11-27 20:58:34 +01:00
Nicolas GBandGitHub 10c611eaab feat: add close_on_edit config for log buffer (#48)
- Add close_on_edit option to close log buffer after editing a change (default: false)
- Rename handle_log_enter to handle_log_edit with close_on_exit parameter
- Update log keymaps to pass close_on_edit config to handlers
- Update config types and defaults in init.lua
2025-11-26 15:48:56 +01:00
Nicolas GBandGitHub 39de3c6bc9 fix: Improve the parser and add test to handle edge cases (#42) 2025-11-26 09:42:45 +01:00
NicolasGB 7329e89a85 feat(terminal): add configurable cursor render delay for terminal buffers
Add cursor position restoration with configurable timing to handle terminal
     buffer rendering asynchronously. This fixes cursor column being reset to 0
     when refreshing jj log commands.

     Changes:
     - Add `terminal.cursor_render_delay` configuration option (default: 10ms)
     - Add buffer.get_cursor() and buffer.set_cursor() helpers in core/buffer
       * buffer.set_cursor() uses defer_fn with configurable delay for terminal buffers
       * Automatic position validation with clamping to buffer bounds
       * Line number clamped to [1, line_count]
       * Column clamped to [0, line_length] based on actual line content
       * Validation happens inside deferred callback to check against final rendered content
     - Extract clamp_cursor_position() helper to eliminate code duplication
     - Refactor terminal module to use new buffer cursor helpers
     - Store and restore cursor position when cycling through log commands
     - Update README with terminal configuration section and example usage

     The delay is necessary because nvim_open_term() + nvim_chan_send() have
     asynchronous rendering in the terminal emulator layer. Setting the cursor
     before rendering completes results in the column being reset to 0. Users
     experiencing issues can increase the delay value if needed.
2025-11-25 09:10:12 +01:00
NicolasGB 0cd1f554a6 fix: Correctly parse complex subcommands and push a table to terminal.run() when it's possible instead of making a concat 2025-11-23 18:07:30 +01:00
NicolasGB c5a51a1beb refactor: Make the floating buffer configurable keymaps too 2025-11-23 16:34:42 +01:00
NicolasGB 050608c2cc refactor: remove hardcoded closing keymaps on the terminal buffer 2025-11-23 16:34:42 +01:00
NicolasGB a96a5c7849 refactor: split cmd.lua into multiple files when commands have enough business inside them 2025-11-23 16:34:42 +01:00
NicolasGB be925a9882 Update README with new config structure
- Document describe.editor configuration for type and keymaps
- Document keymaps configuration for log, status, and close keybindings
- Update examples to show the new nested config structure
- Add section on customizing describe editor keymaps
- Preserve multiline descriptions in describe editor buffer
2025-11-23 16:34:42 +01:00
NicolasGB b34e08d815 fix: describe command reopening log buffer without flicker
- Close terminal buffer before opening describe editor
  - Capture log state before closing to detect if we should reopen
  - Add on_unload callback to editor to handle log reopening
  - Suppress redraws during buffer transitions with lazyredraw
  - Remove duplicate hardcoded status keymaps from terminal.lua (were referencing undefined functions)
  - Fix resolve_keymaps_from_specs to validate handlers exist before creating keymaps
2025-11-23 16:34:42 +01:00
NicolasGB f06b23326e refactor: Restructure keymaps and event handlers into centralized config-driven system
- Add M.setup() to cmd module for configuration
    - Move describe editor config to M.config.describe.editor with nested structure
    - Add keymaps config with separate log, status, and close sections
    - Implement resolve_keymaps_from_specs() helper to build keymap lists from config
    - Extract editor.open_editor() keymaps parameter support
    - Move status/log event handlers from terminal.lua to cmd.lua
    - Convert log/status buffer keymaps to config-driven approach with handler specs
2025-11-23 16:34:42 +01:00
NicolasGB f0cfb459bd refactor: create a new buffer module to centralize buffer operation logic 2025-11-23 16:34:42 +01:00
NicolasGB e545d02ceb refactor: restructure the whole plugin following a better separation of concers 2025-11-23 16:34:42 +01:00
NicolasGB f6982a7716 fix: split with the same logic as the editor 2025-11-23 16:34:42 +01:00
Nicolas GBandGitHub d385501067 fix: Improve default command parsing logic and allow for toml array definition. (#37) 2025-11-20 13:21:15 +01:00
Sivansh GuptaandGitHub 3f6049b17c feat: D to describe a change in log buffer (#23) 2025-11-20 10:03:06 +01:00
SpiegieandGitHub 9446ad8f69 Feat: edit mutable changes in log buffer (#30) 2025-11-19 16:21:37 +01:00
NicolasGB 9d39e74ce5 fix: update clearing buffer, this makes the plugin work again on nightly 2025-11-18 17:21:29 +01:00
NicolasGB 84ba77a8fc fix(log): Add u/r keymaps for undoing and redoing operations on log buffer. 2025-11-18 14:33:16 +01:00
NicolasGB 10c9a07ad7 Refactor M.j() command dispatch to use handler table
- Replace nested if/elseif chains with dispatch table for cleaner pattern matching
- Store remaining_args_str to avoid repeated table.concat() calls
- Simplify whitespace trimming using vim.trim() instead of gsub patterns
- Add state.buf_cmd tracking to store subcommand on successful execution for conditional UI refreshes
- Clean up state on buffer close and execution failure
- Add conditional log refresh for squash(), undo(), and redo() when log buffer is active
- Fix type annotations for nil handling
2025-11-18 14:04:21 +01:00
NicolasGB e0370ad0ca feat: Make undo/redo native 2025-11-18 14:04:21 +01:00
NicolasGB af6dbbc3a7 fix(cmd): Improve default command parsing logic, to allow for builtin functionalities to be used 2025-11-18 14:00:34 +01:00
NicolasGB b41812e0f8 feat(cmd): enhance log new handling with after/ignore-immutable 2025-11-18 14:00:34 +01:00
NicolasGB c3aba8f35f feat(log): Add n keybinding to create commits after the revision under the cursor 2025-11-18 14:00:34 +01:00
NicolasGB 9ef710390b feat(log): add conflict symbol × (U+00D7) to revision parser 2025-11-12 14:10:21 +01:00
NicolasGB a33cbba40f refactor(diff): Improve api with lua types and more flexibility 2025-10-31 14:50:43 +01:00
NicolasGB f0915d415d fix(diff): Apply filetype to new buffer to maintain syntax highlighting 2025-10-30 10:07:53 +01:00
Lars HansenandGitHub 775c9a57cc Add diff split (#13) 2025-10-29 11:44:36 +01:00
NicolasGB 756ad1da4a fix(describe): Handle "C" case status in files 2025-10-28 09:45:08 +01:00
Eric BowerandGitHub 84b53215b3 feat: :J desc short hand for describe (#12) 2025-10-23 09:02:25 +02:00
Shardul BaralandGitHub 5ae139d055 Fix initialization/cleanup of buffer-specific hotkeys (#10) 2025-10-21 09:25:50 +02:00
NicolasGB d828009198 feat(bookmark): Allow creating and deleting bookmarks natively 2025-10-14 16:22:08 +02:00
NicolasGB fb43a3f33d fix: Move a helper function to the utils file 2025-10-02 10:20:36 +02:00
ea4fa1ff06 Change the :J describe behaviour to open an editable buffer instead of an input box (#6)
Co-authored-by: fautore <fautore@protonmail.com>
2025-10-02 09:43:04 +02:00
NicolasGB b8eb856228 fix: Use show command instead of diff on log panel 2025-07-15 11:13:03 +02:00
Brad ShermanandGitHub 2d6df945d7 feat: jj rebase command (#3) 2025-07-15 10:21:24 +02:00
NicolasGB 1fa03217f1 feat: Add d keybind in log output to diff a change on a floating window 2025-07-08 18:28:07 +02:00
Dragoș StrăinuandGitHub 5d3e56da81 feat: use X keybind to restore a file from jj status (#2) 2025-07-08 17:28:05 +02:00
NicolasGB c474bc63f2 feat(log): Pressing "Enter" on mutable log lines runs jj edit to seamlessly navigate repisotory commit history 2025-07-08 12:15:20 +02:00
NicolasGB b6def1df67 feat(picker): Add file history picker 2025-07-03 21:46:24 +02:00
NicolasGB 5aaf396b70 fix: remove debug notification 2025-07-03 19:07:21 +02:00
NicolasGB 59c0750437 feat(diff): Add options to diff command to allow diffing only current buffer 2025-07-03 19:04:00 +02:00
NicolasGB 4dd51c5ba9 fix: Handle correctly renamed files when openning from status command 2025-07-03 17:48:55 +02:00
Dragoș StrăinuandGitHub d699a3dc72 feat: open file from jj status in buffer above (#1) 2025-07-03 17:44:42 +02:00
NicolasGB 854ee40ce0 feat(new): Allow passing arguments to through the cli and add better UX flow on lua api 2025-07-02 18:12:26 +02:00
NicolasGB b258574092 feat(picker): Add a snacks picker with jj status command 2025-06-30 17:42:54 +02:00
NicolasGB e43c665441 refactor: Expose a j function to allow the user to call custom subcommands through lua api 2025-06-27 18:56:12 +02:00