summary refs log tree commit diff
path: root/.vim/after/ftplugin/markdown.lua
blob: 87fe69dd15cdd299f8e771aa7a7682bf9d004778 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
require('internal.spell')
vim.opt_local.foldenable = false
vim.opt_local.foldlevel = 1

vim.fn.matchadd('Conceal', '- \\[ \\]\\&- \\zs\\[ ', 0, -1, { conceal = '☐ ' })
-- vim.fn.matchadd('Conceal', '\\[x\\]', 0, -1, { conceal = '☑ ' })
-- vim.fn.matchadd('Conceal', '\\[-\\]', 0, -1, { conceal = '☒ ' })
vim.fn.matchadd('Conceal', '- \\[x\\]\\&- \\zs\\[x', 0, -1, { conceal = '🞕 ' })
vim.fn.matchadd('Conceal', '- \\[[ x]\\zs\\]', 0, -1, { conceal = ' ' })

vim.keymap.set('n', '<Plug>Markdown_OpenUrlUnderCursor', function()
  require('internal.misc').open_under_cursor('url-launcher')
end)

vim.keymap.set(
  'n',
  '<localleader>l',
  require('internal.misc').link_preview,
  { desc = 'link preview' }
)

local function toggle_checkbox()
  local ln, n = vim.api.nvim_get_current_line(), 0
  ln, n = string.gsub(ln, '%[ %]', '[x]', 1)
  if n > 0 then
    goto set_line
  end
  ln, n = string.gsub(ln, '%[x%]', '[ ]', 1)
  if n > 0 then
    goto set_line
  end
  ln, n = string.gsub(ln, 'TODO', 'DONE', 1)
  if n > 0 then
    goto set_line
  end
  ln, n = string.gsub(ln, 'DONE', 'TODO', 1)
  if n > 0 then
    goto set_line
  end

  ::set_line::
  vim.api.nvim_set_current_line(ln)
end

vim.keymap.set('n', '<space><space>', toggle_checkbox, { desc = 'toggle checkbox', buffer = true })
vim.keymap.set('i', '<c-space>', toggle_checkbox, { desc = 'toggle checkbox', buffer = true })

-- vim.keymap.set('n', '<leader>zn', function() require('zk').new() end, {buffer=true})
-- vim.keymap.set('n', '<leader>zi', function() require('zk').index() end, {buffer=true})
-- vim.cmd [[ command! -nargs=* ZettelkastenNew lua require('zk').new(nil, <f-args>) ]]

vim.keymap.set('n', 'gt', function()
  require('telescope._extensions.todo-comments').exports.todo({ cwd = vim.env.ZK_NOTEBOOK_DIR })
end, { desc = 'show zk todos', buffer = true })

vim.keymap.set('n', 'o', function()
  local cursor = vim.api.nvim_win_get_cursor(0)
  -- need to decrement the row number here, to account for 0 indexing
  local node = vim.treesitter.get_node_at_pos(0, cursor[1] - 1, cursor[2], {})
  while node do
    if node:type() == 'list_item' then
      local ln = vim.treesitter.get_node_text(node:child(0), 0, {})
      local ln_start = string.match(ln, '^(%d+)%.')
      if ln_start ~= nil then
        ln = ln:gsub(ln_start, tonumber(ln_start) + 1)
      end
      vim.api.nvim_buf_set_lines(0, cursor[1], cursor[1], false, { ln })
      vim.api.nvim_feedkeys('jA', 'n', false)
      return
    end
    node = node:parent()
  end

  vim.api.nvim_feedkeys('o', 'n', false)
end, { desc = 'smart-o', buffer = true })