Skip to content

[Bug] Text input made readonly  #46

Open
@Ajaymamtora

Description

@Ajaymamtora

Description

When setting the buffer to start in visual mode, the text input is readonly. Seems similar to #17

Repro

local M = {}

vim.api.nvim_create_user_command("NuiGoToLine", function()
  M.go_to_line_nui()
end, {})

local function go_to_line(input)
  -- Print the input
  print(input)

  -- Check if the input matches the format LINE or LINE:COLUMN using a Lua pattern
  local line, column = input:match("^(%d+):?(%d*)$")

  -- Return early if the input is not in the correct format
  if not line then
    print("Input must be in the format LINE or LINE:COLUMN")
    return
  end

  -- Convert line and column to numbers
  line = tonumber(line)
  column = tonumber(column)

  -- Default to column 1 if no column is provided
  if column == 0 then
    column = 1
  end

  -- Go to the specified line and column
  vim.api.nvim_win_set_cursor(0, { line, column })
end

function M.go_to_line_nui()
  local n = require("nui-components")
  local event = require("nui.utils.autocmd").event

  local r, c = unpack(vim.api.nvim_win_get_cursor(0))

  local signal = n.create_signal({
    value = r .. ":" .. c,
  })

  local subscription = signal:observe(function(previous_state, current_state)
    -- call side effects
  end)

  local renderer = n.create_renderer({
    width = 80,
    height = 1,
  })

  renderer:add_mappings({
    {
      mode = { "n", "i", "v" },
      key = "<CR>",
      handler = function()
        go_to_line(signal.value:get_value())
        renderer:close()
      end,
    },
    {
      mode = { "n", "i" },
      key = "<C-q>",
      handler = function()
        renderer:close()
      end,
    },
  })
  local content
  content = n.text_input({
    autofocus = true,
    autoresize = true,
    size = 1,
    value = signal.value,
    border_label = "Go to line",
    placeholder = "L:C",
    max_lines = 1,
    on_change = function(value, component)
      signal.value = value

      component:modify_buffer_content(function()
        -- component:set_border_text("bottom", "Length: " .. #value, "right")
      end)
    end,
    on_mount = function(component)
      local initial_value = signal.value:get_value()

      component:set_border_text("bottom", "Current: " .. r .. ":" .. c, "right")

      local _close = function()
        renderer:close()
      end
      vim.api.nvim_create_autocmd({ "BufLeave" }, { callback = _close, once = true })

      -- Start visual mode
      vim.cmd("normal! v")
    end,
  })

  local body = function()
    return content
  end
  renderer:on_unmount(function()
    subscription:unsubscribe()
  end)

  renderer:render(body)
end

return M

Current Behavior

Input set to readonly

Expected Behavior

Dont set to readonly

NuiComponents version

Main caecfe2

Neovim version

0.10 stable

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