Add window function and receiving information functionality
This commit is contained in:
parent
e8d0b35d11
commit
7fd54118ad
|
@ -1,14 +1,65 @@
|
||||||
local M = {}
|
local M = {}
|
||||||
|
local api = vim.api
|
||||||
|
local buf, win
|
||||||
|
|
||||||
|
local function open_window()
|
||||||
|
buf = api.nvim_create_buf(false, true)
|
||||||
|
|
||||||
|
api.nvim_buf_set_option(buf, "bufhidden", "wipe")
|
||||||
|
|
||||||
|
-- get dimensions
|
||||||
|
local width = api.nvim_get_option("columns")
|
||||||
|
local height = api.nvim_get_option("lines")
|
||||||
|
|
||||||
|
-- calculate our floating window size
|
||||||
|
local win_height = math.ceil(height * 0.8 - 4)
|
||||||
|
local win_width = math.ceil(width * 0.8)
|
||||||
|
|
||||||
|
-- and its starting position
|
||||||
|
local row = math.ceil((height - win_height) / 2 - 1)
|
||||||
|
local col = math.ceil((width - win_width) / 2)
|
||||||
|
|
||||||
|
-- set some options
|
||||||
|
local opts = {
|
||||||
|
style = "minimal",
|
||||||
|
relative = "editor",
|
||||||
|
width = win_width,
|
||||||
|
height = win_height,
|
||||||
|
row = row,
|
||||||
|
col = col,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- and finally create it with buffer attached
|
||||||
|
win = api.nvim_open_win(buf, true, opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function httprequest(url)
|
||||||
|
local command = string.format("wget -q -O - '%s'", url)
|
||||||
|
|
||||||
|
local handle = io.popen(command)
|
||||||
|
local response = ""
|
||||||
|
if handle ~= nil then
|
||||||
|
response = handle:read("*a")
|
||||||
|
handle:close()
|
||||||
|
else
|
||||||
|
response = "ERROR"
|
||||||
|
end
|
||||||
|
|
||||||
|
return response
|
||||||
|
end
|
||||||
|
|
||||||
function M.lookup()
|
function M.lookup()
|
||||||
local keywords = vim.fn.getreg("*") -- receive yanked text
|
local keywords = vim.fn.getreg("*") -- receive yanked text
|
||||||
local url = "https://dl.acm.org/action/doSearch?AllField=" .. keywords
|
local url = "https://dl.acm.org/action/doSearch?AllField=" .. keywords
|
||||||
url, empty = url:gsub(" ", "+")
|
url, empty = url:gsub(" ", "+")
|
||||||
|
open_window()
|
||||||
|
|
||||||
|
print("Starting the request")
|
||||||
|
|
||||||
-- Setup a http socket and request
|
-- Setup a http socket and request
|
||||||
local command = string.format("curl -s '%s'", url)
|
local command = string.format("wget -q -O - '%s'", url)
|
||||||
|
|
||||||
-- Execute the curl command and capture its output
|
-- Execute the wget command and capture its output
|
||||||
local handle = io.popen(command)
|
local handle = io.popen(command)
|
||||||
local response = ""
|
local response = ""
|
||||||
if handle ~= nil then
|
if handle ~= nil then
|
||||||
|
@ -18,25 +69,93 @@ function M.lookup()
|
||||||
response = ""
|
response = ""
|
||||||
end
|
end
|
||||||
|
|
||||||
-- select doi links from response
|
-- extract the rss feed link
|
||||||
local b = 1
|
local rss_url = response:match('"https://dl%.acm%.org/action/showFeed%?.-"')
|
||||||
local doi_links = {}
|
if rss_url == nil then
|
||||||
|
print("ERROR in URL")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
rss_url = rss_url:sub(2, #rss_url - 1)
|
||||||
|
|
||||||
|
print("Feed found at: " .. rss_url)
|
||||||
|
|
||||||
|
local rss_content = httprequest(rss_url)
|
||||||
|
print("Received feed content")
|
||||||
|
print(rss_content)
|
||||||
|
|
||||||
|
-- skip initial block
|
||||||
|
local b, b_start = rss_content:find("</image>", 1, false)
|
||||||
|
|
||||||
|
-- select titles from response
|
||||||
|
b = b_start
|
||||||
|
local titles = {}
|
||||||
while true do
|
while true do
|
||||||
local x, y = response:find("doi/[a-zA-Z]+/10.[0-9]+/[0-9.]+", b, false)
|
local x, y = rss_content:find("<title>.-</title>", b, false)
|
||||||
|
|
||||||
-- stop if no further occurrences are found
|
-- stop if no further occurrences are found
|
||||||
if x == nil or y == nil then
|
if x == nil or y == nil then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
||||||
-- save substring to doi_links
|
-- save substring to titles
|
||||||
doi_links:insert(response:sub(x, y))
|
table.insert(titles, rss_content:sub(x, y))
|
||||||
|
b = y
|
||||||
|
end
|
||||||
|
|
||||||
|
-- select links from rss_content
|
||||||
|
b = b_start
|
||||||
|
local links = {}
|
||||||
|
while true do
|
||||||
|
local x, y = rss_content:find("<link>.-</link>", b, false)
|
||||||
|
|
||||||
|
-- stop if no further occurrences are found
|
||||||
|
if x == nil or y == nil then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
-- save substring to links
|
||||||
|
table.insert(links, rss_content:sub(x, y))
|
||||||
|
b = y
|
||||||
|
end
|
||||||
|
|
||||||
|
-- select dates from rss_content
|
||||||
|
b = b_start
|
||||||
|
local dates = {}
|
||||||
|
while true do
|
||||||
|
local x, y = rss_content:find("<dc:date>.-</dc:date>", b, false)
|
||||||
|
|
||||||
|
-- stop if no further occurrences are found
|
||||||
|
if x == nil or y == nil then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
-- save substring to dates
|
||||||
|
table.insert(dates, rss_content:sub(x, y))
|
||||||
|
b = y
|
||||||
|
end
|
||||||
|
|
||||||
|
-- select descriptions from rss_content
|
||||||
|
b = b_start
|
||||||
|
local descriptions = {}
|
||||||
|
while true do
|
||||||
|
local x, y = rss_content:find("<description>.-</description>", b, false)
|
||||||
|
|
||||||
|
-- stop if no further occurrences are found
|
||||||
|
if x == nil or y == nil then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
-- save substring to descriptions
|
||||||
|
table.insert(descriptions, rss_content:sub(x, y))
|
||||||
b = y
|
b = y
|
||||||
end
|
end
|
||||||
|
|
||||||
print("Keywords: " .. keywords)
|
print("Keywords: " .. keywords)
|
||||||
print("URL: " .. url)
|
print("URL: " .. url)
|
||||||
print("Links: " .. #doi_links)
|
print("Title: " .. #titles)
|
||||||
|
print("Links: " .. #links)
|
||||||
|
print("Descriptions: " .. #descriptions)
|
||||||
|
print("Dates: " .. #dates)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Hardware analysis
|
-- Hardware analysis
|
||||||
|
|
Loading…
Reference in New Issue