Files
nvim-hardline/lua/hardline/parts/wordcount.lua
Olivier Roques 3f8e61a4e4 Refactor
2020-12-26 00:25:31 +01:00

53 lines
1.2 KiB
Lua

local cmd, fn, vim = vim.cmd, vim.fn, vim
local b, bo = vim.b, vim.bo
local common = require('hardline.common')
local enabled = false
local cache = ''
local options = {
filetypes = {
'asciidoc',
'help',
'mail',
'markdown',
'nroff',
'org',
'rst',
'plaintex',
'tex',
'text',
},
max_lines = 5000,
}
local function in_visual()
local mode = common.modes[fn.mode()] or common.modes['?']
return mode.state == 'visual'
end
local function get_wordcount()
local query = in_visual() and 'visual_words' or 'words'
local wordcount = fn.wordcount()[query]
return string.format('%d words', wordcount)
end
local function get_item()
if not enabled then
cmd 'augroup hardline_wordcount'
cmd 'autocmd!'
cmd 'autocmd CursorHold,BufWritePost * unlet! b:hardline_wordcount'
cmd 'augroup END'
enabled = true
end
if not vim.tbl_contains(options.filetypes, bo.filetype) then return '' end
if fn.line('$') > options.max_lines then return '' end
if b.hardline_wordcount and not in_visual() then return cache end
b.hardline_wordcount = true
cache = get_wordcount()
return cache
end
return {
get_item = get_item,
}