diff --git a/lua/telescope-orgmode/actions.lua b/lua/telescope-orgmode/actions.lua index fea2717..3f37b3d 100644 --- a/lua/telescope-orgmode/actions.lua +++ b/lua/telescope-orgmode/actions.lua @@ -1,3 +1,4 @@ +require('telescope-orgmode.typehints') local finders = require('telescope-orgmode.finders') local org = require('telescope-orgmode.org') @@ -60,13 +61,14 @@ function M.insert(_) ---@type MatchEntry local entry = action_state.get_selected_entry() - -- Link to the filename by default - local destination = entry.value.file.filename - - -- Link to a specific heading if is set - if entry.value.headline then - destination = 'file:' .. entry.value.file.filename .. '::*' .. entry.value.headline.title - end + local destination = (function() + if entry.value.headline then + -- Link to a specific heading if is set + return entry.value.headline:get_link() + else + return entry.value.file:get_link() + end + end)() org.insert_link(destination) return true @@ -83,11 +85,11 @@ function M._find_orgfiles(opts, prompt_bufnr) M._update_picker(orgfiles, opts.prompt_titles.orgfiles, prompt_bufnr) end -function M._update_picker(results, title, prompt_bufnr) +function M._update_picker(finder, title, prompt_bufnr) local current_picker = action_state.get_current_picker(prompt_bufnr) current_picker.layout.prompt.border:change_title(title) - current_picker:refresh(results) + current_picker:refresh(finder) end return M diff --git a/lua/telescope-orgmode/entry_maker/headlines.lua b/lua/telescope-orgmode/entry_maker/headlines.lua index 55fad33..553b80c 100644 --- a/lua/telescope-orgmode/entry_maker/headlines.lua +++ b/lua/telescope-orgmode/entry_maker/headlines.lua @@ -1,12 +1,7 @@ -require('telescope-orgmode.typehints') +require('telescope-orgmode.entry_maker.types') local org = require('telescope-orgmode.org') local entry_display = require('telescope.pickers.entry_display') ----@class OrgHeadlineEntry ----@field file OrgApiFile ----@field filename string ----@field headline OrgApiHeadline - ---@param file_results { file: OrgApiFile, filename: string }[] ---@return OrgHeadlineEntry[] local function index_headlines(file_results, opts) @@ -20,7 +15,6 @@ local function index_headlines(file_results, opts) file = file_entry.file, filename = file_entry.filename, headline = headline, - title = nil, } table.insert(results, entry) end diff --git a/lua/telescope-orgmode/entry_maker/orgfiles.lua b/lua/telescope-orgmode/entry_maker/orgfiles.lua index 86dcfa0..b448009 100644 --- a/lua/telescope-orgmode/entry_maker/orgfiles.lua +++ b/lua/telescope-orgmode/entry_maker/orgfiles.lua @@ -1,14 +1,9 @@ -require('telescope-orgmode.typehints') +require('telescope-orgmode.entry_maker.types') local org = require('telescope-orgmode.org') local entry_display = require('telescope.pickers.entry_display') local M = {} ----@class OrgFileEntry ----@field file OrgApiFile ----@field filename string ----@field title string? - ---@param file_results { file: OrgApiFile, filename: string }[] ---@return OrgFileEntry[] local function index_orgfiles(file_results) diff --git a/lua/telescope-orgmode/entry_maker/types.lua b/lua/telescope-orgmode/entry_maker/types.lua new file mode 100644 index 0000000..e69de29 diff --git a/lua/telescope-orgmode/mappings.lua b/lua/telescope-orgmode/mappings.lua index a1ae95f..0c4fbc6 100644 --- a/lua/telescope-orgmode/mappings.lua +++ b/lua/telescope-orgmode/mappings.lua @@ -1,4 +1,3 @@ -local config = require('telescope-orgmode.config') local to_actions = require('telescope-orgmode.actions') local M = {} diff --git a/lua/telescope-orgmode/org.lua b/lua/telescope-orgmode/org.lua index f894bc6..59634a6 100644 --- a/lua/telescope-orgmode/org.lua +++ b/lua/telescope-orgmode/org.lua @@ -1,5 +1,7 @@ require('telescope-orgmode.typehints') +local OrgApiHeadline = require('orgmode.api.headline') +local OrgApiFile = require('orgmode.api.file') local OrgApi = require('orgmode.api') local M = {} diff --git a/lua/telescope-orgmode/typehints.lua b/lua/telescope-orgmode/typehints.lua index 04fa518..b52135b 100644 --- a/lua/telescope-orgmode/typehints.lua +++ b/lua/telescope-orgmode/typehints.lua @@ -1,13 +1,3 @@ ----@class MatchEntry ----@field value OrgHeadlineEntry | OrgFileEntry ----@field ordinal string ----@field filename string ----@field lnum number ----@field display function ----@field location string, ----@field line string, ----@field tags string, - -- Type-hints copied from nvim-orgmode to simplify development ---@class OrgFileMetadata @@ -32,6 +22,7 @@ ---@field filename string absolute path of the current file ---@field headlines OrgApiHeadline[] ---@field is_archive_file boolean +---@field get_link string ---@field private _file OrgFile -- ---@class OrgRange @@ -39,6 +30,10 @@ ---@field start_col number ---@field end_line number ---@field end_col number +--- +---@class OrgHeadline +---@field headline TSNode +---@field file OrgFile ---@class OrgApiHeadline ---@field title string headline title without todo keyword, tags and priority. Ex. `* TODO I am a headline :SOMETAG:` returns `I am a headline` @@ -59,7 +54,11 @@ ---@field priority string|nil ---@field is_archived boolean headline marked with the `:ARCHIVE:` tag ---@field headlines OrgApiHeadline[] --- +---@field id_get_or_create number +---@field get_link string +---@field private _section OrgHeadline +---@field private _index number + ---@class OrgApiRefileOpts ---@field source OrgApiHeadline ---@field destination OrgApiFile | OrgApiHeadline