Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

qwiki.nvim

Warning

skeletony007/qwiki.nvim is migrating to Codeberg!

https://codeberg.org/skeletony007/qwiki.nvim

Update your plugin config to receive future updates.

Pronounced "quickie". Quickly search wiki pages.

Demo with telescope.nvim made with Charm VHS

Instalation

Using lazy.nvim

return {
    "skeletony007/qwiki.nvim",
}

Providers

Providers are available as Lua classes under the qwiki module:

local qwiki = require("qwiki")

New instances should added like qwiki.<provider-name>:new(<instance-name>). For example:

qwiki.wikikedia:new("My Wikipedia")

There can be many instances of each provider, each having a unique name.

Wikimedia REST API

Wikipedia

Simple set up:

qwiki.wikimedia:new("Wikipedia", {
    endpoint = "https://en.wikipedia.org/w/rest.php",
})

Or with API Portal Authentication:

qwiki.wikimedia:new("My Wikipedia", {
    endpoint = "https://en.wikipedia.org/w/rest.php",
    client_id_command = "pass wikimedia.org/MyAccount | awk -F': *' '/^API key Client ID:/ {print $2}'",
    client_secret_command = "pass wikimedia.org/MyAccount | awk -F': *' '/^API key Client secret:/ {print $2}'",
})
ArchWiki

Simple set up:

qwiki.wikimedia:new("ArchWiki", {
    endpoint = "https://wiki.archlinux.org/rest.php",
})

Filetype

local filetype = require("qwiki.filetype")

Filetype modules are defined at filetype.<filetype>. Filetype callbacks are defined on every filetype, but these can be overridden.

Mediawiki

Module

filetype.mediawiki

Implements

filetype.mediawiki.follow_wikilink_under_cursor(ref)
filetype.mediawiki.get_wikilink_under_cursor()
Example: follow mediawiki links
filetype.mediawiki.callback = function(args)
    local buf, ref = args.buf, args.ref
    vim.keymap.set(
        "n",
        "<C-]>",
        function() filetype.mediawiki.follow_wikilink_under_cursor(ref) end,
        { buffer = buf, silent = true }
    )
end

Tip

You might want to fallback to vim.cmd.tag({ vim.fn.expand("<cword>") }) or :normal! <C-]> on error using pcall.

Telesope extension

This plugin includes a telescope.nvim extension qwiki with search_providers picker:

local telescope = require("telescope")
telescope.load_extension("qwiki")
telescope.extensions.qwiki.search_providers()

The search flow is as follows:

  1. Select profider(s) using telescope.nvim. If there is a single provider, then this stage is skipped
  2. Enter starting search query, which is processed seperately by the each provider
  3. Select provider result(s) using telescope.nvim
  4. Select a single provider for any results from more than one provider

This extension supports multi-selection.

HTTP requests using curl

Loosely inspired by Python Requests, module qwiki.requests is a wrapper for curl. This makes it simpler to maintain and add new providers.

local requests = require("qwiki.requests")

Runs asynchronously:

local response = requests.request(
    "https://api.wikimedia.org/core/v1/wikipedia/en/search/title",
    "GET",
    nil,
    {["q"] = "Lua", ["limit"] = 20},
    nil,
    function(response)
        print(string.format("Body:\n%s", response.body))
        print(string.format("HTTP code: %d", response.code))
    end
)

Runs synchronously:

local response = requests.request(
    "https://api.wikimedia.org/core/v1/wikipedia/en/search/title",
    "GET",
    nil,
    {["q"] = "Lua", ["limit"] = 20}
):wait()
print(string.format("Body:\n%s", response.body))
print(string.format("HTTP code: %d", response.code))

About

Quickly search pages accross more than one wiki both locally and using APIs

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages