|
1 | 1 | local ts_utils = require('orgmode.utils.treesitter')
|
| 2 | +local utils = require('orgmode.utils') |
2 | 3 |
|
3 | 4 | ---@class OrgLinkHighlighter : OrgMarkupHighlighter
|
4 | 5 | ---@field private markup OrgMarkupHighlighter
|
| 6 | +---@field private has_extmark_url_support boolean |
5 | 7 | local OrgLink = {}
|
6 | 8 |
|
7 | 9 | ---@param opts { markup: OrgMarkupHighlighter }
|
8 | 10 | function OrgLink:new(opts)
|
9 | 11 | local data = {
|
10 | 12 | markup = opts.markup,
|
| 13 | + has_extmark_url_support = utils.has_version_10(), |
11 | 14 | }
|
12 | 15 | setmetatable(data, self)
|
13 | 16 | self.__index = self
|
@@ -100,12 +103,18 @@ function OrgLink:highlight(highlights, bufnr)
|
100 | 103 | local alias = link:find('%]%[') or 1
|
101 | 104 | local link_end = link:find('%]%[') or (link:len() - 1)
|
102 | 105 |
|
103 |
| - vim.api.nvim_buf_set_extmark(bufnr, namespace, entry.from.line, entry.from.start_col, { |
| 106 | + local link_opts = { |
104 | 107 | ephemeral = ephemeral,
|
105 | 108 | end_col = entry.to.end_col,
|
106 | 109 | hl_group = '@org.hyperlink',
|
107 | 110 | priority = 110,
|
108 |
| - }) |
| 111 | + } |
| 112 | + |
| 113 | + if self.has_extmark_url_support then |
| 114 | + link_opts.url = alias > 1 and link:sub(3, alias - 1) or link:sub(3, -3) |
| 115 | + end |
| 116 | + |
| 117 | + vim.api.nvim_buf_set_extmark(bufnr, namespace, entry.from.line, entry.from.start_col, link_opts) |
109 | 118 |
|
110 | 119 | vim.api.nvim_buf_set_extmark(bufnr, namespace, entry.from.line, entry.from.start_col, {
|
111 | 120 | ephemeral = ephemeral,
|
|
0 commit comments