57 lines
1.1 KiB
Lua
57 lines
1.1 KiB
Lua
local fn, vim = vim.fn, vim
|
|
local b, bo = vim.b, vim.bo
|
|
local fmt = string.format
|
|
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 fmt('%d words', wordcount)
|
|
end
|
|
|
|
local function get_item()
|
|
if not enabled then
|
|
common.set_cache_autocmds('hardline_wordcount')
|
|
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,
|
|
}
|