Skip to content

[BUG] Rejecting with :q does not work #238

@vinicius507

Description

@vinicius507

Bug Description

The help section :help claudecode.nvim-working-with-diffs mentions that we can both accept and reject changes using :w or :q. Accepting seems to work fine, but rejecting simply closes one of the diff buffers and then proceeds to do absolutely nothing.

To Reproduce

Steps to reproduce the behavior:

  1. Setup claudecode.nvim with sidekick.nvim:
    return {
      {
        "coder/claudecode.nvim",
        dependencies = { "folke/snacks.nvim" },
        event = "User SidekickCliAttach",
        keys = {
          { "<leader>aA", "<cmd>ClaudeCodeDiffAccept<cr>", desc = "Accept Diff" },
          { "<leader>aR", "<cmd>ClaudeCodeDiffDeny<cr>", desc = "Reject Diff" },
        },
        opts = {
          terminal = {
            provider = "none",
          },
          diff_opts = {
            layout = "vertical",
            open_in_new_tab = true,
          },
        },
      },
      {
        "folke/sidekick.nvim",
        dependencies = { "copilot.lua", "snacks.nvim" },
        event = { "BufReadPre", "BufNewFile", "VeryLazy" },
        keys = {
          {
            "<tab>",
            function()
              if not require("sidekick").nes_jump_or_apply() then
                return "<Tab>"
              end
            end,
            expr = true,
            desc = "Goto/Apply Next Edit Suggestion",
          },
          {
            "<c-.>",
            function()
              require("sidekick.cli").toggle({ filter = { installed = true } })
            end,
            desc = "Sidekick Toggle",
            mode = { "n", "t", "i", "x" },
          },
          {
            "<leader>as",
            function()
              require("sidekick.cli").select({ filter = { installed = true } })
            end,
            desc = "Select CLI",
          },
          {
            "<leader>ad",
            function()
              require("sidekick.cli").close()
            end,
            desc = "Detach a CLI Session",
          },
          {
            "<leader>at",
            function()
              require("sidekick.cli").send({ msg = "{this}" })
            end,
            mode = { "x", "n" },
            desc = "Send This",
          },
          {
            "<leader>af",
            function()
              require("sidekick.cli").send({ msg = "{file}" })
            end,
            desc = "Send File",
          },
          {
            "<leader>av",
            function()
              require("sidekick.cli").send({ msg = "{selection}" })
            end,
            mode = { "x" },
            desc = "Send Visual Selection",
          },
          {
            "<leader>ap",
            function()
              require("sidekick.cli").prompt()
            end,
            mode = { "n", "x" },
            desc = "Sidekick Select Prompt",
          },
          {
            "<leader>ac",
            function()
              require("sidekick.cli").toggle({ name = "claude", focus = true })
            end,
            desc = "Sidekick Toggle Claude Code",
          },
          {
            "<leader>ag",
            function()
              require("sidekick.cli").toggle({ name = "gemini", focus = true })
            end,
            desc = "Sidekick Toggle Gemini",
          },
          {
            "<leader>ao",
            function()
              require("sidekick.cli").toggle({ name = "opencode", focus = true })
            end,
            desc = "Sidekick Toggle OpenCode",
          },
        },
        ---@type sidekick.Config
        opts = {
          cli = {
            win = {
              keys = {
                buffers = false,
                files = false,
                hide_n = false,
                hide_ctrl_q = false,
                hide_ctrl_dot = false,
                hide_ctrl_z = false,
                prompt = { "<M-p>", "prompt", mode = "t", desc = "Insert prompt or context" },
                stopinsert = { "<c-q>", "stopinsert", mode = "t", desc = "Enter normal mode" },
                nav_left = vim.env.ZELLIJ and false,
                nav_down = vim.env.ZELLIJ and false,
                nav_up = vim.env.ZELLIJ and false,
                nav_right = vim.env.ZELLIJ and false,
              },
            },
          },
          nes = {
            enabled = function(buf)
              local bufname = vim.api.nvim_buf_get_name(buf)
              local ignore_buffers = { "%.env.*" }
    
              return not vim.iter(ignore_buffers):any(function(pattern)
                return string.match(bufname, pattern)
              end)
            end,
          },
        },
      },
    }
  2. Open claude with sidekick.nvim (i.e. <leader>ac on the above configuration)
  3. Trigger a file edit with claude
  4. When the diff opens, try to reject with :q
  5. The current diff buffer closes but the tabpage remains open with the remaining buffer and the change is not rejected

Expected Behavior

The tabpage with the diff closes and claude refuses the edit.

Environment

  • Neovim version: 0.12.1
  • Claude Code CLI version: 2.1.107
  • OS: Linux <redacted> 6.18.22-1-lts #1 SMP PREEMPT_DYNAMIC Sat, 11 Apr 2026 17:16:25 +0000 x86_64 GNU/Linux
  • Plugin version: commit 432121f

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions