Skip to content

Insert link #16

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Refile heading from capture or current file under destination with `:Telescope o

vim.keymap.set("n", "<leader>r", require("telescope").extensions.orgmode.refile_heading)
vim.keymap.set("n", "<leader>fh", require("telescope").extensions.orgmode.search_headings)
vim.keymap.set("n", "<leader>li", require("telescope").extensions.orgmode.insert_link)
end,
}
```
Expand Down Expand Up @@ -58,11 +59,13 @@ vim.api.nvim_create_autocmd('FileType', {
```viml
:Telescope orgmode search_headings
:Telescope orgmode refile_heading
:Telescope orgmode insert_link
```

## Available functions

```lua
require('telescope').extensions.orgmode.search_headings
require('telescope').extensions.orgmode.refile_heading
require('telescope').extensions.orgmode.insert_link
```
1 change: 1 addition & 0 deletions lua/telescope-orgmode/init.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
return {
refile_heading = require('telescope-orgmode.refile_heading'),
search_headings = require('telescope-orgmode.search_headings'),
insert_link = require('telescope-orgmode.insert_link'),
}
60 changes: 60 additions & 0 deletions lua/telescope-orgmode/insert_link.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
local pickers = require('telescope.pickers')
local finders = require('telescope.finders')
local conf = require('telescope.config').values
local action_set = require('telescope.actions.set')
local actions = require('telescope.actions')
local action_state = require('telescope.actions.state')

---@type OrgApi
local OrgApi = require('orgmode.api')

local utils = require('telescope-orgmode.utils')

---@class MatchEntry
---@field value OrgEntry
---@field ordinal string
---@field filename string
---@field lnum number
---@field display function
---@field location string,
---@field line string,

local function insert(prompt_bufnr)
actions.close(prompt_bufnr)

---@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

--print(vim.inspect(destination))
OrgApi.insert_link(destination)
return true
end

return function(opts)
opts = opts or {}

pickers
.new(opts, {
prompt_title = 'Link Target',
finder = finders.new_table({
results = utils.get_entries(opts),
entry_maker = opts.entry_maker or utils.make_entry(opts),
}),
sorter = conf.generic_sorter(opts),
previewer = conf.grep_previewer(opts),
attach_mappings = function(prompt_bufnr, map)
action_set.select:replace(insert)
map('i', '<c-space>', utils.gen_depth_toggle(opts, prompt_bufnr))
return true
end,
})
:find()
end
1 change: 1 addition & 0 deletions lua/telescope/_extensions/orgmode/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ return require('telescope').register_extension({
exports = {
search_headings = require('telescope-orgmode').search_headings,
refile_heading = require('telescope-orgmode').refile_heading,
insert_link = require('telescope-orgmode').insert_link,
},
})