|
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