mirror of
https://github.com/morten-olsen/share.nvim.git
synced 2026-02-08 01:36:30 +01:00
updates
This commit is contained in:
33
README.md
Normal file
33
README.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# share.nvim
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
```lua
|
||||||
|
use({
|
||||||
|
"morten-olsen/share.nvim",
|
||||||
|
requires = {
|
||||||
|
{'nvim-lua/plenary.nvim'},
|
||||||
|
{'nvim-telescope/telescope.nvim'}
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
local share = require("share")
|
||||||
|
local slack = require("share.providers.slack")
|
||||||
|
share.config({
|
||||||
|
providers = {
|
||||||
|
my_slack = slack("your-slack-token")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" share as markdown
|
||||||
|
vnoremap <Leader>ss :!lua require("share").share("my_slack")
|
||||||
|
|
||||||
|
" share as code block
|
||||||
|
vnoremap <Leader>ssm :!lua require("share").share("my_slack", { format: "code" })
|
||||||
|
|
||||||
|
```
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
local pickers = require "telescope.pickers"
|
local pickers = require "telescope.pickers"
|
||||||
local finders = require "telescope.finders"
|
local finders = require "telescope.finders"
|
||||||
local actions = require "telescope.actions"
|
local actions = require "telescope.actions"
|
||||||
|
local previewers = require "telescope.previewers"
|
||||||
local action_state = require "telescope.actions.state"
|
local action_state = require "telescope.actions.state"
|
||||||
local conf = require("telescope.config").values
|
local conf = require("telescope.config").values
|
||||||
|
|
||||||
@@ -24,8 +25,15 @@ end
|
|||||||
|
|
||||||
M.share = function(provider_name, opts)
|
M.share = function(provider_name, opts)
|
||||||
local content = get_visual_selection()
|
local content = get_visual_selection()
|
||||||
|
local type = vim.api.nvim_buf_get_option(0, "filetype")
|
||||||
|
if content == "" then
|
||||||
|
error("No content selected")
|
||||||
|
end
|
||||||
local provider = providers[provider_name]
|
local provider = providers[provider_name]
|
||||||
local users = provider.fetch_users(opts)
|
if provider == nil then
|
||||||
|
error("Provider " .. provider_name .. " not found")
|
||||||
|
end
|
||||||
|
local users = provider.fetch_recipients(opts)
|
||||||
pickers.new(nil, {
|
pickers.new(nil, {
|
||||||
prompt_title = "Users",
|
prompt_title = "Users",
|
||||||
finder = finders.new_table {
|
finder = finders.new_table {
|
||||||
@@ -33,8 +41,8 @@ M.share = function(provider_name, opts)
|
|||||||
entry_maker = function(entry)
|
entry_maker = function(entry)
|
||||||
return {
|
return {
|
||||||
value = entry,
|
value = entry,
|
||||||
display = entry.real_name or entry.name,
|
display = entry.name,
|
||||||
ordinal= entry.real_name or entry.name,
|
ordinal= entry.name,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
},
|
},
|
||||||
@@ -47,6 +55,20 @@ M.share = function(provider_name, opts)
|
|||||||
end)
|
end)
|
||||||
return true
|
return true
|
||||||
end,
|
end,
|
||||||
|
previewer = previewers.new_buffer_previewer({
|
||||||
|
title = "snippet",
|
||||||
|
define_preview = function(self, entry, status)
|
||||||
|
local lines = {}
|
||||||
|
for k in content:gmatch("([^\n]*)\n?") do
|
||||||
|
table.insert(lines, k)
|
||||||
|
end
|
||||||
|
vim.api.nvim_buf_set_option(self.state.bufnr, "filetype", type)
|
||||||
|
for row,display in pairs(lines) do
|
||||||
|
vim.api.nvim_buf_set_lines(self.state.bufnr, row, row + 1, false, { display })
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
}),
|
||||||
}):find()
|
}):find()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,10 +1,24 @@
|
|||||||
local curl = require "plenary.curl"
|
local curl = require "plenary.curl"
|
||||||
|
|
||||||
|
local function merge_lists(t1, t2)
|
||||||
|
local result = {}
|
||||||
|
table.foreach(t1, function(_, v) table.insert(result, v) end)
|
||||||
|
table.foreach(t2, function(_, v) table.insert(result, v) end)
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
local function test_http_response(res)
|
||||||
|
local body = vim.fn.json_decode(res.body)
|
||||||
|
if body.error then
|
||||||
|
error("Slack error " .. body.error)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local M = function(slack_token)
|
local M = function(slack_token)
|
||||||
local token = slack_token
|
local token = slack_token
|
||||||
local function post(receiver, content, opts)
|
local function post(receiver, content, opts)
|
||||||
local text = content
|
local text = content
|
||||||
if opts.format == "markdown" then
|
if opts.format == "code" then
|
||||||
text = "```\n" .. text .. "```"
|
text = "```\n" .. text .. "```"
|
||||||
end
|
end
|
||||||
local body = {
|
local body = {
|
||||||
@@ -19,6 +33,27 @@ local M = function(slack_token)
|
|||||||
content_type = "application/json"
|
content_type = "application/json"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
test_http_response(res)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function fetch_channels()
|
||||||
|
local query = {
|
||||||
|
types = "public_channel,private_channel",
|
||||||
|
exclude_archived = "true",
|
||||||
|
limit = "1000",
|
||||||
|
}
|
||||||
|
local res = curl.get("https://slack.com/api/conversations.list", {
|
||||||
|
query = query,
|
||||||
|
headers = {
|
||||||
|
Authorization = "Bearer " .. token
|
||||||
|
}
|
||||||
|
})
|
||||||
|
test_http_response(res)
|
||||||
|
local channels = vim.fn.json_decode(res.body).channels
|
||||||
|
table.foreach(channels, function(_, k)
|
||||||
|
k.name = "# " .. k.name
|
||||||
|
end)
|
||||||
|
return channels
|
||||||
end
|
end
|
||||||
|
|
||||||
local function fetch_users()
|
local function fetch_users()
|
||||||
@@ -27,12 +62,26 @@ local M = function(slack_token)
|
|||||||
Authorization = "Bearer " .. token
|
Authorization = "Bearer " .. token
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
test_http_response(res)
|
||||||
local users = vim.fn.json_decode(res.body).members
|
local users = vim.fn.json_decode(res.body).members
|
||||||
|
table.foreach(users, function(_, k)
|
||||||
|
local name = k.real_name or k.name
|
||||||
|
if k.real_name then
|
||||||
|
name = name .. " (" .. k.name .. ")"
|
||||||
|
end
|
||||||
|
k.name = "@ " .. name
|
||||||
|
end)
|
||||||
return users
|
return users
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function fetch_recipients()
|
||||||
|
local users = fetch_users()
|
||||||
|
local channels = fetch_channels()
|
||||||
|
return merge_lists(users, channels)
|
||||||
|
end
|
||||||
|
|
||||||
return {
|
return {
|
||||||
fetch_users = fetch_users,
|
fetch_recipients = fetch_recipients,
|
||||||
post = post,
|
post = post,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user