markdown plugin

enhance markdown

return {
  -- render
  { -- markview
    "OXY2DEV/markview.nvim",
    enabled = false,
    dependencies = {
      "nvim-treesitter/nvim-treesitter",
    },
    ft = { "markdown", "md", "codecompanion" },
    keys = {
      { "<C-e>", "<cmd>Markview Toggle<cr>", desc = "Markiview toggle" },
    },
    opts = {
      experimental = { check_rtp = false },
      preview = {
        filetypes = { "markdown", "codecompanion" },
      },
    },
  },
  { -- MeanderingProgrammer/render-markdown.nvim
    "MeanderingProgrammer/render-markdown.nvim",
    -- enabled = false,
    ft = { "markdown", "md", "codecompanion", "Avante", "copilot-chat" },
    keys = {
      { "<C-e>", "<cmd>RenderMarkdown toggle<cr>", desc = "Markdown Render Toggle" },
    },
    dependencies = {
      "nvim-treesitter/nvim-treesitter",
      "nvim-tree/nvim-web-devicons",
    },
    opts = {
      file_types = { "markdown", "codecompanion", "Avante", "copilot-chat", "opencode-output" },
      heading = { border = false, render_modes = true },
      bullet = { render_modes = false },
      anti_conceal = {
        ignore = {
          bullet = false,
          head_border = true,
          head_background = true,
        },
      },
      -- https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/509
      win_options = { concealcursor = { rendered = "nvc" } },
      checkbox = {
        right_pad = 0,
        custom = {
          doing = { raw = "[>]", rendered = "󰁕 ", highlight = "RenderMarkdownTodo", scope_highlight = nil },
          deleted = { raw = "[-]", rendered = "󰅙 ", highlight = "DiagnosticWarning", scope_highlight = nil },
        },
      },
      code = { width = "block", min_width = 30, position = "right" },
    },
  },
  -- enhance
  { -- jakewvincent/mkdnflow.nvim
    "jakewvincent/mkdnflow.nvim",
    ft = "markdown",
    -- cmd = { "Mkdnflow", },
    config = function()
      require("mkdnflow").setup({
        modules = {
          bib = true,
          buffers = true,
          conceal = false,
          cursor = true,
          folds = true,
          foldtext = true,
          links = true,
          lists = true,
          maps = true,
          paths = true,
          tables = true,
          yaml = true,
          cmp = false,
        },
        perspective = {
          priority = "root",
          fallback = "current",
          root_tell = ".obsidian",
          nvim_wd_heel = false,
          update = true,
        },
        silent = false,
        to_do = {
          symbols = { " ", "x", ">", "-" },
          update_parents = true,
          not_started = " ",
          in_progress = ">",
          complete = "x",
          deleted = "-",
        },
        mappings = {
          MkdnTab = { "i", "<c-l>" },
          MkdnSTab = { "i", "<c-h>" },
          MkdnNextLink = { "n", "]l" },
          MkdnPrevLink = { "n", "[l" },
          MkdnCreateLink = { "v", "<leader>mA" },
          MkdnCreateLinkFromClipboard = { { "n", "v" }, "<leader>mL" },
          MkdnDestroyLink = { "n", "<leader>md" },
          MkdnMoveSource = { "n", "<leader>mm" },
          MkdnYankAnchorLink = { "n", "<leader>my" },
          MkdnYankFileAnchorLink = { "n", "<leader>mY" },
          MkdnIncreaseHeading = { "n", "-" },
          MkdnDecreaseHeading = { "n", "=" },
          MkdnToggleToDo = { { "n" }, "X" },
          MkdnNewListItem = { "i", "<c-o>" },
          MkdnNewListItemBelowInsert = { "n", "o" },
          MkdnNewListItemAboveInsert = { "n", "O" },
          MkdnUpdateNumbering = { "n", "<leader>mn" },
          MkdnTableFormat = { "n", "<leader>mt" },
          MkdnTableNewRowBelow = { "n", "<leader>mj" },
          MkdnTableNewRowAbove = { "n", "<leader>mk" },
          MkdnTableNewColAfter = { "n", "<leader>ml" },
          MkdnTableNewColBefore = { "n", "<leader>mh" },
          MkdnFollowLink = { { "n", "v" }, "<leader>ma" },
          -- MkdnNextHeading             = {'n', ']]'},
          -- MkdnPrevHeading             = {'n', '[['},
          -- MkdnGoBack                  = {'n', '<BS>'},
          -- MkdnGoForward               = {'n', '<Del>'},
          -- MkdnTableNextRow = { "i", "<c-j>" },
          -- MkdnTablePrevRow = { "i", "<c-k>" },
          MkdnTableNextRow = false,
          MkdnTablePrevRow = false,
          -- MkdnFollowLink = false,
          MkdnEnter = false,
          MkdnNextHeading = false,
          MkdnPrevHeading = false,
          MkdnGoBack = false,
          MkdnGoForward = false,
          MkdnFoldSection = false,
          MkdnExtendList = false,
          MkdnTableNextCell = false,
          MkdnTablePrevCell = false,
          MkdnUnfoldSection = false,
        },
        foldtext = {
          title_transformer = function()
            return function(text)
              local updated_title = text:gsub("%b{}", "")
              updated_title = updated_title:gsub("^%s*", "")
              updated_title = updated_title:gsub("%s*$", "")
              updated_title = updated_title:gsub("^######", "h6")
              updated_title = updated_title:gsub("^#####", "h5")
              updated_title = updated_title:gsub("^####", "h4")
              updated_title = updated_title:gsub("^###", "h3")
              updated_title = updated_title:gsub("^##", "h2")
              updated_title = updated_title:gsub("^#", "h1")
              return updated_title
            end
          end,
          object_count_icon_set = "nerdfont",
          object_count_opts = function()
            return {
              link = false,
              blockquote = { icon = "", count_method = { pattern = { "^>.+$" }, tally = "blocks" } },
              fncblk = { icon = "" },
            }
          end,
          line_count = true,
          word_count = true,
          fill_chars = {
            left_edge = "╾─",
            right_edge = "──╼",
            item_separator = " · ",
            section_separator = " // ",
            left_inside = "",
            right_inside = "",
            middle = "",
          },
        },
      })
    end,
  },
}